深拷贝(deep clone)与浅拷贝(shallow clone)

浅复制(浅克隆):被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。

深复制(深克隆):被复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。 那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象。换言之,深复制把要复制的对象所引用的对象都复制了一遍。

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAjQAAAHKCAIAAACbmUagAAAgAElEQVR4nOyd71cT177/+SNKH1zkHIHmEYFkrd6DVXLr1lqFyI9GCwVRQGMtxKoUAwj+AKkpoEI1Dr9sS5RUW8Ta5qJQpRiPWi1KzaItF2PO6ne5FgtkdfGIRzzK98G+7DtnJhmSzExmJvPZ671Yyf6VV9if7PfsnZlJnJ+V5ufn2ZkkzczMcJS+ePGCo5RPz0AFVEAFVEClHqo4YV8G/q1ABVRABVRAxZ8KzAmogAqogAqoZEcVN89KPp+PnUnS9PQ0R+nk5CRHKZ+egQqogAqogEo9VLByAiqgAiqgAirZUYE5ARVQARVQAZXsqMCcgAqogAqogEp2VGBOQAVUXG1tNlvAIoqiqqur8ePFxcUoU3GUwghGjSpYbHi9XqPRKBWVSG3BnERpC1RAFXrb2dlZeluDwcBuNTExYTAYCgoKrFar1WrVaDQTExOiUoXeFkZQPKpQYsPv95tMJqPRiGPDYDBQFCUqVeg9K2sEwZyASkZUXq93YjlFjWpxcZGiKJfL5XK5nE6nRqMhK6GZmRmTycRoMjExYTabCRVFUZiWPnPxp4q4rariyu12NzQ0OJ3OUNq63W6GT6xIFW5sLC4ums1mr9eL35Hb7Q7IBiMYSlswJ6CSEZXh31PUqIgXut1uq9VKDHJ4eBgf+ZIpxuVyWa1Ws9nscrm6u7utVqvNZsOTl8FgcLvdAlJF1lY9cYXXJQ0NDWazmfiEyWRirG/IY4qi8FFFWFShx4bX68VILperv78fvxyODbPZTN8DhBEMpS2YE1DJiMpgMJC5wGAwkM9zFMwJ+wo+7GVMQIyV3MTEBAZ78eIF3UEZx9HqHMFoUuHdVEZbxhYrf6rQYwMvqnAYzM/PW61WcrBis9mEpQqWlDWC3G3BnFRH9eTJExlScZiT1+t988038VrKarXiUpPJRFGURqPRaDR4IjAYDCaTiTiEzWbTaDQmkykpKYmYHGlFVmaECu/O4Uyv10uogm3ruVyu6upqfJiME5hTlKk0Gg1FUfS2Go0mLi4OR4Xf77fZbBUVFQaDQaPReL1em82Gx2hiYsJkMpnN5jfffFOj0ZClD44iXF+j0Tx69Ajnhx4bfr8fh0RnZyfuGceG1WolDTneEU7qGUHutnEzrDQ9Pc3OJGlqaoqj1OPxcJTy6RmoBKEaHh5GCF2+fFlWVKRtRkbG8PDwzMyM1+tNSkqy2+0zMzNZWVlHjhzB1TIyMnBmRkZGUlLSs2fPcM9JSUlerxc3nJmZGRwcJDnXrl1LSkq6f/8+bpWRkYHzs7Ky6urq6FQ4hzzGVPgBOw0PD2/cuJHUHxwcJD2H/n6DJcXFlSRUdrs9KSlp06ZNg4ODJDMpKQmH0MzMTF1d3d///ve+vj7yNCMjY2ZmZnh4OC4uzm63ezweHCozMzP3798nMcMzNrxe76ZNm+rq6nDUPXv2LCsri2BwvCOc1DOC3G1h5aQuqpGREYSQw+GQFZWftnIih65kkYSPQPH+Cdm7p2/6zc/PGwwGs9lMvmyw2Wzk24WZmRlSmd7KZrPZbDY6FT6axo/NZvPExMRMkKNjiqJsNtuNGzdwE5vNxv7eW1VxJRXV7Ozsjh07NBoNGTj6tp7NZsvIyCCVbTYbXv1MTEzgpRWmwo9Jpt/vx2MaWWw4nU6r1frbb7/hdTwOFcbJMjCCobQFc1IXlfzNyel00jdA/H6/RqOprq62LSe8j88wJ//yPh6eQUwmEykN0ZzwN9tmsxn3j/+yJ6DFxUVchL/unp2dNRgMXq8XzElCKrfbrdFosAFEbE74ATYhg8EwOzsbbmzgotnZWbfbvWPHjtnZWZPJ5HQ64VRyMCegWrmt/M2JfcGQRqO5ceMGI5NtTn6/f3FxkXy7QE5VmJmZId8rBDOn2dlZvFBzu930GSfgBIRPiHC73T///LPZbDabzU6nk714UlVcSUuFx52nOWH7wac80KnCio3Z2VkcCfh7UHxip9vtZpwlCCMYSlswJ3VRKdGcrFbrm2++6Xa7JyYmyBfLdJt59OgR3mnBJzv4/f7Z2Vm8MTgxMVFcXEyMKpg50Y9tuScgcpkLOS+Z2BI2KnKClqriKvpU+AwFm83W0NCAz4XB+XiDFw9oWOaEYwZ3hU9qCDc2/MvhQVZO5JI4p9OJdwU43hFJKhnBFduCOamLSubmRFFUwFsBnTlzBnsJ+XhTFEW3AbyzT9/cx8ewVqv11KlTpB96K7fb7Xa75+fnXS4X/bUwgNfrNZvN+FwvBgxeJ01MTDQ2NuIpkv5dF5nLVBVXklC53W5sTvQ1K14341Fwu9300ScX4S4uLpKLAfx+P37sdDqJ2bhcLnwWaLix4XK58Kq6s7MTL5gYV8hxvyOc1DOC3G3BnNRFJXNzkhtVRUUFYyVHf/rixQv67BM1Knn+r5ROZTabiXngpRWf2Jifn8fHRjyp2EkO/6voUIE5qYsKzAmogCogldfrNZlM5Bo4sq0nLZWwPSuLCsxJXVRgTkAFVEClCCowJ3VRgTkBFVABlSKo4l6w0uTkJDuTJI/Hw1H69OlTjlI+PQOVIFSXLl1CCLW3t8uKasW2QAVUQKU2Klg5qYsKVk5ABVRApQgqMCd1UYE5ARVQAZUiqMCc1EUF5gRUQAVUiqACc1IXFZgTUAEVUCmCCsxJXVRgTkAFVEClCCowJ3VRgTkBFVABlSKowJzURQXmBFRABVSKoAJzUhcVmBNQARVQKYIKzEldVGBOQAVUQKUIqrh5VvL5fOxMkqanpzlKJycnOUr59AxUglANDAwghCiKkhXVim2BCqiASm1UsHJSFxWsnIAKqIBKEVRgTuqiAnMCKqACKkVQgTmpiwrMCaiACqgUQQXmpC4qMCegAiqgUgQVmJO6qEQ1p8LiXARJiFReXs7xf5ZhXAEVUAlOBeakLipRzQkhdPPBKRB/IYQ4/s8yjCugAirBqcCc1EUlvjnZQPwF5gRUQAXmpC6q8fHxysrKkZERMajAnAQ0p9nZ2dnZ2b/++ov9f5ZhXAEVUAlOBeYEVIJRgTkJbk6zs7PRHEF5xhVQqZMqboaVpqen2ZkkTU1NcZR6PB6OUj49A5X8qRBCtx5+BuIvhNDz5RTNEZRnXAGVOqlg5QRUglGBOQloTrByAiqVU4E5AZVgVGBOYE5ABVRCUYE5AZVgVAih4YctclDZvs2p6av/Y9Vr695OPdFaGrDO166GLTn/uWI1SQTmBFRABeYEVIJRIYSGH7ZKrnVvp5bt24Iff+06uu7tVOvxDxh1vvjGmpq+muR/7TpKfyq5wJyACqgENie4R4BQic89AtRsTtbjH2zJ+QcjMzV9Nbvm166j9KffjTb/x6rXJOcHcwIqoMJJYHNCcDKxcCcTRzwKajan1gv7GK4z/LC1bN8W+1cHVmwb0MPAnARpC1RAFW5bMCeZSqHmNPJzmwy1br32y29ruOvY+w6mpq+WHBULzAmogEp4c5L8TKfYEOJxjwAwJ7oa28rWrdcGK/3y2xp730FL9Xup6avtfQclpwVzAiqgwgnMSabiMz2BORHZ+w5yONPIz22W6ve25PwjIfG17TvelpwWzAmogIqkuHlW4vNr8Eg2JxMrXQgh33IKdxT4jODk5GTEPSOERn4+LR8tO1NIlS3V74VeWWzxGX0+IyjPuAIqdVIJv3KS/Mvk2JBSV06PzshEjW3l69Zrw2qyJTejjaqQnHzk0RlYOQEVUIE5yVRgTnxU01icqkuKwM/KPsqSHB7MCaiAyi+GOUm+Xx8bEsmcxP49J8mn9YidaeTRme071lsOmyTnB3MCKqDyi2NO0m/Zx4AUak4/Pj4rrfYfNq1br2Vknu6s/P6ujZ7zfgli5FxwVKXqkiTnxwJzAiqgEsGcpD7qjA2BOUWmhMTXyiuyGVq3XnvBUUWvVttYnKpLer8Ene6svOCoer8EpeqSGHXAnARsC1RAFW5bMCeZSm7m5PP5uHv2y8OcLjiqAipg5dOdldi9ahuLJScHcwIqoKIn4c1J8g92bEhu5tTa2rp37163283xugihHx+3g/gLzAmogArMSaaSmzmNj4/jO9I2NzcvLCwEG/3bj9tB/AXmBFRAJYY5SX/gyaGrQ40XHJ9IjiHqsbNI3zlt27YN+9PmzZsdDsfS0hJ79G8/7gDxF5gTUAFV3Awr8fk1eBlOT1pdUkJifHmF8UynRatLIsrKXSM5G/f09Hw5hTsKHCN49epVhJDdbg9WwePxBCuyWq30H/UoKCj44YcfZD76ChWf0ecYwRl+n24+bYEKqMJtK/zKSfIPNluUoxob0jdDTSRz/+FtWl2S5Gwc05PcVk4URbF/d6qqqurly5dk9O/88jmIv2DlBFRAJbw5Sf7BZqvzUnVCYvy3N08y8ndXbN1dsVVyvGDT00/LycNKo6Oj7EyS3G53sKLe3l6EUEtLS7AKQ0NDwYrOnj3LNiecKIpaXFyU5+grUWBOQAVUajGnrLy3AhZlojTJ8dj64urRYDYg25STk4NkOfpKFAJzAirVUwlvTqPj5+SmrsuH91RuDViUkBgvOR5bIz+3I4QuLCcHK9ntdnYmSRRFBSs6evQoQujQoUPBKrS3twcrOnDgQDBnam1tnZubQwjd+eUciL/AnIAKqMQwp/NyU9dlq1aXzM53DB7NROmS4wUUn+lJpO+cmpubg9kSbfSlt/YYEJgTUAGV8Ob00xO73NTVX5OQGH/k5C5GvgGlN5/9UHK8gJKhOZWWlgazJTL6kpt6bAjMCaiASi3mVLhzo1afvKcy59L1Yz89sbd3H9Dqkwt3bpScTSnm9PLlSw5bIqMv+bQeGwJzAiqgEsOcLshNXf21eypzf3py4UBNgVafYkC67Ly17d0HJQfjkNzMyeFwIISampoC2hJt9KX39RgQmBNQAZXw5jT2hJKbuvtrzZW5kmOEJbmZk8vlmpub444NMCcwJ6ACKqGo4l6w0uTkJDuTJI/Hw1EK5iSgOf2+nMIdBY4RvHTpEkKovb09WIWnT59G1vOLFy/AnAQ0p4hHn88IRhxXQAVUglMJv3K6+7RTburprzNb8iTHCEtyWzmt2LNfrpu6ShSsnIAKqGLfnNL0KasSXycaHPlMcqQYNqexJxdE0rVhW3d/LX5cf7LUXJl7+fpxjsod3QfNlbkd3QfZpd39tTfvnb02bKN3Un+ytP5kacDe8Mr7YE0BxysKKzAnoAIqEcxpogvEX4o1J1E2OW/eazcgXUJifP3JMq0+pXDnO+bKXHxiC6PmtWEbPufFXJlrrswt3PmOVp9y+foJUiE7b21CYrxWn6LVp5grc7X6lPqTZQakK9z5TnbeWkaH3f21Wn1Kdt5a3JsB6QxIF51NXTAnoFI5lRjm1A3iLzAntrCj3LzXTnea+pNl3K26+2sZjoI9iZhZQmJ8R/ch8hLXhm10n+vur6W3xe6IH393u+32o/NgTkAFVGBOKpJCzUnUrU4D0t36Zwc9J8RvE1clvk5/arbk0VsZkI6+CdzTX4cfG/PX1TeXsXszW/Lqm8uu3WrFV33tLNted/xD+xdH/vtuuxw2dWNvaisszg123yxIYaXy8nJJRlAu5uT+tQfEXwjMKZA5MXICmlP/d42FOzel6VPS8P6eJS8yc1qV+HpPfx1b9c1lxvx1dx7bP207UG4uoH/43zNt/bhqV0tH1VWXDcxJKCqE0M0Hp0D8hRCSZATlY069IP4Cc4rMnOqby9L0KfXNZcRLTrV/FLE54ZpsHawt/Dc7vN78aduBio9LcnKziFFt2vROubmg0Wbp+7bpzmM7mFPEPSOEbj6wgfhL7eZ079deEH8p1py6xJMB6Rk5Pf1HzJY88nRwpCVNn8JuuCrxdfrTZXMK0G2aPqWn/wh53P9dU7iQ1261dnTXHq43F+14j76oKtrxXt3xffYvjty4c2bFTsCc6AnMSUBzwkH1119/RXME5WNOF0H8pVRzEvMMRsMGPSOnx3nEbMmjPy3ctYldZ9XfXqfn/K85Beo2TZ/S4zyCH5/qqDDmr+MDPPzg/MWvTzR+tr/cXPhvu3/btn5cVdrSUdX/3aeCn6sJ5gRa0ZwUEVdx86zk8/nYmSRNT09zlGZnZ/P+0g4SQghlZ2f7llO4o8AxggMDAwghiqKCVZicnIys5/n5eSTy6TCGDXpGTo+z3mzJp+ek6d/ocdaTp2ZLfpr+jVV/e51ex2zJp7eid8tobszPNOZnDv7YSnIGf2w15mcW7no3Av7+7061dHwSaPevsPGz/Re/PnHnF4qcDhPx6PMZwYjjSlQqhNCth5+B+EtZcSXwyom462yg5PP5Aubj9Pz5c45SPm1///13kXqODlW4o8AxggsLC6Ojoxw3b+W9chLFljp6PzFs0Kfp3zBs0Nc378aZ9c27caYxP5NuV7gaLjJb8m/dP4ef4obG/Mw0/Ru4iJgT8SdjfqZhg/5URyXpsL55N67PBuCjG3fOdnTXHq7fy979O1y/FyE0OTkZ2ejH5MpJ8mk9NoSUtXIS9mXAnMSgCncUJJxERDKn2NadXyiy+7dp0zvEqN577736+vrBwcGpqanojKBs40ryaT02BObk9/v9r169EnYqV605vXr1KtxRkHASkfwU/BiQ84YNIVRfX//ee/+2qKqqqnI4HOPj49xjFJPmNPywBcRfYE5hQ4TSM1DJnwrMSSiRSWRycnJsbKyjo2Pv3r10o9q7d29HR8fIyAh7hzYm42r4YSuIv8CcwoYIpWegkj8VgqvcxLzKbWlpyePxOByOysrKzZs3E6Patm3bsWPHyO5fTMaV5NN6bAjMKWyIUHoGKvlTIbjKLYpXufl8vsHBwebm5qKiIvqi6qOPPrp48eL4+Pji4mK4IyjbuJJ8Wo8NgTmFDRFKz0AlfyoEV7lJdJXb3Nzc2NgYRVGM3b/S0lK8+/fy5ctQRlC2cTXycxuIv8CcwoYIpWegkj8VmJNU5kRPU1NTePevtraWvfvX29vLOPcv9J7BnJQuMKewIULpGajkTwXmJAdzYoygz+dzuVzs3b+qqqqLFy8+ePCAvvsn27iSfFqPDSnMnGZYaXp6mp1J0tTUFEepx+PhKOXTM1DJnwruDyJUys7Ofr6cBBzBqakpp9PZ2trK2P3bsWPHiRMnrl69evfu3YhHX7y4QgiN/HwaxF8IITHiasURjGy+gpUTUAlPxX3lVsAUw1eq8aQSaQTJuX+1tbU5OTnEqHJyco4dO3blyhWPxxPZ6POhCpgQQiOPzoD4Cylr5STsy8TwhAtUofcs+GQN5iT2COLdvxMnTgTb/VtYWABzUrrAnMKGCKVnoFIQleD3B1GtOUVwfxD+I7iwsPDgwQOKoiwWC92oSkpKWltbXS4XOfcvOlRgTmBOArxMDE+4QAVU6qQiu39bt26l7/7V1tbSd/9ENacfH58F8ReYU9gQofQMVIJQjY+PV1ZWjoyMyIpqxbZAJROqly9fulyu1tbW0tJS+qLKYrG0t7fj3T/BqcCcwJwEeBkVflyVRSXqjw3G2P8KqLjb4t2/ixcvMnb/ioqK8O6fz+eLgIreCqcom1OqLikh8bXyimzJvQTMSciXUfnHVf5UYE5AJRLV6OjolStX2Of+1dbWOhyOoaGhUHoeHx9HCLW2ttJLEUI/Pm6PpsorjOUVxii/aBQE5hQ2RCg9A5UgVGBOQBUFqpcvX46MjATc/aMoir37R3qmKArXpPsTQuj24/ZoCptTlF80CgJzChsilJ6BShAqMCegijLV4uLigwcP2traqqqqGLt/zc3NePeP9FxaWvrOO+/gq7mJPyGEbj/uiKaWzanj9uMOylH9zVATd/1Q6tx+3PHVQP1XA/WCdBWZFGZO86zE59fgo/8780AVVtuBgQGEEEVRsqJasS1QxQyV2+3u7e2tqamhn/v37rvvVlVVnT59GiFUUFBw7NgxXNrU1DQ/Py+gOVGO6oTEeLYoRzXbnMorjFpdElbm+rSAHkYqYDH6OdNpSUiMz1yfdqbTwlEN6/2SDfSX+2qgPnN9WkJifFbuGgHNybecIh5BwWMjWFtYOamLClZOQCUfKrz719HRUVJSQozKbDbb7fa2tra8vDy8fkII3fnlc0HUealaq0um53xs3c7IufPL57srtiYkxmflvUVy6ppKMlEauzfuzrESEuO1uuRvb57ET7+9eZJdLROlfWzdTp6e6dqv1SUnJMYL9caxFLZyEvZlFPTBUCcVmBNQyZNqcXFx//79CKHOzs6vv/760qVLnZ2d5IfqBZygd1dsZXhAwDp0Z8IKWJNdh+FYARsWlGygV6trKmG/3Jmu/WBOQr6MQj8Y6qECcwIqeVItLS1t3rw5Kyvr+PHjBw4c2LVrF1454UR9VSvsNH1neaHjcrcGNCe6h2GxV053fvm871oDrry7YivukG1O7Ia4Mr0Cu1WIdgjmFOrLKPSDoR4qMCegkieVz+dD/562bdtWVVXV3NyMEBp+2H7nl3MCyuVu0+qSOy8dDli6bE7/lpmJ0hk5Wl1yJkon5oQ3A9l9shvurthKrxaMhN2Qp8CcwoYIpWegEoQKzAmo5Em1tLQ0ODjocrk8Hg/j3n0IodHxc8JKq0vuunw4WOmeyq17KrcyMjNROuPpkaadoXTLaIj7p1crKNnI7mp0/FxCYryw7xrMKWyIUHoGKkGowJyASnFUCKHR8fMCSqtLPtK0izwduPVp89kP6RX2VObsqcxhtMpE6YxOAvbcddnK3RD3T682cOtTdm8FJRsTEuOFfeNgTmFDhNIzUAlCBeYEVIqjEtacsvPeojvT6Pj5rstWhhWFaE4Mg8nOeysuLi4CcxodP3+kaZdWl3y2+8Do+HnH4NHsvLey895iNwRzgg9GzFKBOQGV4qgQQj89sQuirv6ahMR4A0qnS6tP3lOZQ+rgHK0+2YDScc6l68cMKB03PHJyF+lKq08u3LlxT2UObtJ89kP8IDtvLa6Di3DDS9eP4czsvLW4f/qL/vTE3t59IDtvLUbCr0IAhBKYU9gQofQMVIJQgTkBlWyppqamPIGSgOYkuLr6a7r6a4jxCCu1m9MMK/H5Nfjo/848UIXV9urVqwghu90uK6oV2wJVzFONjo6i4KnTcURyH4qyhu6d0eqTBTen58tJ8BHkKI0srmDlpC4qWDkBlTypFhYWNm/evGHDhpKSkrKysr1791ZUVJD7xl6/3fbTkwvq0dC9swakO3KyVNhuFbZyEvZlFPrBUA8VmBNQyZaqo6MDIfTJJ5+cO3eup6fnq6+++uCDD7A5jT25EPOqP1lK7vWn1ad8enaf4C8B5hQ2RCg9A5UgVGBOQCVPKo/H89FHHyGE3nvvvUuXLg0MDNTU1CCE8EW4Y08oEH+BOYUNEUrPQCUIFZgTUMmNyuPxkN/Szc/PRwh9+eWXX3zxBf5ZjcXFRTAnMCcBXkZxHwy1UYE5AZV8qDweD/mRp2PHjvl8vgcPHuCdvdzcXISQx+Px+/0IobtPO0H8BeYUNkQoPQOVIFRgTkAlByqGLY2Pj5Oibdu24XwSpWBOYE4CvIwiPhhqpgJzAippqdirJUbPg4ODCCGLxbK0tIRzwJzAnAR4GZl/MIAKzAmopKKi21JVVRXesmP3vLS05HK5FhYWSA5C6O7TLhB/gTmFDRFKz0AlCBWYE1BFn4qcice2pVB6RgjdnegC8ZfCzOkFK01OTrIzSfJ4PBylT58+5Sjl0zNQCUJ16dIlhFB7e7usqFZsC1QKpRobGyOrpY8++mhoaCiCnhFCdye6QfyFEPp9OYU7+tGPK1g5qYsKVk5AFR0qn8937NgxsloaGhqKuGcwJwHNSUkrJ2FfRiYfDKAKVgTmBFRiUzFsCW/i8aECcwJzEuBlJP9gABV3W5/PZ7fb2Zv+0lKt2BaoFEEV0Jb4UyGE3L/2gPgLzClsiFB6BiqgAirZUvl8PqvVynHKA5iTHATmFDZEKD0DFVABlQyp6KulvXv30i+nFYoKIeT+tRfEX2BOYUOE0jNQARVQyYqKYUs//PCDSFQIoXu/9oL4C8wpbIhQegYqoAIqmVDNzc3hm4VjW3rw4IGoVAihe79eBPEXmFPYEKH0DFRABVSSU83NzbW2tjJsSWwqMCcwJwFeRoUfV6ACKjVQzc3NNTU1BbQlsanAnFRqTvOs5PP52JkkTU9Pc5ROTk5ylPLpGaiACqgkofrjjz+ILZWXl9+8eTPKVNnZ2QiSECk7O9u3nKI5gpFFO6ycgAqogCpwz4xNvJs3b0pLNRso+Xy+gPk4PX/+nKP0999/5yjl07P8qSQZwbDagjkBFVABFbNnui0VFRWNjY3JgUrwyRrMKcojGFZbMCegEoyqsDhXuh2LmErl5eWSjODMzAzDlkZGRkJvKx4VfvDq1SthJ2vVmtOrV68kGcGw2oI5AZVgVAihmw9OgfgLIRT9EVxYWAhmSyu2FY9qxZ6BKlapwJyASjAqhNDNBzYQf6Hls6r++uuvKIzgwsICRVGbN28OZkuhjL7aoh2oxKYCcwIqwajAnAQ3p1mRvxtg2NLVq1cjHn21RTtQiU0F5qQuKlHvSo4QuvXwMxB/RcGcAq6WYizagUrRVGBO6qIS9fecwJwUYU4cm3gxFu1ApWgqMCd1UYE5KUIimdPCwsLp06exLW3bts3lcoXVs+KiHagUTRU3w0rT09PsTJKmpqY4Sj0eD0cpn56BShCqq1evIoTsdrsYVAihWw9bZKLWCx+W7tt8/quPOeo4XQ3W44UrVou+EELPlxP7/xxBXE1NTbW2tr777rsIofz8/C+//PL//b//F27Piot2oFI0Fayc1EUl9spp+GGL5DrRWpqavnp78X+V7du8Jec/U9NXB6y2vfi/UtNXl+3bzF1NEgm4clpcXLx48SJZLTkcjqWlpWBtYyzagUrRVGBO6qIS35xapdXXrqOp6au/G20mOdirGNVaL+zbXjhgQOkAACAASURBVPw2Pcd6/IN1b6dKzo8liDktLi46HI6cnBxsS4ODg0tLS6qKdqBSNJXA5gT3CBAq8blHgJrNqWzfFuvxDxiZW3L+8cU31hXbsj1MoeYU0JZCGcFYmtqASulUApsTgitdhLvSJeJRkNCcRn5uk6G273jb3ndwxWqp6aslR8WK2JwWFxfb29sD2lIoIxhLUxtQKZ1KeHOS/Eyn2BDicY8AMKcIXGdLzj+273hbctSIzYljtRT6CMbS1AZUSqcCc5Kp+GzsgDkxXKfmRBFHaWr66oTE1+TjTOGaE92WcnJyzp8/z3HKg3qmNqBSOpUY5iT9mbgxIMWa02lZaUtORs2JIu46V/77WM2JotT01Y1t5ZIDY4U4+gxbcjgci4uLMLUBVWxQCW9Okn+ZHBtSqjk9Oi0fbcnNqGksCr1+qm71laFjkmOPPFrZnJaWlq5cucKwJf4jGEtTG1ApnQrMSaZSrDmdkYlSdUk1jcVhNbEcNlkOmyQnH3l0hmP0l5aWvvzyy23btrFtif8IxtLUBlRKp4qbZyU+vwYvz28dlCiEkG85hTsKHCM4MDCAEKIoKliFycnJyHqex6Mv9bQesTONPDpT01hc9lGW5PDYnNijPzMz43A43nvvPYTQ1q1bKYr6888/hR3BiONqxbZABVThthV+5ST5tB4bgpWTqM50Y+wUO3Pdem0bVSE5/whr5bS0tDQ4OEhWS3a7nbFaEmoEY+m4G6iUTiWCOUm9Xx8bUqg5/fj4rLRK1SWd7qxkZJZXZF9wVDGqlVdk03O25GZsyc2QnB+LjP7Lly/ptoQ38eQ2iYTSFqiAKty2YpiT9AeeYenK0PHGtnLJMbiPnQUZbL8KzGndei1bqbqkrwbqGDX3Hzal6pJSdUm4wv7DJsnh6eb08uXLr776Cm/ibd68mf7dktwmEaACKjAngT1p+471eHpK1SVJziNzc5qamuLu2f+/5tQO4qmbD84ghLAtvfvuuxRFLSwshD76MLUBVWxQCW9Okh91hqim07trG4t/fHz2gqMqVZckOQ/72FlW5nTlypWioqKBgQGO10UI3X7cDuKjU2f3b83dgm2pra3tf/7nf9j/Z7lNIkAFVEoxJ+mPPcPSBccnqbokyTEYkps5LSws4DvSMn47lTH6tx93gCLTGeqTfJMRIbRp00aE0P/8z/9ENvowtQFVbFAJb07SHnjuP7ytvML4w93P8OPM9WmZ69P2H97G0YRyfKLVJUl+yMyQ3MzJ7/dbLBZy0/SAFgXmxN+Wao7uuXFHyN9zYiT1TG1ApXQqMcxJsg/5D3dbyiuM2I20uqTyCiPlqKYc1eUVRq0uiXJUB2xFOaq1uiTJZyiGZGhOra2tjN/1YFgUmFO4YtsS/9GHqQ2oYoNKeHO688vn0mp3xdaExPjOS9X0zM5L1VpdcsD6HEUSCiH003LysNLo6Cg7kyS32x2sqLe3FyHU0tISrMLQ0FCwopaWFhQoEYuSw+grRWc7/8+Wao+Zb4y2MkYfzAmoVE4VN8NKfH4NXg7T0+6KrQUlGwLmf2zdzs6XoTl9cfVoQBuQcyooKEAyGH35i9gSQohtS1gIoefLKdzPoMfj4Sjl8+nm0xaogCrctmKsnM5Jq90VWzsvHWbnd146nJX3VsB8rS5Zcmy6hh+2I4QuLCcHK9ntdnYmSRRFBSs6evQoQujQoUPBKrS3twcrqq6uDuZMra2tc3Nzchh9OetsZzWxpYOHSwdHPgtWE8HKCahUTyW8OY2On5dWeypzjjTtYuef7T5QULKRnd912arVJUuOzRCf6Umk75w6OjqC2RJt9M+B2Dp30fp/tmQtvf7jZ9z1wZyACqhi05wyUTo7PzvvrbPdB8CcIjan2traYLYkn9GXm6i+Ix/syF+2pbLrP7aIPfowtQFVbFAJb04/PbFLqz2VOVp9cnbeWkamAaUHrN/VX6PVJ0uOzZDczGlpaWnz5s3BbImMvuRmIB9FZktgTkAFVDjFpjl19dcU7tyILSo7b61Wn1y4cyOj2rXhU139NV39NUdO7tLqk/Hjrv4ayflFNafx8fHKyspgV9H6g4fg2NgYQqipqSmgLZHRl9wS5CA+tgTmBFRAhZPw5jT25IK0MlfmdvfX4sfd/bXkMUOfnt1nrsxlS3J+LJHMacW2HOY0NzfH3bMcDk2kVafj/2zpkLXs+u3W6B+awNQGVLFBJYY5UdJq2ZwkxuApuZlTKD2r2ZyEsiUwJ6ACKpzAnGQqMCeliG5LH+3fceWHT/n3CeYEVEAlvDndfdopocyWPAPSFe7cZLbkHawtlBaGjxRqTpJvh0ZTXY76oh3v0W1JDpu6MLUBVWxQxb1gpcnJSXYmSR6Ph6MUIXT3aZeEMlvyiA7WfiAtDB8hhH5fTuGOAp8RfPr0acQ9i7puzs5ba0A6vDLW6lMSEuMNSHf5+gl2zfqTZdl5a3EdrT7FXJnLWFjjzOy8tbgT3ESrT9HqUzq6D7F7MyBdQmI8rkwqXPnhFM2WTgm+bo549PmMoDzjCqjUSSXCymmiG8Rfil05iWVO3f212D+I2XR0H9LqU64N2+jVbt5rZ+zrZuetpfvT5esnCne+k5AYX3+ybOwJdbCmUKtPyc5bO/aEujZs0+pTGI6YnbeWvAR+Rdzw9qPzzW0fC25LxJxg5QRUKqcCc5KpwJzYIsZAVH+yjLEwCqiExHj6U3NlbuHOd+jd0h8TY8MrsIAYDEcEcwIqoBKcSnhzcv/aA+IvhZqTqN/DGZCOkdPTX2e25AWs3NNf19Nf1/9d492nnasSX2d8MUlvRe82TZ/S019HHg+OfMbuuaOnKtiLyuEbR5jagCo2qMCcZCowp4jNyYB0afoUuiIzp1WJrxuQjq00fQqbBMwJqIBKWCoxzKkXxF9gTpGZU5o+hX2WZsQrp1v/7BD1HYE5ARVQRc+c7v16EcRfijUnEc9gNCA9I6en/4jZkkd/asxfx264KvF19imdAbtN06f09B/Bj4356+qby6U6VxPMCahUTgXmJFMp1ZzEPEnEsEHPyOlx1pst+eRp/40mdh1jfuaqv71OzzFb8umt6E3S9G/0OOvx41v3z9GfEg3+2FrfvFu2p8PA1AZUsUElsDkZjUYESYhkNBrBnOiuY7bkr/rb62ZLfkfvJzizo/eTwl3vGjboD9YW0a3ImJ/Z46zvcdYX7no3Tf/GwdoiesODtUWGDXrDBj0xmDT9G8Sr0vRvFO56l7xEj7M+Tf+GMT+zo/eTHmd9ffNuY35mQMcCcwIqoBKWSmBzIm9gNlDy+XwB83F6/vw5Rymftr///rtIPUeHKtxRiD1zwj6Bdev+ubvLKxuc03+jiV6zvnk3XhsR+6E37L/RhJ8O/thKLyUuyDaejt5PcIdmS77YtgTmFPNULpdrcHBwRSqKotxuNz3f6/U6nU71/K/i5lnJ5/OxM0manp7mKJ2cnMQP/vWvf/lY6Y8//mBnkvTbb79xlPJp6/F4ROo5ClT/+te/wh0FX/ARHBgYQAhRFLXiCIbb8/z8PIJzNYU7V5NEAvv/HOJnMIIRjDiugCpg25aWloaGBkZRQ0PD9u3b8YPffvstGFVDQ8OOHTvo+Xfu3ElOTibMjx49unPnTkCqzs7Ozs7OR6x0586dlpaWNWvWRPCOoj+CYq2cwnLIUHoGKkGo+PwS7opUYE4CmhOsnGKDymAwmM1mepHNZqurq/P7/bOzsxqNxul0BqSy2Ww2m42ePzExYTAY5ufncROz2WwwGBYXF9lU7LaEymazaTSaCN5R7GzrhQURSs9AJQgVmJMiBOYUM1ROpxP7BHERYk64lGFd/kDm5HQ6rVar2WzWaDQ7duzAhqfRaLxeb0AqetvFxUUSRdicDAZDBO8IzEmUtkBFkvjmJP0lYjEgMKcYo6Ivj2w2W3FxMXnqcrlcLhf9aXV1tc1mM5lMJpPJYDBYrVZcRFZOfr/fYDCwl1z+QOY0MTGh0WjwS4A5hQ0RSs9AJQiV2OZ079deEH+BOSmdqqGhgX46A90qrFZrUlIS9g+8HrLZbPTduRW39cxmM3EsRp1g5kTeEZhTeBCh9AxUglCJb07SXyIWAwJzUjrVn3/+qdFosIV4vV63243PvpuYmKAoKiMjY0UqYjAURVmtVmxjJpNpzZo1uGer1YqXVhRFMajAnAIktYWg4qjAnBQhMKcYoKIoymQy+f1+ssrBaWJigm5OXq+XUSHYysnv97tcrjVr1qxIBeYUIKkwBJVFJbY5/fPZFyD+AnOKDSq8WUf3nomJCafTibf1yJLIZrPR9wCJOZnNZrPZTL5bmpiYMJlMf/75J37qdDonJiYCUjHMibgRmFPYEKH0DFSCUIlqTnB/EKESn/uDQLTLisrpdOIT9mw2m8vlmpiYcLlc9JUT/WwIv9+/uLh45swZk8lEdgVJP/gUCaPRaFtO9A09OhXdnNxuN5iT36/iEFQKlajmRKhWvOcFO8X2PT74UHH8n8UbQcHbqpYqoBMkJSXhB/iMcPrZEG63+8033yR+hjPxqRO4tzt37qxIFbCtX3HmNMNK09PT7EySpqamOEo9Hg9HKZ+egUoQqqtXryKE7Ha7qFQvXrx4zkq//fYbO5OkyclJjtJnz55xlPLpWeZUL1684Pg/izeCgrdVJ1VfX19WVha7dNOmTYODg8XFxRkZGV6vNyBVXV1dXV2d1+stLi4eHBycmZl59uxZUlISofJ6vXV1dQGpcFuck5WVRT7v09PTdXV1xcXFEbyj6I8grJzURRWdlZPgbYEKqJRF1dnZibfm2Dtvfr/fbrdrNJpgKxjynZPVaqVv+nm9XrPZ3NDQQE5D12g0jLU1pnK73SQfnw2BL8Wdn59n3FEi9HcE23qitAUqksCcgAqookal0WjY5ywsLi5mZWUxblxEv9cDx9l6dCp8xgQ3FT7hAj+mKMpoNDJuJhv6OwJzEqUtUJEE5gRUQBU1KrY5uVwug8EwODiIz/DGpfj6JwbViuZkMBjYTkOnIueyk/Tbb78ZDAaTyaSI7zLBnNRFBeYEVEAVHSpsP8QG8L0h8GoJt3U6nRqNBi+AiDnhs/XwWePsLcGJiYlHjx75/X632x3w/q2459nZWXzjiYDvyGAwcLQNlsCcRGkLVCSBOQEVUEWHyuv1Eg9wuVz0xQppi8/zjouLo6+Bfv75Z/x9VcD1TUtLi0ajwa7GLn327Bm+cIr7HRkMhmDXSAVLYE6itAUqksCcgAqo5EbldrsZF+HSbyXO7pmiqIB3ffX7/dw/Y0ioYFtPyJ6BShAqMCegAiqgUgQVmJO6qMCcgAqogEoRVGBO6qICcwIqoAIqRVDFzbMSn1+Dj/7vzANVWG0HBgYQQhRFyYpqxbZABVRApTYqWDmpiwpWTkAFVEClCCr5mhPjNhsyoRKwLZhT6G2BCqiASm1U8jUnxg3h16xZs7i4yL4iGucEpMI3qw+FanZ2ltw+hH5BHO7Z5XK53W7vcpqYmCAPduzYoaB7VfnBnIAKqIBKIVSyNie6SSQnJ/uXb/7BqOZ0Ou/fv+9lpYmJCdwDoaK7ndPpxNUePXpEvwMV44YfMzMzdJKJiQn6BW6YinTI/Y4YCcwp9LahUNF//Abf+NJms+FbPtMrM67woFPheAiXKtgFj48ePWLEUug9y+QzCFRAJSGV3M2JTCVGoxE/YFxrjauxqehTFabyer0BbwM8Pz9Pv41VxOZkNpsZtxuR22D7Y9qc6INrMpmcTufs7KxGowm4Inctp/7+fvKY/ett9+/fZ78cCT9MFeze0kaj0WQy4eMeg8HAjg2GEbLfUbAkw7gCKqASnEqO5uR0OvHn2Ww2GwwGvMRZs2YNnlPwL0KSzTRiTvSFC0VR9CkDUzHMA2/WTUxM3Llzh37Dj4jNif5zyIx3FDCBOYXeNhQqMnCzs7P47iwTExMURQ0PD9OHjLEiJ1SMHyT1+/1OpzMrK8vv9y8uLhI/w/dDw+GHqdjLo8XFRbPZjO+B5vf73W53wFV1sPvT+GXwGQQqoJKcSo7mhBO5+xP+AJOVEyPRV05Wq9Xr9S4uLhoMBvpXQZhKo9HQj1XxfiA2J4qiyLdZAc2J7AFi4yTbhnRzYr+E3AbbH+vmhMeFjCy+z+bw8DDdjYg5YTfCbfFtNBlWYTKZyM1gSA9ut9tqtWLnu3HjBj4iod9Oxuv14kMrvCajKMpsNmNjo9+Lc2ZmJpR7oAVMMowroAIqwanka04ajQZ/qvFTi8WCz0TAt0pkr5zwU5PJZDKZGOdNvHjxAu/w0DOJCTGoIl45+f1+vM4L9o4YSZIQXFhYGB0dnZubkxXVim25qVpaWmw2G74VJn6Axyvgli99NG02G9kSZNwHk7ElODExgYPKbDaTrzOJOZFvN/3LZ5maTCbyTRiJRvpLz8zMBLuxtF82n0GgAioJqWRqTnjvDn968WHpjh07KIrCcwT7QJi0xRt6jInmxYsX+Pb1JGdxcZHMZfiXJYkn8TQneqncBju2qfDA4V8IxbtweCO3rq6Ovp3LGE2j0YjrM/rEx0B0Khx+eOcWr4+Dbev5/X68csJ7gE6nE6+c8Jqb/n7BnIAKqIKa0wwr8fk1eKF+Z76ioqKurm54ePjZs2c45/r16xUVFTMzMxkZGXa7ndTE1XDb4eHhioqKZ8+eZWRkDA8P06mGh4czMjLoL4fP48JUuCF+mpWVxaDKysqy2+19fX19fX2nTp0qLi7uW05///vf6ZXr6urq6uoCviN2Eup/JWxb5VJlZWXdv39/ZjkkZv49NkgipTi1tbUlJSWx+6yrq8vIyGC0zcrKIuOblZWFqRgBQ9Kvv/6K62OqZ8+eZWVl9fX10d9vUlISHYbxjoKlWB1BoAIqepLjyglfVMT+4hqfIsH4bpmsnPB3DDjT5XLRj0nZKycGFUVR5NiZvXKi53CvnEwmE6ycpKIiw0QiBz9gnCBOj6vFxUWj0ci+PsG//DukDCqTyUR+GNtsNt+4ccMfZOXkdDotFsvs7CzeZ6YoymazsX/RJ+DP6vjVOoJABVT0JFNz8gc6q4q+aUY+57ja/fv3GWdb0aeMFc0Jf5HAboipyHzkD2Fbj75BJLfBjm0qvA+MzwjH5xrgM7k5tvXMZjNua7PZ2NfPWa1WOhXeXjabzTg+3W53sG09fJXV999/bzabsT85nc6Alxmwf8ab/o6CpVgdQaACKnqSoznhRJ9EvF7vjh078E8X42Nh+nfaOCdgn/RTfhmn0pHSP//8k3GJDL2O3W6nn17BbU7yP1svJqk6OzvxmgYfsjBWTsHiCrsFoWKbE/07p9nZWbwud7vdJEKCmRO+/rezs9Pv9+PrnLCl0Y9ywJyACqi42yrAnPBdiEhbvE9CNvfwnklfX5+LlcgVUWQSYX/vbbPZkpOT6VuFBoOBbjAVFRX0+vjSGb/fT1GURqOhn+BO/1XmgO+IkSAEhaJqaGgIuHFHzIl9nRNZeRMqxnnk+GQcQkWPnBXNCR/0kJXTxMQEtiWn00nO55yZmWGfQUqS2kYQqICKneRrTni9wp5EcBFjEy8UKnz+Fbv0t99+oz+l97y4uMjRs9frpbel3wMpdKpgST0hKDgVuS4NL6nv378/MTFBrj3AX1uSe1w9evSIPKavivx+v0ajefbsmZ91fS7uyuv1FhQU4EuaGDx4a/H77793Op14wUSOfvA5e/j9Yq8K5R0xUsyPIFABlV/O5iQGlc1mY9+nVSgqxjfeoVOt2DMfqnDbxgCVy+WijzKjZ3yZdihUZrP51KlT3FT4glx6JnlKvs1iHLIQKvoGACOpfASBCqj8ajMnoAKq0Nu63e7i4mKRqLxeL8dtYRX3vwIqoBKcCswJqIAKqIAKqGRHBeYEVEAFVEAFVLKjinvBSpOTk+xMkjweD0fp06dPOUr59AxUQAVUQAVU6qGClRNQARVQARVQyY4KzEldVOPj45WVlSMjI7KiWrEtUAEVUKmNCsxJXVQx/HtOQAVUQBVLVP9mTj6fz+PxuN1uT/A0OjrKUTo0NMRRyqdnoBKEqre3FyHU0tIiK6oV2wIVUAFVrFI9fPhwBXPyeDwIEiRIkCBBim4K+EXD/5nT0tLSlStXHA4HRVGO4Mlut3OUtre3c5Ty6RmoBKE6evQoQujQoUOyolqxLVABFVDFMFXA3+aG75zURQXfOQEVUAGVIqjAnNRFBeYEVEAFVIqgAnNSFxWYE1ABFVApgipunpV8Ph87k6Tp6WmO0snJSY5SPj0DlSBUAwMDCCGKomRFtWJboAIqoFIbFayc1EUFKyegAiqgUgQVmJO6qMCcgAqogEoRVGBO6qICcwIqoAIqRVCBOamLCswJqIAKqBRBBeakLiowJ6ACKqBSBBWYk7qowJyACqiAShFUYE7qogJzAiqgAipFUIE5qYsKzAmogAqoFEEF5qQuKjAnoAIqoFIEVdwMK01PT7MzSZqamuIo9Xg8HKV8egYqQaiuXr2KELLb7bKiWrEtUAEVUKmNClZO6qKClRNQARVQKYIKzEldVGBOQAVUQKUIKjAndVGBOQEVUAGVIqjAnNRFBeYEVEAFVIqgAnNSFxWYE1ABFVApggrMSV1UYE5ABVRApQgqMCd1UYE5ARVQAZUiqMCc1EUF5gRUQAVUiqACc1IXFZgTUAEVUCmCKm6elZT1O/NAFVbbgYEBhBBFUWJQFRbnIkhCpF27dnH8n2UYV6JSQVwJlZQVV7ByUheVqCsnhNDNB6dA/IUQ4vg/yzCuRKWCuFJnXIE5qYtKfHOygfhLWZOI2FQQV+qMKzAndVGBOSlCCKHZ2dnZ2dm//vqL/X+WYVyJSgVxpc64AnNSFxWYkyJEJpHZ2Vn2/1mGcSUqFcSVOuMKzEldVD6fz263ezweMagQQrcefgbiL2VNImJTQVypM67AnIBKMCqYRNQ5iYhNBXGlzrgCcwIqwahgElHnJCI2FcSVOuMKzAmoBKNCCA0/bJGDyvZtTk1f/R+rXlv3duqJ1tKAdb52NWzJ+c8Vq0kiZU0iYlPJJ66ULmXFFZgTUAlGhRAaftgquda9nVq2bwt+/LXr6Lq3U63HP2DU+eIba2r6apL/teso/ankUtYkIjaVTOIqBqSsuIqbYSU+vwYP13ILlXbu3BnxKPAZQY/HE3HPSAaTiPX4B1ty/sHITE1fza75teso/el3o83/seo1yfnJJPJ8OUVzBCGuYlvKiiuBV04ITvoU7qTPiEdBzUe4rRf2MVxn+GFr2b4t9q8OrNg2oIdJNYko6AhXbCo5xFVsSFlxBeYkUynUnEZ+bpOh1q3XfvltDXcde9/B1PTVkqNiKWsSEZtKtnGlOCkrroQ3J8nPSIkNIR7XcsMkQldjW9m69dpgpV9+W2PvO2ipfi81fbW976DktEqcRMSmkmdcKVHKiiswJ5mKTxhJeBGu5B8/hux9BzmcaeTnNkv1e1ty/pGQ+Nr2HW9LTqvQSURsKhnGlUKlrLgS3pwkP10yNiSSOYl9+6KRn0/LR8vOFFJlS/V7oVcWW8qaRMSmkltcKVfKiisxzEn67/1iQEo1p0dnZKLGtvJ167VhNdmSm9FGVUhOPvLojLImEbGpZBVXipay4grMSaYCc+KjmsbiVF1SuK0a28rLPsqSHF5xk4jYVPKJK6VLWXElvDlJvq8aGwJziliROdPIozPbd6y3HDZJzq+4SURsKpnEVQxIWXElhjlJv7UaA1KoOf34+Ky02n/YtG69lpF5urPy+7s2es77JYiRc8FRlapLkpwfS1mTiNhUcoir2JCy4iruBStNTk6yM0nyeDwcpXCMI+Axzu/LKdxR4BjBS5cuIYTa29uDVXj69GlkPb948UIOk0hC4mvlFdkMrVuvveCoolerbSxO1SW9X4JOd1ZecFS9X4JSdUmMOtJOIhGPPp8RjDiuRKWSQ1zFhpQVVyKsnKSe1mNDcls5+Xw+7p798jjCveCoCqiAlU93VmL3qm0slpycMYko6AhXbKoox1WqLgkf4kgeBiqPK+HNSfIBiA3JzZxaW1v37t3rdrs5Xhch9OPjdhB/KWsSEZsq+nFVXmEsrzBKHgYqjyswJ5lKbuY0Pj6O70jb3Ny8sLAQbPRvP24H8ZeyJhGxqaIfV9icJA8DlceVGOYk/QECh64ONV5wfCI5hqjHOCKdELFt2zbsT5s3b3Y4HEtLS+zRv/24A8RfyppEhKLCW8fsFP24WjanjtuPOyhH9TdDTdz1Q6lz+3HHVwP1Xw3UC9KVGuJKeHOKchitKK0uKSExvrzCeKbTotUlEWXlrpGcTaQwEsmcjh07Rv9Rj6KiogcPHsh89BUqZU0iglBNTU0hhHJycjo6OhguJWBcUY7qhMR4tihHNb0aNqfyCiOZLjLXp7F7o1fAYvRzptOSkBifuT6NMfkwqmG9X7KB/nJfDdRnrk9LSIwXcKZSVlzFvjnhiMRDTj8k2X94m1aXJDmbGGEkkjlRFIVYqaqq6uXLl2T07/zyOYi/lDWJCEKFzYmk0tLSwcFBvIEsYFx1XqrW6pLpOR9btzNy7vzy+e6KrQmJ8Vl5b5GcuqaSTJTG7o27c6yExHitLvnbmyfx029vnmRXy0RpH1u3k6dnuvZrdckJifFqjivhzUnCjzRHRCYkxpPgoIfg7oqtkuMFC6OflpOHlUZHR9mZJLnd7mBFvb29CKGWlpZgFYaGhoIVnT17lm1OOFEUtbi4KM/RV6KUNYkIQoXjJy8v7+OPPy4sLCShhdfrAv5v6R957AEB69CdCStgTXYdhmMFbFhQsoFera6phP1yZ7r2gzkJ+TLynJ46L1Wzxx6LfTQkB31x9WgwG5BtysnJQbIcfSUKKWoSCZ1qaWkJH+gMDg46HI6Ojo6qqqqqqip6INXW1vb09Njt9sOHD2dnZ+PMc71Wwf/JeKHjcreyiwIetgacK/quNeDKuyu2FGEjUQAAIABJREFU4g7Z5sRuiCvTK7Bb3QnNDmM4roQ3p9Hxc3JT1+XDeyq3BixKSIyXHI+tkZ/bEUIXlpODlex2OzuTJIqighUdPXoUIXTo0KFgFdrb24MVHThwIJgztba2zs3NIYTu/HIOxF/KmkQYbefm5jwez/j4OA6bY8eOVVVVbd++nePIZuvWrVVVVVu3bkUI9fX1Xbt2rb+/f9++faTC8MN2Yf/DLnebVpfceelwwNJlc/q3zEyUzsjR6pIzUToxJ7wZyO6T3XB3xVZ6tWAk7Iaqiqu4eVby+XzsTJKmp6c5ShFCo+Pn5aauy1atLpmd7xg8monSJccLKISQbzmFOwocIzgwMIAQoigqWIXJyclgRQ0NDexppamp6Y8//qCNvvTWHgPiM/ocIzjP79NNb/vw4UO32/31119TFHX69GmLxbJv3753332Xw4FKSkosFktDQwNFURRFud1ut9vt9XpJzzjAvv766xMnTmzatAk3uX37thhxpdUld10+HKx0T+VW9uFsJkpnPD3StDOUbhkNcf/0agUlG9ldjYpw6Cz/uKIn4VdOPz2xy01d/TUJifFHTu5i5BtQevPZDyXHCyg+xzgcI8jnhIjS0lL2aokx+pKbemxIDke4CwsLeAsOL4Cam5stFsvevXs57Gfz5s14mw6v3V0uF+4hRCqHw4EQwraUk5MzODiISwWPK60u+UjTLvJ04NanzWc/pFfYU5mzpzKH0YpxIBvweFerS+66bOVuiPunVxu49Sm7t4KSjQmJ8bEXV6G3VYs5Fe7cqNUn76nMuXT92E9P7O3dB7T65MKdGyVnU4o5vXz5ksOWyOhHcwaPYUVtEvH5fB6PZ2xsDDtQZWVlVVUV/vowWCoqKqqqqqqtrcVNHjx44PF45ubm+FONjY3hl8Dn15BSYeMqO+8tujONjp/vumxlWFGI5sQwmOy8t+Li4iIwp9Hx80eadml1yWe7D4yOn3cMHs3Oeys77y3B93XAnC7ITV39tXsqc396cuFATYFWn2JAuuy8te3dByUH45DczAkf1TY1NQW0JdroS+/rMSABJxFyDsKVK1ccDkdTU1NVVZXFYuGwH4SQxWKpqqrq6OhwOByDg4O4B+7XFWRqu3LlCrkygSQB4wpvohhQOl34sJXUwTlafbIBpeOcS9ePGVA6bkg2YLr6a/AB7p7KHNyk+eyH+EF23lpcBxfhhviw+Kcn9uy8tbh/+ov+9MTe3n0gO28tRsKvQgBkGFfBRjBgkos5jT2h5Kbu/lpzZa7kGGFJbubkcrnm5ua4YwPMSapJ5OXLlx6P58GDB/iUltra2qqqqqKiIg772bZtG96CwwugsbExj8fz888/c4wvn5mB5+2LJB+RYOrqr+nqryHGI6zAnIR8GTCnWDWnFXv2y3sSUZYCjj5evrhcLrvdTlEU+yRsdtq7d29VVVVzczN2IHwNHH3HjJFke289yUck+hq6d0arT45CXEVhBOViTnefdspNPf11Zkue5BhhSbHmJP2OqHL1w9iZr7450es8ihC6cOGC1Wq1WCyM81AYiZyDcPHiRYfDMTIyMjQ0NDU1FdkIyticpB+daGro3lkD0h05WSpst2BO0s/sdKXpU1Ylvk40OPKZ5EgxbE5jTy6IpGvDtu7+Wvy4/mSpuTL38vXjHJU7ug+aK3M7ug+yS7v7a2/eO3tt2EbvpP5kaf3J0oC94ZX3wZoCjlcMXZevn+z75kRHl/WErfLoyY/KzAVl5oKsbK6TsEtLS6uqqo4dO4YXQMPDw/gcBMFHULbmJF5cyUf1J0vJvf60+pRPz+4T/CVUb04TXSD+Uqw5ibLJefNeuwHpEhLj60+WafUphTvfMVfm4hNbGDWvDdvwOS/mylxzZW7hzne0+pTL10+QCtl5a/GHX6tPMVfmavUp9SfLDEhXuPOd7Ly1jA67+2u1+pTsvLW4NwPSGZBuRdpb//y875vGvm8am9s+PmGzHLKWl5kLina8x70Fh13q8JE9J2wWtHzzKkVMImJTiRdXahOYUzeIv8Cc2MKOcvNeO8nJzltbf7KMu1V3fy3DUbAn4cfXhm0JifEd3YfIS1wbtpEirT6lu7+W3ha7I3585YdT9ot1J2yWEzYLtpac3CwO+8nJzSozF5g/KsJNuhwNfd80DtxsUfokIjYVmJNQUlZcxc2w0vT0NDuTpKmpKY5SMCcBzen5cgp3FDhG8OrVqwghu90erAI+YziCnmfw6Iu51WlAulv/7KDnhPht4qrE1+lPzZY8eisD0tE3gXv66/BjY/66+uYydm9mS159c9lVly2gA+0s215uLqiyljfaLJ+2Hej7tqnv26bh++fC3dSNePT5jGDEcSUqlQy/LFColBVXwq+c3L/2gPhLoSsnUT9adBfBCmhO/d81Fu7clKZPScP7e5a8yMxpVeLrPf11bNU3lxnz1915bG+0WRptlo7umr5vm666bMJOIgo6whWbCsxJnXElhjn1gvgLzImtUMypvrksTZ9S31xGvORU+0cRmxOuydbB2kKYRKJGBeakzrgS3pzu/doL4i/FmlOXeDIgPSOnp/+I2ZJHng6OtKTpU9gNVyW+Tn+6bE4Buk3Tp/T0HyGP+79rEvUdBZOyJhGxqcSOK/VIWXElhjldBPGXUs1JzDMYDRv0jJwe5xGzJY/+tHDXJnadVX97nZ7zv+YUqNs0fUqP8wh+fKqjwpi/TnHnasamOUl99mxsSFlxJbA5GY1G7vNlIYWYjEajMs1JxJNEDBv0jJweZ73Zkk/PSdO/0eOsJ0/Nlvw0/Rur/vY6vY7Zkk9vRe+W0dyYn2nMzxz8sZXkDP7YaszPLNz1rtinwyhoEhGbSuy4Uo+UFVcCmxN5A7OBks/nC5iP0/PnzzlK+bT9/fffReo5OlThjkLsmVNH7yeGDfo0/RuGDfr65t04s755N8405meSmj3OelwNF5kt+bfun8NPcUNjfmaa/g1chJvgUvzYmJ9p2KA/1VFJOqxv3o3rswFgEokOFZiTOuMKzEkBVOGOQuyZk9qkrElEbCqIK3XGlVjm9OrVK2GnctWa06tXr8IdBQknEclPwY8NKWsSEZsK4kqdcSWWOYUFEUrPQCV/KphE1DmJiE0FcaXOuIqbZyU+vwYf/d+ZByr5UCG4yk24q9x8yymaIwhxFdtSVlzBygmoBKNCcJWbDK5yg7gCxUZcgTkBlWBUCK5yk8FVbhBXoNiIKzAnoBKMCiYRdU4iYlNBXKkzrsCcgEowKphE1DmJiE0FcaXOuAJzAirBqOD+IEIlPvcHgbiCFCwpK67AnIBKeCruK7cCphi+Uo0nlSQjKHhbiCu5UUkygmG1BXNSF5Wod4iASUQMKo7/s3gjKHhbiCu5UUkygmG1BXNSF1V0zEnw+4OodhKJ4P4gMRztEFdCUSkirsCc1EUVHXMSvC1QARVQqY0qboaV+PwafPR/Zx6owmp79epVhJDdbpcV1YptgQqogEptVLByUhcVrJyACqiAShFUYE7qogJzAiqgAipFUIE5qYsKzAmogAqoFEEF5qQuKjAnoAIqoFIEFZiTuqjAnIAKqIBKEVRgTuqiAnMCKqACKkVQgTmpiwrMCaiACqgUQQXmpC4qMCegAiqgUgQVmJO6qMCcgAqogEoRVHEvWGlycpKdSZLH4+Eoffr0KUcpn56BShCqS5cuIYTa29tlRbViW6ACKqBSGxWsnNRFBSsnoAIqoFIEFZiTuqjAnIAKqIBKEVRgTuqiAnMCKqACKkVQgTmpiwrMCaiACqgUQQXmpC4qMCegAiqgUgQVmJO6qMCcgAqogEoRVGBO6qICcwIqoAIqRVCBOamLCswJqIAKqBRBBeakLiowJ6ACKqBSBFXcPCv5fD52JknT09McpZOTkxylfHoGKkGoBgYGEEIURcmKasW2QAVUQKU2Klg5qYsKVk5ABVRApQgqMCd1UYE5ARVQAZUiqMCc1EUF5gRUQAVUiqACc1IXFZgTUAEVUCmCCsxJXVRgTkAFVEClCCowJ3VRgTkBFVABlSKowJzURQXmBFRABVSKoAJzUhcVmBNQARVQKYIKzEldVGBOQAVUQKUIqrgZVpqenmZnkjQ1NcVR6vF4OEr59AxUglBNTU398MMPHC8N/yugAiqgkgMVrJyACqiACqiASnZUYE5ABVRABVRAJTsqMCegAiqgAiqgkh0VmBNQARVQARVQyY4KzAmogAqogAqoZEcF5gRUQAVUQAVUsqMCcwIqoAIqoAIq2VGBOQGVYFSFxbkIkhCpvLxckhGEuIrtpKy4AnNSF9X4+HhlZeXIyIgYVAihmw9OgfgLIcTxf5ZhXIlKBXGlzriKm2clZf3OPFCF1XZgYAAhRFGUGFQIoZsPbCD+Qgj5fD6fz/fnn3+y/88yjCtRqSCu1BlXsHJSF5Wo99aDSUTASWR2ObH/zzKMK1GpIK7UGVdgTuqiEtucbj38DMRfyppExKaCuFJnXIE5qYsKzEkRUtYkIjYVxJU64wrMSV1UYE6KkLImEbGpIK7UGVdgTuqiEt+cWmSi1gsflu7bfP6rjznqOF0N1uOFK1aLvpQ1iYhNJau4UrSUFVdgTuqiEtuchh+2SK4TraWp6au3F/9X2b7NW3L+MzV9dcBq24v/KzV9ddm+zdzVJJGyJhGxqWQSVzEgZcUVmJO6qMQ3p1Zp9bXraGr66u9Gm0kO9ipGtdYL+7YXv03PsR7/YN3bqZLzYylrEhGbSg5xFRtSVlwJbE5wLbdQic+13Go2p7J9W6zHP2Bkbsn5xxffWFdsy/YwmESEaqv0uIoNKSuuBDYnBFckCHdFQsSjIKE5jfzcJkNt3/G2ve/gitVS01dLjoqlrElEbCrZxpXipKy4ipthJT6/Bo/gvBrhzqt5/vz58+fPfT5fuKPAMYJXr15FCNnt9mAVPB5PZD3PzMzIdhIJxXW25Pxj+463JUclk8jz5cT+P3OPPp8RjDiuRKWSbVwpTsqKK+FXTpJP67EhPsc4sHKia0vOP2pOFHGUpqavTkh8TT7ONKK0I1yxqeQZV0qUsuJKDHOS/ozJGJBizem0rLQlJ6PmRBF3nSv/fazmRFFq+urGtnLJgbGUNYmITSXDuFKolBVXwpuT5F/6xYaUak6PTstHW3IzahqLQq+fqlt9ZeiY5NgjjxQ2iYhNJbe4Uq6UFVdgTjKVYs3pjEyUqkuqaSwOq4nlsMly2CQ5+cijM8qaRMSmklVcKVrKiivhzUnyfdXYEJgTH0XgTCOPztQ0Fpd9lCU5vOImEbGp5BNXSpey4grMSaYCc4pYoTjTjbFT7Mx167VtVIXk/IqbRMSmkklcxYCUFVcimJPU+6qxIYWa04+Pz0qrVF3S6c5KRmZ5RfYFRxWjWnlFNj1nS27GltwMyfmxlDWJiE0lh7iKDSkrrsQwJ+kPEMLSlaHjjW3lkmMIeIyjZnNat17LVqou6auBOkbN/YdNqbqkVF0SrrD/sElyeIVOImJTRTmuahuLyyuy2Yc4MSBlxZV6zenK0PHtO9bj6SlVlyQ5j8zNaWpqirtn//9OIu0g/lLWJCI2VZTjqrzCuG59WnmFUfIwUHlcxb1gpcnJSXYmSR6Ph6NUDsfOIarp9O7axuIfH5+94KhK1SVJzsM+xvl9OYU7ChwjeOnSJYRQe3t7sApPnz4NmH/+/Pnt27dfvHiR43URQrcft4P4i8/oBxtBnPh8uvm05UMV/bgqrzCWVxglDwOVx5XwKyfJjw7C1QXHJ6m6JMkxBDzGEWPltLCwgO9IW1RUNDIyEmz0bz/uAPGXso5whaLy+XwBS6MfV8vmJH0kqDmuhDcnaQ8N9h/eVl5h/OHuZ/hx5vq0zPVp+w9v42hCOT7R6pIkP6hhH+PIypz8fr/FYiE3TQ9oUWBO6pxEBKGamppCCOXk5HR0dDBcSsC4+uFuCzYehn6420KvRsxp/+FtWl1SVu6aM52WgB2e6bSUVxhxndrGEnaF/Ye37T+87fbjjtrGEjwdBax2+3HHN0NNpCv8cng2C/bSMR9XYpiTZB9pHHnYjbS6pPIKI+WophzVeMgpR3XAVpSjWqtLkhBb8DASyZxaW1vRvyeGRYE5yWH0FW1OJJWWlg4ODi4sLPgFjSvKUZ2QGE+3pfdLNiQkxn8z1ESvVl5hzMpdo9Ul1TaWUI7qM50W/JjRW+b6tPdLNpzptOB5Jit3zfslG+gVvhqox5NP5vq0rNw1pFpW7hpGV7WNJfSXw/XxJIa9TYVxJbw53fnlc2m1u2JrQmJ856VqembnpWqtLjlgfY4iCYUQ+mk5eVhpdHSUnUmS2+0OVtTb24sQamlpCVZhaGgoWFFLSwsKlIhFyWH0Y0PKmkQEoVpcXEQImUymjz766P333yfRdezYMQHjqu9aA+PDrtUl1zWVMKqx5xCXuzWUWUKrS/725klGZkJiPOMlMlFa37UG8vTbmyfZnWflvZWQGK/muIpNcyoo2RAw/2Prdna+DM3pi6tHA9qAnFNRURGSwejHhpCiJhFBqJaWlrKzs7Ozsz///PNz586dPn364MGDWVlZOLoE/N/SzSMr7y22M9355fPdFVt3V2xlZGaitBU71+qSGYfFARvurthKr1ZQsiEgBpiTkC+DELrzyzlptbtia+elw+z8zkuHs/LeCpiv1SVLjk3X8MN2hNCF5eRgJbvdzs4kiaKoYEVHjx5FCB06dChYhfb29mBF1dXVwZyptbV1bm5ODqMfG1LWJLJi25cvX+IV+cjICI6ljo6OqqqqqqqqvXv3MmLp2LFjTqfziy++MJvNJFOMf3JW3lsBJ4Q7v5xbNqd/y8xE6Yyck2f2ZqL0hMR4LPyYPfmwGzLmKK0uOeCUxW6oqrgS3pxGx89Lqz2VOUeadrHzz3YfKCjZyM7vumzV6pIlx2aITxiJ9J1TR0dHMFuijf45EH8pZRJZWloiu77kgKm2thYbT05OTihr7pycHIvFUlVVtX37doRQT09PQ0PDpk2bEEKlpaXj4+NixNWRpp3ZeW8FK91TuXVP5VZGZiZKZ/Sg1SWf7f6YnqnVJXddPszdEPdPr5aJ0tmtcG/qjCucYtOcMlE6Oz87762z3QfAnCI2p9ra2mC2JJ/Rjw3JYRLx+XzYdVwuF3adpqYm7DqlpaWhuA5CaO/evbhJY2Mj7mRkZAR3+/LlSwaVw+FACGFbysnJGRwcFCmujjTt4v7I76nM2VOZw8hkzCpaXfJ/3zvNqKPVJXddtnI3xP3Tqx1p2sU+bj7bfSAhMT724ir0tsKb009P7NJqT2WOVp+cnbeWkWlA6QHrd/XXaPXJkmMzJDdzWlpa2rx5czBbIqMftek7tiXqJLK4uIjtYXx8nOzZYguprKwko8ydtm3bhpscO3YM99Dd3U1WUUtLS+FS+f3+sbEx3DlFUYuLiyLFFftgtOuylWFFIZoTu+eExPgIzAn3Rt/vcQwe1eqS1W5O86zk8/nYmSRNT09zlMrEnLr6awp3bsQWlZ23VqtPLty5kVHt2vCprv6arv6aIyd3afXJ+HFXf43k/MScfMsp3FHgGMGBgQH84Q9WYXJyMmD+999/jxBqaGj4448/OEY/+vN4TCri0X/48OF3333ndrvxV48URTU0NFgsFovFUlJSEuJy58MPP8RNTp8+jTv5/vvv3W73zZs3OUafOyaDxRVO5G329vY+e/ZMvLgauPVpQmL82e4DXZetREeadtGtqOuytaBkY0HJRrp/YEvrumwlq6WCko3ZeW/hx47Bo9l5b2E7OdK0yzF4lLwcaUi6cgweLSjZeKRp18CtT+lsmShdq0suKNmIH3RdtgbcAZIkrkIfwYApsvlK+JXT2JML0spcmdvdX4sfd/fXkscMfXp2n7kyly3J+bHktnIaGxubm5vjjg05HJrEhtijv7CwgBclDx48wN/uXLx4sWo5heg6RUVF+Nud5uZmvNy5cuUKWe7wiasV2/I57hYwrobuncGrIobauw+QOgdqCkg+uxW9Jt6PwTpychdpe6CmAFdoPvshaTh07wyj/+azHzLw8BHzpevH8NNgmz0CxlV0RlAu23pjTyhptWxOEmPwlEjm5PP57HY7nokCJplMIqrSV98cx2pu23/CVnnCVokQwmuXgoKCEI2HGFVbWxs2ngcPHmDXwZeyhjKCMW9OypLgXzeAOYE5ydecVmwLk4iAun67FbvO+Yu12HXqju8tMxeUmQtKSreF6DqlpaXYdchy58svv8Sug28VL+AIQlzJR81nP4SVk5AvgxC6+7RTQpkteQakK9y5yWzJO1hbKC0MHynUnCTfDo2mrvzwad83J5rbPsbG89H+Hdh4cnKzQnGdTZvewfXLzAW4hxO2yovOo33fnEAI/etf/1LKJCI2lUri6vL14+TLhcKd72j1KYK/BJhTl4QyW/KIDtZ+IC0MHynWnMRaSmbnrTUgHV4Za/UpCYnxBqS7fP0Eu2b9ybLsvLW4jlafYq7MZSyscWZ23lrcCW6i1ado9Skd3YfYvRmQDl9laUA6UuHKD6c4jOf9wlzsOoes5SdslhM2y2l7dd83jX3fNF754ZSo6+YYNSfpNzPE1uXrJ4g51Z8sE+MllBVXIpjTRDeIv8CcGOrur8X+Qcymo/uQVp9ybdhGr3bzXjtjXzc7by3dny5fP1G4852ExHj8+T9YU6jVp2TnrR17Ql0btmn1KfTe8Nme5CXwK+KGtx+db277GBsPdp2+bxpvPzqvwklEbCqVmFMUpKy4AnOSqcCc2CLGQFR/soyxMAqohMR4+lO8bULvlv6YGBtegQXEYDiiyicRsanAnNQZV8Kbk/vXHhB/KdScRP0ezoB0jJye/jqzJS9g5Z7+up7+uv7vGu8+7VyV+Drji0l6K3q3afqUnv468nhw5DN2zx09VcFeVA7fOMakOUXtu97YlrLiCsxJpgJzYitEczIgXZo+ha7IzGlV4usGpGMrTZ/CJlHzJCI2FZiTOuMqboaVpqen2ZkkTU1NcZQihNy/9oL4CyH0fDmFOwp8RtDj8UTcsxzMKU2fwj5LM+KV061/dkg1iUQ8+nxGUJ1xpR4pK66EXznd+/UiiL9EWjmJfRGuqGcwGpCekdPTf8RsyaM/NeavYzdclfg6+5TOgN2m6VN6+o/gx8b8dfXN5Yo7VzNGV04SjELsSVlxBeYkU4lkTnzuSs7ds1/802EMG/SMnB5nvdmST57232hi1zHmZ6762+v0HLMln96K3iRN/0aPsx4/vnX/HP0p0eCPrfXNu2V7OkxsmpPUJyjFhpQVVwKbk9FoDOXyQ0grJqPRCOZE1H+jyWzJX/W3182W/I7eT3BmR+8nhbveNWzQH6wtIjWN+ZnG/MweZ32Ps75w17tp+jcO1hbRGx6sLTJs0Bs26InBpOnfIF6Vpn+jcNe75CV6nPVp+jeM+ZkdvZ/0OOvrm3cb8zMDOpaaJxGxqcSLK7VJWXElsDmRNzAbKPl8voD5OD1//pyjlE/b33//XaSeo0MV7ijEnjndnejGftPjrL91/xzOuXX/HM7pv9FEr1nfvBuvjYj90Bv232jCTwd/bKWX4se4lPHSHb2f4A7NlnyxbUmJk4jYVGBO6owrsczp1atXwk7lqjWnV69ehTsKEpqT5Gc5xoaUNYmITQVxpc64EsucwoIIpWegEoQKzEkRUtYkIjYVxJU64wrMSV1UYE6KkLImEbGpIK7UGVdgTuqiEt+cpL9ELAakrElEbCqIK3XGFZiTuqjENqd7v/aC+EtZk4jYVBBX6oyruHlW4vNr8NH/nXmgCqvtwMAAQoiiKDGoEFzlJtxVbr7lxP4/yzCuRKWCuFJnXMHKSV1U4q+cpP8ExoCUdYQrNhXElTrjCsxJXVRim9M/n30B4i9lTSJiU0FcqTOuwJzURSWqOcH9QYRKfO4PEnvRDnElVFJWXIE5qYtKVHMiVLOBkmovo+ZJxfF/Fm8EBW8LcSU3KklGMKy2YE7qooqOOQl+fxDVTiIR3B8khqMd4kooKkXEFZiTuqiiY06CtwUqoAIqtVGBOamLCswJqIAKqBRBBeakLiowJ6ACKqBSBBWYk7qowJyACqiAShFUcTOsxOfX4KP/O/NAFVbbq1evIoTsdrusqFZsC1RABVRqo4KVk7qoYOUEVEAFVIqgAnNSFxWYE1ABFVApggrMSV1UYE5ABVRApQgq+ZqTzWZzOp3k6Y4dOwK2mp2d/f/tnT9r214Xx/NKSjDoFQTqRUMotARtGuv1LmlGIyh4yRL9MqRdgkK2UiJoKQEHTwUvgkANpWr+GEqQC5l+CDzrBdxn+JLznOdeyXFap49UnTPZks71R76yvvdcnXtcRZVlWZZlD6UKw7AoCk6FRkrt6OhoQct162wt4iRUQiVUDaGqtTilaUpvO50ONiqljMOiKHr37t3IMuziVFxmoijCYScnJ0EQBEGA7b7vG+IEmYTUxXEcBAFep2kKKrvx0jMyTMRpeV+hEiqhahtVY8Sp2+3iBakIP8ymGo1GBlWe547jlFKFYRiGId76vm9QcZI0TelIfSeZ5MhDPfuMDBNxWt5XqIRKqNpGVUdxQtDj+34QBK7rQhg8z0vTNMuyJEm4fpA4cTVKksRxnPyuuCGowjDkwkaBzqrEyQDT9etsLeIkVEIlVA2hqqM4wXzfhySMRqMkSbrdLg+kyHjkRLJBksapHMfhG6FVYRgOBgPf9zEBqCvEieYAoyhSStHMIRcnfETOyv3WrbO1iJNQCZVQNYSqvuLkOE4QBHSv7/V6iHWKouABEBenNE0Rb5HScCpjTo9EyKD65chJa+26bpIkVWdkmIjT8r5CJVRC1TaqtZll19fX9kayy8vLBXu/ffu2YO/yLcdxvLGxcXx8vL6+fnBwcHx8/OzZs93d3d3d3ePj4ziO6ch+vz8cDsn34OBgfX3dphoOh8b2jY3Mo/5DAAAJTklEQVSN4XA4HA4/fvw4HA77/T62P3/+3KDCR+AtP3I2mz158sRok+/9M9/Vg3zfv3+/ubn59u3bWlHd6ytUQiVUbaOqaeSklEK8Qk+SxuMxQhbsoiN55FQUhe/7o9HIdV2DKk1TY+NoNErTNE3T8XgcxzElAdqREyb9lpnWwzxh6RnZtqrv6kG+EjkJlVA1giqKIj4No7VGtnB7vqs6ilOe58iJ4I+I5vO567rQBu7FxYl2hWHIpahUnHjLcRwvSIjgWxZP6xnCWbfO1iJOQiVUf4oqSRJ+N+CpvIavIUKzuwQu416XpqnjOLe3t3iL1SylVHEc0+oXbpPJJIqiqjth3XqwjuKEXiwVJ+otWopE4mQ8Z7LFqTSPHC0HQUCf9Tvi5LquiNNj+AqVUDWRCvnG2MJnXPi6zDAMjVwtEid+M9FaY4SNwTQadF2XL8okKtuXqPBxv3BGIk7/NUOcdnZ2kF+utc7znHbhsIuLC6M1njU3u0uI4Bs5FVcyQ5xOT0/5kGexOBkXWd06W9denHiqS5IkeZ6HYZhlmUFl9CNvmcqCPIiq9JestT4/PzeuB27tvOEK1fJUeZ7j3lIUBSQBWsJ9+ciYU3GBwdp/pZTjOL1eD8N0x3GqFv5z36Io6PcCcZLI6QEQpS2TOCE6nk6n+m7sEAQBBcJKqTiOz8/P7RiWFh6BynVdY5FslmVBEHS7XX5PdF2X3/u2t7e5C4kT+piWBuuyRb516+z6UxmjhDiO8a0aVDy5HzU+7LIgZOfn5/bH8Z+r8bnctra2kP+JIbCdBbqgtFU7e1CobN/RaFQUBe5mmFyhoRiucO44Go36/T4G4r7v43aHXRQ56bK7Gafi4oRJIzy8F3F6MERpy+i2NE3ReeSLVHL66rMsK4piGao4jktHwUZ9vCAIKFLO87z01kaEZ2dn9NZ+Hla3zq4/FXUQhpzIWImiaDgc2lkwdst8ITYsjuOtrS2tdVEUpGdxHDuOg16Gr31hFEWhlKLeT5LEvhfMZrOqcHzJ862y5vagUGmti6I4OTmht3Tp0mMk8sXUXCnVgmk9pRQplnFMlTjRGYk4PQximZZXQmXUzVstlVLKeLDZ6O/q/0Ll+z6iXtQzTNMUo8vhcGgsoKYF2tSyURYE5vv+6ekpXlMLSZJgLgW5mvjNR1FE8oOQ2nVdPBvgKZo852U2mxn5mQ893yprbg8KFWx/f580AAE3wnps2draqqoYoC1xiqIIsbtSyvf9breLNaBBECC04gG9iFOlte0SFKpVUe3t7eFRLX5X9PQOOmRP6/GHjjTRYfzIMSVIVGmaYvSglEKmExcnvMWRGMH4vk/TLzTs4B89m82giL9wvn9fDwqV4YuLCjNARVHwsP7p06f8mVApVWlSw2g04o8SqqhEnEqshZegUK2QCtNrqCyFWTilVBRF/X6fDw+Nmh2e59llQbTWSZK4rsupoiiiRQV4XFQ1rae1RuSEOcA4jhE5oSY9DqBEm18+3yprbg8KFfkiiC+9tAxx8n3fTuDCHCCeqWM7KuBQKjmmFkqpDHEiNWqYOM0t+/nzp72R7ObmZsHe6+vrBXt/p2WhagOV53mTyWQ+nw8Gg/F4TC8MKtoLe/PmTafTsdscDAbdbteg8jxvMBjQa1B5nldK9f37dxwPqul06nneyckJ9oKq0+lwmAedb5U1tweFivtOp9OdnZ35fD6ZTHq93mAwwDW5trbW6XQGzOiiur29/eeffzzP63Q68IUdHR15nud53osXL8hrf3+/lAp7seXs7Kzb7RIVAH7hjP58D0rkJFQ1oqJhJsVGeHF1dcXz4njkVBSF53l2WRB9N340qHzfp7wVpdR4PNYVw9s4jre3t/M8R95UFEVhGNojXHs6cfnzrbLm9qBQcd8wDO0qD47jPH361FiwT5YkycbGBsoC8EwKZEC4rosrdjFVqa9uXOS02o9p5yUoVKui8n0/SRI8OkauATK5F0zrKaXoRmD86tCIMa2HUlW4ZSRJMq+Y1sMqq9PTU6UU9CmO46qCwiJOQlXqa8sALiRM6+HZZxUVBAZZo7hc8QyVqIqisOXNFif+P3MQJyOpeMkzEnF6FF+hqj/V4eEhYhqEJkbkVJUQAbWglm1x4s+c8jzHEJL/81aVOGH97+HhodaacqWSJOE/bBEnoaqywWDguq59QeL6gTjREt1SKgyteBpFlmVKqcFgAO0JgsBOTwUVhlbYQot/8zyfz+d2/sWSZyTi9Ci+QkVW2woRr1+/Lp24I3Gy1zkZC2m1VTkCqXRExeOee8UJv2GKnNI0xW0ljmNa/zibzar+Xvne8/3Lriuhsn2NUJ5Xl6aECBxjxE8LsvU4VWkMZFBhXIXXURR5nmdMMy5/RiJOj+IrVGS1FSfDF+uckPCdZRkSvmnQhxQmXs7SLgsCcxwHpa2M9bloKsuyXq/HC6CRYWoRxasQMNHcCHL2tNaz2Qxa9fvnu0LfmvSgUHFxQv0h2suz9Xzfx7olg+pecTL+Pc6miqLIGHVNp1PXdY3kwCXPSMTpUXyFiqwp4oSKL1VUKAuyTMtKqb29vcVUdnEzeksz+Pzewan4hL7d8oLP/cuuK6GyfWlaD+MbvpeLk/7fguVFURwcHCBr3F4dkabpZDLRd7MCVVR5npcmXNCTsAW+VSbi9Ci+QkXWFHFaFVWSJC9fvnwkqqurqwVlYRv3XQnVaqlQwaF0ryFOhn358gXhVGl8s7+/7zgOlqvbey8uLpapWlKaYlq3HhRxahdV28RJqISqhlQLKnaCipcSt1vmpbYMo2Jdi6lkWm+VLQvVSqhEnIRKqISqEVRr/1p2c3NjbyT78ePHgr2Xl5cL9v5Oy0K1EqoPHz5sbm4eHh7WiupeX6ESKqFqG5VETu2ikshJqIRKqBpBJeLULioRJ6ESKqFqBJWIU7uoRJyESqiEqhFUIk7tohJxEiqhEqpGUIk4tYtKxEmohEqoGkEl4tQuKhEnoRIqoWoElYhTu6hEnIRKqISqEVQiTu2iEnESKqESqkZQiTi1i0rESaiESqgaQbU2t+x3/g3+z//PvFA9yPfTp0+bm5tRFNWK6l5foRIqoWoblURO7aL6+vXrq1evPn/+XCuqe32FSqiEqm1UIk5CJVRCJVRCVTsqESehEiqhEiqhqh2ViJNQCZVQCZVQ1Y7qPzygh7P8XvtxAAAAAElFTkSuQmCC" alt="" />

Java的clone()方法

clone()方法定义在Object类中。

  clone()方法将对象复制了一份并返回给调用者。拷贝具体的含义将取决于对象所在的类。

  一般而言,clone()方法满足:

  1. 克隆对象与原对象不是同一个对象。即对任何的对象x:

  x.clone() != x

  2.克隆对象与原对象的类型一样。即对任何的对象x:

  x.clone().getClass() == x.getClass()

  3.如果对象x的equals()方法定义恰当,那么下式应该成立:

  x.clone().equals(x)

  因为一个定义良好的equals()方法就应该是用来比较内容是否相等的。

Java中对象的克隆

  1.为了获取对象的一份拷贝,我们可以利用Object类的clone()方法。

  2.在派生类中覆盖基类的clone()方法,并声明为public

  (Object类中的clone()方法是protected的)。

  在子类重写的时候,可以扩大访问修饰符的范围。

  3.在派生类的clone()方法中,调用super.clone()。

  因为在运行时刻,Object类中的clone()识别出你要复制的是哪一个对象,然后为此对象分配空间,并进行对象的复制,将原始对象的内容一一复制到新对象的存储空间中。

  4.在派生类中实现Cloneable接口。

  这个接口中没有什么方法,只是说明作用。

  注意:继承自java.lang.Object类的clone()方法是浅复制。

练习程序

程序1:CloneTest1进行拷贝:

public class CloneTest1 {

    public static void main(String[] args) throws CloneNotSupportedException {
Student student = new Student();
student.setName("zhangsan");
student.setAge(20); Student student2 = (Student) student.clone(); System.out.println("拷贝得到的信息");
System.out.println(student2.getName());
System.out.println(student2.getAge());
System.out.println("-------------"); // 修改第二个对象的信息
student2.setName("lisi");
student2.setAge(25); System.out.println("修改第二个对象的属性为lisi,25后:");
System.out.println("第一个对象:");
System.out.println(student.getName());
System.out.println(student.getAge());
System.out.println("第二个对象:");
System.out.println(student2.getName());
System.out.println(student2.getAge());
System.out.println("-------------"); // 说明两个引用student1和student2指向的是不同的对象 }
} /**
* 要复制Student的对象,所以Student要实现Cloneable接口
*/
class Student implements Cloneable {
private String name;
private int age; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} /**
* Obkect类中的clone方法
* @return
* @throws CloneNotSupportedException
*/
@Override
public Object clone() throws CloneNotSupportedException {
// 注意此处要把protected改为public Object object = super.clone(); return object;
}
}

输出

拷贝得到的信息
zhangsan
20
-------------
修改第二个对象的属性为lisi,25后:
第一个对象:
zhangsan
20
第二个对象:
LiSi
25
-------------

程序2:CloneTest2:在Student类中加入Teacher类的引用,进行拷贝:

public class CloneTest2 {
public static void main(String[] args) throws CloneNotSupportedException {
Teacher teacher = new Teacher();
teacher.setName("Teacher Zhang");
teacher.setAge(40); Student student = new Student();
student.setName("ZhangSan");
student.setAge(20);
student.setTeacher(teacher); Student student2 = (Student) student.clone();
System.out.println("拷贝得到的信息");
System.out.println(student2.getName());
System.out.println(student2.getAge());
System.out.println(student2.getTeacher().getName());
System.out.println(student2.getTeacher().getAge());
System.out.println("-------------"); // 修改老师的信息
teacher.setName("Teacher Zhang has changed");
System.out.println(student.getTeacher().getName());
System.out.println(student2.getTeacher().getName()); // 两个引用student和student2指向不同的两个对象
// 但是两个引用student和student2中的两个teacher引用指向的是同一个对象
// 所以说明是浅拷贝,被引用的对象是不会被复制的,只有原生数据类型才会被复制!
} } class Teacher implements Cloneable {
private String name;
private int age; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} } class Student implements Cloneable {
private String name;
private int age;
private Teacher teacher; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public Teacher getTeacher() {
return teacher;
} public void setTeacher(Teacher teacher) {
this.teacher = teacher;
} @Override
public Object clone() throws CloneNotSupportedException {
Object object = super.clone();
return object;
}
}

运行结果

拷贝得到的信息
ZhangSan
20
Teacher Zhang
40
-------------
Teacher Zhang has changed
Teacher Zhang has changed

程序3:把CloneTest2改为深复制:

首先在Teacher类中加入clone()方法(必须的,因为需要借此改为public,不然无法调用),然后修改Student2类中的clone()方法,使得teacher引用也复制一份对象,然后用set方法设置回来。

public class CloneTest2 {
public static void main(String[] args) throws Exception {
Teacher teacher = new Teacher();
teacher.setName("Teacher Zhang");
teacher.setAge(40); Student student1 = new Student();
student1.setName("ZhangSan");
student1.setAge(20);
student1.setTeacher(teacher); Student student = (Student) student1.clone();
System.out.println("拷贝得到的信息");
System.out.println(student.getName());
System.out.println(student.getAge());
System.out.println(student.getTeacher().getName());
System.out.println(student.getTeacher().getAge());
System.out.println("-------------"); // 修改老师的信息
teacher.setName("Teacher Zhang has changed");
System.out.println(student1.getTeacher().getName());
System.out.println(student.getTeacher().getName()); // 两个引用student1和student2指向不同的两个对象
// 但是两个引用student1和student2中的两个teacher引用指向的是同一个对象
// 所以说明是浅拷贝 // 改为深复制之后,对teacher对象的修改只能影响第一个对象
}
} class Teacher implements Cloneable {
private String name;
private int age; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} @Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
} } class Student implements Cloneable {
private String name;
private int age;
private Teacher teacher; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public Teacher getTeacher() {
return teacher;
} public void setTeacher(Teacher teacher) {
this.teacher = teacher;
} @Override
public Object clone() throws CloneNotSupportedException {
// 浅复制时:
// Object object = super.clone();
// return object; // 改为深复制:
Student student = (Student) super.clone();
// 本来是浅复制,现在将Teacher对象复制一份并重新set进来
student.setTeacher((Teacher) student.getTeacher().clone());
return student;
} }

运行结果

拷贝得到的信息
ZhangSan
20
Teacher Zhang
40
-------------
Teacher Zhang has changed
Teacher Zhang

利用序列化实现深复制

上面例子中的方法实现深复制比较麻烦。

  下面介绍一种全新的方法:利用序列化来做深复制。

  把对象写到流里的过程是序列化过程Serialization),而把对象从流中读出来的过程则叫做反序列化过程Deserialization)。

  应当指出的是,写在流里的是对象的一个拷贝,而原对象仍然存在于JVM里面。

  序列化不仅会序列化当前的对象,而且还会序列化它所引用的对象,就是基于这个原理实现深克隆!

  在Java语言里深复制一个对象,常常可以先使对象实现Serializable接口,然后把对象(实际上只是对象的一个拷贝)写到一个流里,再从流里读出来,便可以重建对象。

  这样做的前提是对象以及对象内部所有引用到的对象都是可串行化的,否则,就需要仔细考察那些不可串行化的对象可否设成transient,从而将其排除在复制过程之外。

  注意Cloneable与Serializable接口都是marker Interface,也就是说它们只是标识接口,没有定义任何方法。

程序4:利用序列化实现深拷贝例子:CloneTest3

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable; public class CloneTest3 {
public static void main(String[] args) throws Exception {
Teacher t = new Teacher();
t.setName("Teacher Wang");
t.setAge(50); Student s1 = new Student();
s1.setAge(20);
s1.setName("ZhangSan");
s1.setTeacher(t); Student s2 = (Student) s1.deepClone(); System.out.println("拷贝得到的信息:");
System.out.println(s2.getName());
System.out.println(s2.getAge());
System.out.println(s2.getTeacher().getName());
System.out.println(s2.getTeacher().getAge());
System.out.println("---------------------------"); // 将复制后的对象的老师信息修改一下:
s2.getTeacher().setName("New Teacher Wang");
s2.getTeacher().setAge(28); System.out.println("修改了拷贝对象的教师后:");
System.out.println("拷贝对象的教师:");
System.out.println(s2.getTeacher().getName());
System.out.println(s2.getTeacher().getAge());
System.out.println("原来对象的教师:");
System.out.println(s1.getTeacher().getName());
System.out.println(s1.getTeacher().getAge()); // 由此证明序列化的方式实现了对象的深拷贝 } } class Teacher implements Serializable {
private String name;
private int age; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} } class Student implements Serializable {
private String name;
private int age;
private Teacher teacher; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public Teacher getTeacher() {
return teacher;
} public void setTeacher(Teacher teacher) {
this.teacher = teacher;
} public Object deepClone() throws Exception {
// 序列化
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos); oos.writeObject(this); // 反序列化
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bis); return ois.readObject();
} }

运行结果

拷贝得到的信息:
ZhangSan
20
Teacher Wang
50
---------------------------
修改了拷贝对象的教师后:
拷贝对象的教师:
New Teacher Wang
28
原来对象的教师:
Teacher Wang
50

serialVersionUID问题

当一个类实现了Serializable接口时,表明该类可被序列化,这个时候Eclipse会给出一个警告,要求你为该类定义一个字段,该字段名字为serialVersionUID,类型为long,提示信息如下:

  The serializable class Teacher3 does not declare a static final serialVersionUID field of type long。

  在Eclipse中有两种生成方式:

  一个是默认的1L;

  private static final long serialVersionUID = 1L;

  一个是根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段,比如:

  private static final long serialVersionUID = -932183802511122207L;

  如果你没有考虑到兼容性的问题,就把它关掉,不过有这个功能是好的,只要任何类别实现了Serializable接口,如果没有加入serialVersionUID,Eclipse都会给你提示,这个serialVersionUID为了让该类别Serializable向后兼容。

  如果你的对象序列化后存到硬盘上面后,你却更改了类的field(增加或减少或改名),当你反序列化时,就会出现异常,这样就会造成不兼容性的问题。

  但当serialVersionUID相同时,它就会将不一样的field以type的缺省值Deserialize,这个可以避开不兼容性的问题。

深拷贝(deep clone)与浅拷贝(shallow clone)的更多相关文章

  1. java的clone()、浅拷贝与深拷贝

    clone()方法是Object的native方法.protected native Object clone() throws CloneNotSupportedException;  声明为pro ...

  2. Java:浅克隆(shallow clone)与深克隆(deep clone)

    Summary 浅克隆与深克隆对于JavaSE来说,是个难度系数比较低的概念,但不应该轻视它. 假设一个场景:对于某个list,代码里并没有任何对其的直接操作,但里面的元素的属性却被改变了,这可能就涉 ...

  3. 由Python的浅拷贝(shallow copy)和深拷贝(deep copy)引发的思考

    首先查看拷贝模块(copy)发现: >>> help(copy)Help on module copy:NAME    copy - Generic (shallow and dee ...

  4. copy&mutableCopy 浅拷贝(shallow copy)深拷贝 (deep copy)

    写在前面 其实看了这么多,总结一个结论: 拷贝的初衷的目的就是为了:修改原来的对象不能影响到拷贝出来得对象 && 修改拷贝出来的对象也不能影响到原来的对象 所以,如果原来对象就是imm ...

  5. shallow clone

    shallow clone 浅克隆经常在一些大型仓库中很有用——不用花费大量时间去clone一个完整的仓库,仅仅checkout出来某个分支(如master)的最新N次递交: git clone -- ...

  6. Java中的深拷贝(深复制)和浅拷贝(浅复制)

    深拷贝(深复制)和浅拷贝(浅复制)是两个比较通用的概念,尤其在C++语言中,若不弄懂,则会在delete的时候出问题,但是我们在这幸好用的是Java.虽然java自动管理对象的回收,但对于深拷贝(深复 ...

  7. git clone 和 download 不一样,能用git clone 就用git clone,download的代码,经常出现安装bug

    git clone 和 download 不一样,能用git clone 就用git clone,download的代码,经常出现安装bug

  8. 深拷贝(deep clone)与浅拷贝(shallow clone)

    一.浅复制和深复制概念 浅复制(浅克隆): 被复制对象的所有变量都含有与原来对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅复制仅仅复制所考虑的对象,而不是复制它所引用的对象. 深 ...

  9. 浅谈浅克隆(shallow clone)和 深克隆(deep clone)

    区别就在于是否对对象中的引用变量所指向的对象进行拷贝. 1.浅克隆/浅复制/浅拷贝 浅拷贝是指在拷贝对象时,对于基本数据类型的变量会重新复制一份,而对于引用类型的变量只是对引用进行拷贝,没有对引用指向 ...

随机推荐

  1. centos使用boost过程

    1. 安装gcc,g++,make等开发环境 yum groupinstall "Development Tools" 2. 安装boost  yum install boost ...

  2. Linux的权限对于文件与目录的意义

    权限对文件: r:可读取此文件的实际内容. w:可以编辑.新增或者是修改该文件的内容(但不含删除该文件),如果没有r权限,无法w. x :该文件具有被系统执行的权限.可以删除. 权限对目录: r:re ...

  3. css特效-一道闪光在图片上划过

    在百度音乐 http://music.baidu.com/ 看到这么一个图片效果,当鼠标移上去的时候,会有一道闪光在图片上划过,效果挺酷炫的.于是把这个效果再实现一下:大体思想是,设计一个透明层i,s ...

  4. 转:一步一步学ROP之linux_x86篇 - 蒸米

    原文地址:http://drops.wooyun.org/tips/6597 0×00 序 ROP的全称为Return-oriented programming(返回导向编程),这是一种高级的内存攻击 ...

  5. powershell 性能测试小脚本

    powershell 性能测试: 转载请注明: 仰望高端玩家的小清新 http://www.cnblogs.com/luruiyuan/ 1. 将待测试的脚本封装在代码块中 2. 使用  Get-Ch ...

  6. java.io 文件分类

    文件分为二进制格式和文本格式. 数据在计算机中都是以二进制的形式表现的,一般来说字节是最小的数据逻辑单位,所以也可以说数据都是以字节序列的形式表现的,不管是在内存中还是磁盘文件中.如果直接把内存中的数 ...

  7. Docker应用系列(四)| 部署java应用

    本示例基于Centos 7,假设目前使用的账号为release,拥有sudo权限. 由于Docker官方镜像下载较慢,可以开启阿里云的Docker镜像下载加速器,可参考此文进行配置. 主机上服务安装步 ...

  8. 洛谷——P2393 yyy loves Maths II

    P2393 yyy loves Maths II 题目背景 上次蒟蒻redbag可把yyy气坏了,yyy说他只是小学生,蒟蒻redbag这次不坑他了. 题目描述 redbag给了yyy很多个数,要yy ...

  9. xss可用事件

    onabort onafterprint onbeforeprint onbeforeunload onblur oncanplay oncanplaythrough onchange onclick ...

  10. 外行人都能看懂的SpringCloud

    一.前言 只有光头才能变强 认识我的朋友可能都知道我这阵子去实习啦,去的公司说是用SpringCloud(但我觉得使用的力度并不大啊~~)... 所以,这篇主要来讲讲SpringCloud的一些基础的 ...