Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJames Boisture <jboisture@jboisture-laptop.(none)>2010-07-20 03:15:23 (GMT)
committer James Boisture <jboisture@jboisture-laptop.(none)>2010-07-20 03:15:23 (GMT)
commitb817158f554f7b3342ecfe3ce24d04e91abed3c3 (patch)
tree632bc4515e4feb5440714acb3b893aaa9b22a91d
The initial commit of the turtleartsite
-rw-r--r--ABOUT2
-rw-r--r--LICENSE2
-rw-r--r--__init__.py0
-rw-r--r--cache/cache.lock0
-rw-r--r--cache/cache.shelvebin0 -> 12288 bytes
m---------controllers/CreateImage0
-rw-r--r--controllers/appadmin.py408
-rw-r--r--controllers/default.py120
-rw-r--r--controllers/default.py.136
-rw-r--r--controllers/default.py.bak30
-rw-r--r--cron/crontab1
-rw-r--r--databases/fb87181b96a99be45f5a23f4277867ce_auth_event.table26
-rw-r--r--databases/fb87181b96a99be45f5a23f4277867ce_auth_group.table14
-rw-r--r--databases/fb87181b96a99be45f5a23f4277867ce_auth_membership.table14
-rw-r--r--databases/fb87181b96a99be45f5a23f4277867ce_auth_permission.table22
-rw-r--r--databases/fb87181b96a99be45f5a23f4277867ce_auth_user.table22
-rw-r--r--databases/fb87181b96a99be45f5a23f4277867ce_comment.table18
-rw-r--r--databases/fb87181b96a99be45f5a23f4277867ce_image.table34
-rw-r--r--databases/sql.log62
-rw-r--r--databases/storage.dbbin0 -> 13312 bytes
-rw-r--r--errors/127.0.0.1.2010-06-08.10-29-30.a9dded01-6c75-4d19-9761-5e346879dac417
-rw-r--r--errors/127.0.0.1.2010-06-08.10-30-57.0df069ba-69cd-4836-b262-d857b107126217
-rw-r--r--errors/127.0.0.1.2010-06-08.10-48-56.81e53335-045e-467e-a12d-293847e8a59817
-rw-r--r--errors/127.0.0.1.2010-06-08.11-22-35.7f7de9ca-aa01-4bcc-b220-19645284efab17
-rw-r--r--errors/127.0.0.1.2010-06-08.11-28-40.04741190-0b12-44e0-b35a-3a90d45bf99d17
-rw-r--r--errors/127.0.0.1.2010-06-08.11-29-11.c5b311da-e66b-462d-a2e0-c93d522b4d5417
-rw-r--r--errors/127.0.0.1.2010-06-08.11-37-10.e61d028b-9f3b-4663-890c-0fd6f63402b117
-rw-r--r--errors/127.0.0.1.2010-06-08.11-38-54.6768324a-18a4-48f1-a02f-5c8e9f6e2ffa17
-rw-r--r--errors/127.0.0.1.2010-06-08.11-42-41.d4d22c6d-150e-440c-a8b7-51dcf0e3cb2417
-rw-r--r--errors/127.0.0.1.2010-06-08.11-42-58.4c2324a1-10fe-40e4-859c-783d9aceeaf517
-rw-r--r--errors/127.0.0.1.2010-06-08.12-10-33.378c03b1-be2d-4d54-8e03-7edec521985117
-rw-r--r--errors/127.0.0.1.2010-06-08.12-18-45.0ea0d17c-5fac-4a31-944d-39b71dce7cd617
-rw-r--r--errors/127.0.0.1.2010-06-08.12-39-37.69eebaf7-05e8-4972-a066-978858eae42017
-rw-r--r--errors/127.0.0.1.2010-06-08.13-19-46.0608226e-8fe4-4648-8243-979753e1906e17
-rw-r--r--errors/127.0.0.1.2010-06-08.13-21-08.684ba333-a4e9-4d32-9862-ad634800041a17
-rw-r--r--errors/127.0.0.1.2010-06-08.13-41-00.b4927283-c878-4114-931b-c76a4b8ac82817
-rw-r--r--errors/127.0.0.1.2010-06-08.13-46-53.0715089b-3ec0-48dc-89c2-c2dd5503383617
-rw-r--r--errors/127.0.0.1.2010-06-08.14-01-13.44e230ac-6a33-4cbe-9048-629acfb4407a17
-rw-r--r--errors/127.0.0.1.2010-06-08.14-38-37.9c9a0779-9984-48c3-a397-42363f2107c617
-rw-r--r--errors/127.0.0.1.2010-06-08.14-39-04.18bd17ab-b51e-4246-9216-a0bde332a66017
-rw-r--r--errors/127.0.0.1.2010-06-08.14-39-34.bf860900-564c-476e-8324-3bb546251a8517
-rw-r--r--errors/127.0.0.1.2010-06-08.14-40-08.6c1d47a6-7ece-40ac-8d1e-4dce7531e85a17
-rw-r--r--errors/127.0.0.1.2010-06-08.14-52-32.17d9ae99-22fc-493e-a070-d8ab68d2e1b417
-rw-r--r--errors/127.0.0.1.2010-06-08.14-52-32.4829b99b-c00c-4f95-b5fb-749e352eac5d17
-rw-r--r--errors/127.0.0.1.2010-06-08.14-52-32.7e58f9bb-af77-4293-ac31-7360885d12c217
-rw-r--r--errors/127.0.0.1.2010-06-08.14-52-32.fbbfe1e5-7294-434b-8780-13fc5708da6217
-rw-r--r--errors/127.0.0.1.2010-06-08.14-54-09.32b1c1bc-bd65-4eb5-a177-f19d418bb39317
-rw-r--r--errors/127.0.0.1.2010-06-08.14-54-09.9693a11a-6863-4021-b6c7-a461052d36d317
-rw-r--r--errors/127.0.0.1.2010-06-08.14-54-09.b1346402-5514-4402-ac35-9bdc86f69f9a17
-rw-r--r--errors/127.0.0.1.2010-06-08.14-54-09.fc7cfcd7-8422-4ddf-9a41-4729502c16c617
-rw-r--r--errors/127.0.0.1.2010-06-08.14-54-43.35e8817b-e95f-44f0-b402-0f9f4e80d71617
-rw-r--r--errors/127.0.0.1.2010-06-08.14-54-43.42d59d33-f2e7-4989-9fb8-2db49afc4b4d17
-rw-r--r--errors/127.0.0.1.2010-06-08.14-54-43.7889853c-d2a9-4abc-a658-94b9fb62c32f17
-rw-r--r--errors/127.0.0.1.2010-06-08.14-54-43.dc7a1d48-777d-4fe9-9cea-e9eb4826b32217
-rw-r--r--errors/127.0.0.1.2010-06-09.09-39-19.f1920252-2cc7-4ee4-8bd8-bd86c024f52717
-rw-r--r--errors/127.0.0.1.2010-06-09.09-44-11.e4847df3-f891-411e-8531-0c1cd43dc42017
-rw-r--r--errors/127.0.0.1.2010-06-09.10-57-47.367a5bd2-636b-4bf0-a867-566eded35d9317
-rw-r--r--errors/127.0.0.1.2010-06-09.11-00-01.e8028dc9-ce76-4952-a24f-a329e09025e217
-rw-r--r--errors/127.0.0.1.2010-06-09.11-00-27.cc34298b-82b1-42da-a5b6-9686f735249317
-rw-r--r--errors/127.0.0.1.2010-06-09.11-01-59.86cc9dce-a4d0-4d3c-a6e2-d9723ef415cd17
-rw-r--r--errors/127.0.0.1.2010-06-09.11-06-55.3799546a-1dff-48ec-a692-463214db9a5717
-rw-r--r--errors/127.0.0.1.2010-06-09.11-07-31.e9849899-c980-4b99-978b-7e4f9d1789ae17
-rw-r--r--errors/127.0.0.1.2010-06-09.11-13-47.7b3410b2-81ca-4139-a61f-bcdd854d8cc917
-rw-r--r--errors/127.0.0.1.2010-06-09.11-18-17.022ce195-a519-4702-a51a-319bffbefe5d17
-rw-r--r--errors/127.0.0.1.2010-06-09.11-18-55.8a80bce6-882e-4316-a22a-2dbdf30350ce17
-rw-r--r--errors/127.0.0.1.2010-06-09.11-19-58.6b69840e-d0f0-458c-b963-9b84849cffaa17
-rw-r--r--errors/127.0.0.1.2010-06-09.11-20-20.7e0e0756-5441-4605-bb18-36e029e0859817
-rw-r--r--errors/127.0.0.1.2010-06-09.11-21-54.374a4d2f-c9d2-4b09-bd30-9261e01049dd17
-rw-r--r--errors/127.0.0.1.2010-06-09.11-22-41.c435fc7a-38e0-4828-a06e-621f94db7bb017
-rw-r--r--errors/127.0.0.1.2010-06-09.11-29-17.b89909c8-0381-4505-a74c-7f2ea463edee17
-rw-r--r--errors/127.0.0.1.2010-06-09.11-29-43.e213d434-5001-4a9e-a320-b5aca5f2150d17
-rw-r--r--errors/127.0.0.1.2010-06-09.11-30-16.7016b708-8872-4d47-ac2a-001279d39eea17
-rw-r--r--errors/127.0.0.1.2010-06-09.11-30-35.d947a73d-b877-4b24-a659-a771d3fe332217
-rw-r--r--errors/127.0.0.1.2010-06-09.11-30-57.72a62a7d-7aee-495d-be99-2a51ddb8070917
-rw-r--r--errors/127.0.0.1.2010-06-09.11-31-48.fbb0f6e6-2022-4bb1-82a2-4239c36482e217
-rw-r--r--errors/127.0.0.1.2010-06-09.11-32-13.2722bf60-e500-4ed5-9300-22246adfb09217
-rw-r--r--errors/127.0.0.1.2010-06-09.11-41-18.fa10d0e9-b72c-47fa-bb1c-a1fe91aa54a817
-rw-r--r--errors/127.0.0.1.2010-06-09.11-41-50.cfb87704-4b12-4100-9a25-442f7a81ade017
-rw-r--r--errors/127.0.0.1.2010-06-09.11-44-00.64eed127-cbb0-4d03-b3fc-2810a8b851f417
-rw-r--r--errors/127.0.0.1.2010-06-09.12-53-34.c57d0c83-2086-4213-bfba-1c95d1e17f9a17
-rw-r--r--errors/127.0.0.1.2010-06-09.12-57-57.523a1b10-c75b-48a9-a467-b35d03e750ad17
-rw-r--r--errors/127.0.0.1.2010-06-09.13-00-29.a35d0a75-b764-4ce3-84bf-6573cf63151317
-rw-r--r--errors/127.0.0.1.2010-06-09.13-02-52.9fcd3b58-1ce4-4ecb-9cf3-39126f0d04fa17
-rw-r--r--errors/127.0.0.1.2010-06-09.13-06-38.9e7f1704-78e8-4175-8a3f-eee7e748c22d17
-rw-r--r--errors/127.0.0.1.2010-06-09.13-13-55.c761e91b-5c7e-4245-ae98-cde4d80925ef17
-rw-r--r--errors/127.0.0.1.2010-06-09.13-15-14.29d3a726-0567-477c-9457-7be9c2f1883717
-rw-r--r--errors/127.0.0.1.2010-06-09.13-17-21.ff1cbd51-2ecf-4bc9-b72c-1d48ac500c0017
-rw-r--r--errors/127.0.0.1.2010-06-09.13-26-17.140316fc-2085-4d85-b497-3b50a919a3af17
-rw-r--r--errors/127.0.0.1.2010-06-10.09-29-54.72ad7c1a-7a4b-40ca-b38d-ee7aab8b797317
-rw-r--r--errors/127.0.0.1.2010-06-10.09-30-30.036bdcc1-8fda-4d61-9bc1-8dc9c16d25fd17
-rw-r--r--errors/127.0.0.1.2010-06-10.09-48-22.f4f2819c-2b39-4948-a4e4-b34b7995869917
-rw-r--r--errors/127.0.0.1.2010-06-10.09-50-00.eb0ea40d-2bbb-447a-8d53-d4934e636ad817
-rw-r--r--errors/127.0.0.1.2010-06-10.09-53-31.41777e62-1e09-4638-b057-cadf6e48352217
-rw-r--r--errors/127.0.0.1.2010-06-10.09-58-11.37b68ce0-60cf-46cd-996f-8ad0af327f8a17
-rw-r--r--errors/127.0.0.1.2010-06-10.11-24-17.884f9072-4e27-493a-b688-6a164cf84e1617
-rw-r--r--errors/127.0.0.1.2010-06-10.11-40-09.d2bfa366-2548-41e3-aff7-8a76b66e68ac17
-rw-r--r--errors/127.0.0.1.2010-06-10.11-41-16.7f7319ff-f582-4f84-b815-dbf08ac2e57117
-rw-r--r--errors/127.0.0.1.2010-06-11.09-29-18.0e1af70f-b279-4891-8c56-e7c1cd44a3c417
-rw-r--r--errors/127.0.0.1.2010-06-11.09-30-18.6e3d7c62-d84c-4e2c-a741-fa0f7686840417
-rw-r--r--errors/127.0.0.1.2010-06-15.10-59-23.4caf31af-e05f-4a66-b90c-8fac85ea279717
-rw-r--r--errors/127.0.0.1.2010-06-15.11-15-28.930b7138-35c1-45fb-b314-efe69037d65a17
-rw-r--r--errors/127.0.0.1.2010-06-15.11-15-40.b3af0fde-4ac3-42f0-9461-726a4d72185917
-rw-r--r--errors/127.0.0.1.2010-06-15.11-20-54.9058efe3-8e6d-42a0-ba03-e76397a55cb317
-rw-r--r--errors/127.0.0.1.2010-06-15.11-21-03.8189fe78-9ac1-4f8c-95a6-800da6ee74ef17
-rw-r--r--errors/127.0.0.1.2010-06-15.11-26-40.8825298a-5418-4c02-92eb-b69d915d410917
-rw-r--r--errors/127.0.0.1.2010-06-15.16-18-22.e49f5f67-6ef5-40cc-b7a7-b75fc9238d9316
-rw-r--r--errors/127.0.0.1.2010-06-15.16-20-33.7ee6e03c-40af-4774-93cb-ffe50e8b9cff16
-rw-r--r--errors/127.0.0.1.2010-06-15.16-25-34.c0fde657-1530-4eb9-8c9f-f6912813f68c16
-rw-r--r--errors/127.0.0.1.2010-06-15.16-25-54.669ae8c0-5c6b-4aa6-851b-9fea24a1149517
-rw-r--r--errors/127.0.0.1.2010-06-15.16-29-02.41d5041c-372e-425b-bbb4-db8c6f8c5e4616
-rw-r--r--errors/127.0.0.1.2010-06-15.16-36-48.c043ff98-5f0f-4e35-a438-ea190f28f05c16
-rw-r--r--errors/127.0.0.1.2010-06-15.16-46-49.0a02205d-e5f0-417b-9fd0-d026372da72616
-rw-r--r--errors/127.0.0.1.2010-06-15.16-51-02.0a2ed667-56f1-4353-8017-d36df68710fd17
-rw-r--r--errors/127.0.0.1.2010-06-15.16-55-27.f037969c-cc51-4247-8648-459c3c9808c717
-rw-r--r--errors/127.0.0.1.2010-06-15.16-58-10.5b283ebe-409e-4254-b0d9-ab3dc70d674a17
-rw-r--r--errors/127.0.0.1.2010-06-15.17-00-10.563018f1-cd5c-4f7d-b969-19d65d005b1c17
-rw-r--r--errors/127.0.0.1.2010-06-15.17-00-42.533264a6-2dc7-4477-a4e8-7c295ace2b1a17
-rw-r--r--errors/127.0.0.1.2010-06-15.17-02-01.63632b71-54a7-42a6-b090-4e205e161f4217
-rw-r--r--errors/127.0.0.1.2010-06-15.17-05-53.fe4b74d7-5662-4023-95ce-586e9bc3333217
-rw-r--r--errors/127.0.0.1.2010-06-15.17-06-56.22f1fc56-0621-4aa2-9621-00ff0553894a17
-rw-r--r--errors/127.0.0.1.2010-06-15.17-07-23.f83e43d1-73ed-4c9c-8ee6-69413af33d0317
-rw-r--r--errors/127.0.0.1.2010-06-15.17-09-41.b387bb25-9164-412e-bd91-1ef65135ee9617
-rw-r--r--errors/127.0.0.1.2010-06-15.17-10-16.50d4ec68-0005-4eea-8d8c-7b3f0634845b17
-rw-r--r--errors/127.0.0.1.2010-06-15.17-10-58.d2b352f6-4294-4583-ba1e-5c2ff8d81a2f17
-rw-r--r--errors/127.0.0.1.2010-06-15.17-11-47.c6ceaa6b-23e0-4b5d-80f5-d0ed29f23ba217
-rw-r--r--errors/127.0.0.1.2010-06-15.17-11-47.d5c501a0-e7a6-4aa2-9cc2-3a10fb7c9b5817
-rw-r--r--errors/127.0.0.1.2010-06-15.17-12-56.b3dc871a-875b-4a69-9ee4-a4d75249680817
-rw-r--r--errors/127.0.0.1.2010-06-15.17-12-56.c76b13a1-604e-413d-bd54-d3645655688817
-rw-r--r--errors/127.0.0.1.2010-06-22.17-58-24.43169241-d580-433a-9534-40fd95c8ba0e17
-rw-r--r--errors/127.0.0.1.2010-06-26.14-18-00.942dfcc0-58c1-4580-891e-a5831f65587a17
-rw-r--r--errors/127.0.0.1.2010-06-26.14-29-02.e3e135f4-5f67-4e62-a3a4-f5eeb38c06cb17
-rw-r--r--errors/127.0.0.1.2010-06-26.14-29-08.01743076-f940-47a9-a1e9-e6e3d612266817
-rw-r--r--errors/127.0.0.1.2010-06-26.14-29-11.c5ef7ec4-58fa-4c31-bd75-6e9807bad31417
-rw-r--r--errors/127.0.0.1.2010-06-26.14-29-21.2f1d3ccf-be29-4fde-9927-fe72dea2c40417
-rw-r--r--errors/127.0.0.1.2010-06-26.14-31-17.97b6af6d-b028-4416-84c3-1c5cf2e77d5517
-rw-r--r--errors/127.0.0.1.2010-07-06.11-14-07.d7c8aece-7bc3-4049-937b-30fb481f421d17
-rw-r--r--errors/127.0.0.1.2010-07-06.21-18-26.e5bbcb96-f7a6-4440-888b-46bd1a67733617
-rw-r--r--errors/127.0.0.1.2010-07-06.21-18-53.0f21c2ca-659d-4f8c-9f39-bda12e55bad017
-rw-r--r--errors/127.0.0.1.2010-07-06.21-19-07.10b0d3ea-d4d6-4b6e-a119-db5d42150eaa17
-rw-r--r--errors/127.0.0.1.2010-07-06.21-19-33.2df43f1a-91b2-493d-9ce8-f06efc4fe62917
-rw-r--r--errors/127.0.0.1.2010-07-06.21-19-39.c5331736-649b-4269-aec4-9c20cb7a940317
-rw-r--r--errors/127.0.0.1.2010-07-06.21-19-57.3ae15d94-8f52-438b-87d4-67899bf9f10d17
-rw-r--r--errors/127.0.0.1.2010-07-06.21-19-58.dd1e45d8-6e4d-4b2a-a305-b68e57e5a3bb17
-rw-r--r--errors/127.0.0.1.2010-07-06.21-19-59.c27db2ab-8227-4039-97cf-622d2eb6cc6517
-rw-r--r--errors/127.0.0.1.2010-07-06.21-24-34.fd350e5c-5e4d-447f-bb1e-3caf586f135b17
-rw-r--r--errors/127.0.0.1.2010-07-06.21-24-36.11ba35b4-698d-4436-a189-5789431bdf6217
-rw-r--r--errors/127.0.0.1.2010-07-06.21-24-43.79d98631-a87c-4c48-9efd-037be4e90b2b17
-rw-r--r--errors/127.0.0.1.2010-07-06.21-25-29.7040e780-9f79-4fba-8b25-9acc557d876817
-rw-r--r--errors/127.0.0.1.2010-07-06.21-25-30.cfb814ba-4b82-4e50-b49f-7ec4e67c728717
-rw-r--r--errors/127.0.0.1.2010-07-06.21-27-21.6b386041-0db0-4912-8fd5-bd00e9dd64e817
-rw-r--r--errors/127.0.0.1.2010-07-06.21-27-51.87af17a3-f8af-480e-9aec-2843976dba7517
-rw-r--r--errors/127.0.0.1.2010-07-06.21-27-52.f705d212-1d5c-4272-b3af-c9fd0a0a510417
-rw-r--r--errors/127.0.0.1.2010-07-06.21-29-15.280641a8-e44d-4076-b209-755fc429591017
-rw-r--r--errors/127.0.0.1.2010-07-06.21-29-55.314af018-1e67-47df-acb3-3d7902b5ec4f17
-rw-r--r--errors/127.0.0.1.2010-07-06.21-30-13.f44537c8-5e74-4c67-9d77-5eeef5fd244d17
-rw-r--r--errors/127.0.0.1.2010-07-06.21-30-42.a68356ed-8805-4d90-bc2a-c1152684b45a17
-rw-r--r--errors/127.0.0.1.2010-07-06.21-32-55.1455d8c8-5bca-4abd-8abb-b5b6ff94644e17
-rw-r--r--errors/127.0.0.1.2010-07-06.21-35-16.b352a050-21ae-413f-8ee9-a3ff49b4e4d917
-rw-r--r--errors/127.0.0.1.2010-07-06.21-35-17.143e16c3-1b07-4019-a4e4-9de63bca17dd17
-rw-r--r--errors/127.0.0.1.2010-07-06.21-37-59.45e285c7-b075-47b1-91c5-8838ae416d1b17
-rw-r--r--errors/127.0.0.1.2010-07-06.21-38-29.747e8df8-2355-4719-a6e2-550a47e1a4b017
-rw-r--r--errors/127.0.0.1.2010-07-06.21-39-15.34d2f46b-1647-4259-89e5-77c71e49db3517
-rw-r--r--errors/127.0.0.1.2010-07-06.21-39-31.754b17ce-a8b7-40a2-a3f0-5e32802de9a517
-rw-r--r--errors/127.0.0.1.2010-07-06.21-42-17.0beaf7a6-4047-4601-b12e-0eb0f18217ee17
-rw-r--r--errors/127.0.0.1.2010-07-06.21-49-35.9f326f13-a1f9-4073-82ce-fe391cc9c5dd17
-rw-r--r--errors/127.0.0.1.2010-07-06.21-50-11.44d39e34-37d3-4d88-ba83-774ac8f10eb717
-rw-r--r--errors/127.0.0.1.2010-07-06.22-04-03.090862c3-e8a3-48e4-bbf9-01fdc1a0567f17
-rw-r--r--errors/127.0.0.1.2010-07-06.22-04-03.0b487c87-1bb7-4a1d-b926-b72f5066229a17
-rw-r--r--errors/127.0.0.1.2010-07-06.22-04-03.c19ffad3-d858-4ba6-a628-374f9db0b6e817
-rw-r--r--errors/127.0.0.1.2010-07-06.22-04-23.7bf1efca-9329-4593-9acb-1ad0264ddf4017
-rw-r--r--errors/127.0.0.1.2010-07-06.22-08-27.16d4e8f7-52a1-483c-bab6-28a7da00f03417
-rw-r--r--errors/127.0.0.1.2010-07-06.22-11-35.1992b260-0fb2-44f8-830f-fa0b4c2e921417
-rw-r--r--errors/127.0.0.1.2010-07-06.22-12-07.a7fc9de5-6508-4100-9e21-694c7eeda5b317
-rw-r--r--errors/127.0.0.1.2010-07-06.22-13-12.38c2ad64-e6e0-440c-a410-089bbee1ead517
-rw-r--r--errors/127.0.0.1.2010-07-07.10-02-13.a42ee2c8-ad53-42b6-b15a-285e49cab96a17
-rw-r--r--errors/127.0.0.1.2010-07-07.10-02-19.036914e4-3143-4280-b5d5-e6196b9d536317
-rw-r--r--errors/127.0.0.1.2010-07-07.10-02-26.adfe0044-5526-4721-bfaf-6947db2dad7217
-rw-r--r--errors/127.0.0.1.2010-07-07.10-27-50.3b1caa48-8a07-4c87-84f4-5de4fb6eb34617
-rw-r--r--errors/127.0.0.1.2010-07-07.10-27-50.c7d6778c-c551-4178-9239-b4ee1f8f036c17
-rw-r--r--errors/127.0.0.1.2010-07-07.10-28-13.70a61cbc-653e-40b1-a8b2-f649d591519417
-rw-r--r--errors/127.0.0.1.2010-07-07.10-28-34.26981abd-e292-4ae5-8570-1ca7d0427ebf17
-rw-r--r--errors/127.0.0.1.2010-07-07.10-28-36.0d76f95e-af0c-4a12-ac25-2b8477ad840017
-rw-r--r--errors/127.0.0.1.2010-07-07.10-29-11.1047f1e3-6f4e-4d34-81a0-da47047b333a17
-rw-r--r--errors/127.0.0.1.2010-07-07.10-29-47.b16a2a3e-b801-4b29-870c-98f926533de717
-rw-r--r--errors/127.0.0.1.2010-07-07.10-52-48.c6777db8-fa4b-4f55-bb6c-0d919ab0102817
-rw-r--r--errors/127.0.0.1.2010-07-07.11-18-06.99442e70-a895-43d7-9f55-c8e1faa5920217
-rw-r--r--errors/127.0.0.1.2010-07-07.11-24-37.0cac9768-5458-4dd7-947f-db23a93abe9117
-rw-r--r--errors/127.0.0.1.2010-07-07.12-18-08.67650de4-5e42-4735-aa94-1571627cca4617
-rw-r--r--errors/127.0.0.1.2010-07-07.12-26-40.e5e0f713-b02a-46c8-8963-1efefad1615c17
-rw-r--r--errors/127.0.0.1.2010-07-07.12-52-08.7e40688f-6dd8-42f3-8c57-6560c594775917
-rw-r--r--errors/127.0.0.1.2010-07-07.13-13-30.54f64633-170e-4584-adb7-c1045c5d54e817
-rw-r--r--errors/127.0.0.1.2010-07-07.13-13-31.af234347-345f-4be2-9a75-b44a29d2c73117
-rw-r--r--errors/127.0.0.1.2010-07-07.13-13-33.1817152c-4167-4003-97c8-f262f2418d4a17
-rw-r--r--errors/127.0.0.1.2010-07-07.13-14-11.def093d0-74fd-47fc-8b61-4e97b8c7c8ad17
-rw-r--r--errors/127.0.0.1.2010-07-07.13-14-12.13c743f7-bea2-4207-8e07-f4e8e1e63ed517
-rw-r--r--errors/127.0.0.1.2010-07-07.13-14-14.9c5968a9-752f-46f4-93d5-50656ee3b16117
-rw-r--r--errors/127.0.0.1.2010-07-07.13-15-41.0d7ba954-21a4-4a16-90d1-b78a855f77f717
-rw-r--r--errors/127.0.0.1.2010-07-07.13-17-26.107ff8c1-0237-4e17-be9e-5164ce5c084a17
-rw-r--r--errors/127.0.0.1.2010-07-07.13-20-18.131fe760-052a-4d22-b751-acd5488237e817
-rw-r--r--errors/127.0.0.1.2010-07-07.13-28-49.6a29edd5-5891-468d-a3b1-70c27a9c80f817
-rw-r--r--errors/127.0.0.1.2010-07-07.13-28-54.73c37622-8507-4202-9e0d-ea4646a2508e17
-rw-r--r--errors/127.0.0.1.2010-07-07.13-28-54.887bf6bc-2703-4d2c-bb0c-1fa8c4cc965717
-rw-r--r--errors/127.0.0.1.2010-07-07.13-28-55.5616978c-ffbf-4d6d-a5ed-7a3c471b954617
-rw-r--r--errors/127.0.0.1.2010-07-07.13-31-37.4fe38a35-2189-45a4-9523-2c6109aac88517
-rw-r--r--errors/127.0.0.1.2010-07-07.13-36-30.9b84432b-9342-4d75-bcc7-240878242c2c17
-rw-r--r--errors/127.0.0.1.2010-07-07.13-37-11.ff337428-c630-4010-8da5-cd2309e00e3c17
-rw-r--r--errors/127.0.0.1.2010-07-07.13-37-47.a78bfd0e-5201-4158-8e77-ca03ab24ccc117
-rw-r--r--errors/127.0.0.1.2010-07-07.13-38-28.50cd70b4-e7fc-4094-82e1-6032a614170317
-rw-r--r--errors/127.0.0.1.2010-07-07.13-40-20.6ffe0d95-5460-4e2c-93e2-86ead95e02cb17
-rw-r--r--errors/127.0.0.1.2010-07-07.13-42-38.3ddb898c-d832-494c-bc25-79e75640fdbc17
-rw-r--r--errors/127.0.0.1.2010-07-07.13-43-36.dccbc715-7c4d-4e1a-8d63-13f904ad30f017
-rw-r--r--errors/127.0.0.1.2010-07-07.13-44-40.c1e96f3e-1124-4b21-b3b8-ac9dea6f23a717
-rw-r--r--errors/127.0.0.1.2010-07-07.13-44-52.3d13b8c8-4331-45e0-bfa0-b5959ab2987517
-rw-r--r--errors/127.0.0.1.2010-07-07.14-14-10.108e3849-d19a-4979-bb8f-170e1788b88e17
-rw-r--r--errors/127.0.0.1.2010-07-07.14-19-31.2b679cfa-147e-44f5-bb2c-c000d4faec5a17
-rw-r--r--errors/127.0.0.1.2010-07-07.16-29-29.4e5b9f63-8d7c-431d-a58d-33ab2b0b203a17
-rw-r--r--errors/127.0.0.1.2010-07-07.16-32-50.81a49f98-1a5f-4ca8-a41e-693855f5138b17
-rw-r--r--errors/127.0.0.1.2010-07-07.16-32-50.97d2cef2-71eb-448d-83b7-90194b6973f317
-rw-r--r--errors/127.0.0.1.2010-07-07.16-32-54.31cc3ee7-07f6-44cb-9720-b478c11bf60f17
-rw-r--r--errors/127.0.0.1.2010-07-07.16-39-27.9cdc3ed8-c90f-48a5-9340-d476134c444f17
-rw-r--r--errors/127.0.0.1.2010-07-07.16-42-49.21f22d8c-b870-4d72-b35f-6be8c9caaeb417
-rw-r--r--errors/127.0.0.1.2010-07-07.16-42-49.5500a16a-fe80-4d2b-a2df-b94c99a58dfd17
-rw-r--r--errors/127.0.0.1.2010-07-07.16-42-49.741b571e-4ded-49e0-9cf2-14a0b3f8e4ce17
-rw-r--r--errors/127.0.0.1.2010-07-07.16-42-51.27384b3c-0d23-4255-b7a5-94878177932a17
-rw-r--r--errors/127.0.0.1.2010-07-07.16-42-52.cbb2f140-acf8-454d-8233-26a716b375cf17
-rw-r--r--errors/127.0.0.1.2010-07-08.15-07-46.fde1a7c2-e75d-4a3e-b5b3-12637cc9328817
-rw-r--r--errors/127.0.0.1.2010-07-08.15-14-06.7b0ddfb6-a1e1-452d-94f3-8d62c337b7eb17
-rw-r--r--errors/127.0.0.1.2010-07-08.15-14-07.3795a611-89e5-4715-a7c6-2b21e64b3cd417
-rw-r--r--errors/127.0.0.1.2010-07-08.15-14-29.1e5f4dc2-43ef-4b5c-9b5c-b7af6561aee817
-rw-r--r--errors/127.0.0.1.2010-07-08.15-14-55.47d15630-09c6-484b-be13-70f862f8f00517
-rw-r--r--errors/127.0.0.1.2010-07-08.15-20-04.c1fba562-e378-41c4-92df-d633a3e37b9017
-rw-r--r--errors/127.0.0.1.2010-07-08.15-25-24.de4d5065-f593-4432-b000-2684ae1aa3ed17
-rw-r--r--errors/127.0.0.1.2010-07-08.15-27-15.de25781c-0d1f-461e-b017-7e1cc736414917
-rw-r--r--errors/127.0.0.1.2010-07-08.15-27-15.f2377554-51ca-4b7b-bca0-2fe90a07ee1017
-rw-r--r--errors/127.0.0.1.2010-07-08.15-27-28.3cfa76ce-558d-4e94-a577-5f6e506570b017
-rw-r--r--errors/127.0.0.1.2010-07-08.15-27-34.cfed5abe-608e-4b91-959d-fc7f05fec5bd17
-rw-r--r--errors/127.0.0.1.2010-07-08.15-28-47.91eb3c05-1b3c-4528-832a-e08c2a9768e917
-rw-r--r--errors/127.0.0.1.2010-07-08.15-28-52.37aa57a6-e815-457f-a164-1a9e898de74217
-rw-r--r--errors/127.0.0.1.2010-07-08.15-28-53.87980077-8c27-4be8-8954-2da579e109fb17
-rw-r--r--errors/127.0.0.1.2010-07-08.15-30-36.5919daf3-9557-456e-9af5-b9bf12a1e94d17
-rw-r--r--errors/127.0.0.1.2010-07-08.15-30-53.09f70acd-83e5-4c5d-af80-b0d8d0d53acd17
-rw-r--r--errors/127.0.0.1.2010-07-08.15-35-45.6467e2f5-f182-4dcc-b8c0-8b4c7f6ee7d317
-rw-r--r--errors/127.0.0.1.2010-07-08.15-39-18.b852155d-a09a-4eae-8418-31a0fc1a70fb17
-rw-r--r--errors/127.0.0.1.2010-07-08.15-39-19.faf9b321-fb04-4c6c-9261-bde7c167db0617
-rw-r--r--errors/127.0.0.1.2010-07-08.15-39-34.7fbe55a2-ee87-4644-8a81-b6e33e7b56e017
-rw-r--r--errors/127.0.0.1.2010-07-08.15-39-34.ac09ca25-c8df-4b40-b165-b24092d60e4817
-rw-r--r--errors/127.0.0.1.2010-07-08.15-54-56.66078c59-2a91-4b18-bb3f-796a323f706217
-rw-r--r--errors/127.0.0.1.2010-07-08.15-57-53.5083a2b9-0669-47cc-8ca4-7de04feb491217
-rw-r--r--errors/127.0.0.1.2010-07-08.15-58-08.6dbb33a4-8930-4bdf-9b3d-9c3d40ce731a17
-rw-r--r--errors/127.0.0.1.2010-07-08.15-59-46.31011882-0f6e-4209-934b-feed78e1ea3517
-rw-r--r--errors/127.0.0.1.2010-07-08.16-16-09.e265f352-0ac3-4bc3-9018-9a15dbcb03dd17
-rw-r--r--errors/127.0.0.1.2010-07-08.16-18-37.b20c6157-e66e-40d7-bf3e-332e955a6c0717
-rw-r--r--errors/127.0.0.1.2010-07-08.16-20-00.059fb706-4580-4b2d-9ed1-59512ec9213717
-rw-r--r--errors/127.0.0.1.2010-07-08.16-20-06.c259b3f8-552b-4e9e-b2cb-8f1d2420406c17
-rw-r--r--errors/127.0.0.1.2010-07-08.16-22-24.a5292d7b-4a24-4ab2-8e3d-9f4ccc2ee84b17
-rw-r--r--errors/127.0.0.1.2010-07-08.16-30-15.2704d38b-d3cc-4e30-88c0-f94a6b5cdc9517
-rw-r--r--errors/127.0.0.1.2010-07-08.16-36-35.3758fc84-121f-4dba-b939-ba6a397aabe917
-rw-r--r--errors/127.0.0.1.2010-07-08.16-37-01.77bb5933-5db4-446a-993b-609fc26e062317
-rw-r--r--errors/127.0.0.1.2010-07-08.16-37-19.747f91b5-f072-4d32-a3de-f3d0a0a0782e17
-rw-r--r--errors/127.0.0.1.2010-07-08.16-44-35.044150aa-da5f-4580-ae29-c9f142c6741a17
-rw-r--r--errors/127.0.0.1.2010-07-13.15-36-26.6e9681c5-0910-4de3-8952-4c6edb303c1517
-rw-r--r--errors/127.0.0.1.2010-07-13.15-40-44.5519811d-d613-4ef7-8b43-f2da758adaeb17
-rw-r--r--errors/127.0.0.1.2010-07-13.16-01-48.571d5770-28f3-4258-86e5-18f34ecc8bf017
-rw-r--r--errors/127.0.0.1.2010-07-13.16-02-24.a06d170a-1f3b-4342-b594-615c26ac6c3817
-rw-r--r--errors/127.0.0.1.2010-07-13.16-43-44.ab2ccb3e-4ab0-461c-8c42-62e5531360e017
-rw-r--r--errors/127.0.0.1.2010-07-13.16-44-14.8480d4f8-4257-4061-9590-0e1a04b92bcd17
-rw-r--r--errors/127.0.0.1.2010-07-13.16-44-30.36c1dbc5-f098-4eaf-bbf3-5ba7cd8031b517
-rw-r--r--errors/127.0.0.1.2010-07-13.16-44-31.78c05431-6a0b-4dfb-ad48-fc4bbb3a376d17
-rw-r--r--errors/127.0.0.1.2010-07-13.16-44-40.288d857b-24ed-486b-97e6-b19449779e4e17
-rw-r--r--errors/127.0.0.1.2010-07-13.16-44-43.103a43f9-71d9-4768-812b-753b726fa19717
-rw-r--r--languages/es-es.py248
-rw-r--r--languages/fr-ca.py106
-rw-r--r--languages/fr-fr.py95
-rw-r--r--languages/hi-hi.py82
-rw-r--r--languages/hu-hu.py93
-rw-r--r--languages/hu.py93
-rw-r--r--languages/it-it.py75
-rw-r--r--languages/it.py107
-rw-r--r--languages/pl-pl.py81
-rw-r--r--languages/pl.py104
-rw-r--r--languages/pt-br.py78
-rw-r--r--languages/pt-pt.py76
-rw-r--r--languages/pt.py76
-rw-r--r--languages/ru-ru.py87
-rw-r--r--models/db.py50
-rw-r--r--models/db.py.18
-rw-r--r--models/db.py.bak9
-rw-r--r--models/menu.py52
-rw-r--r--sessions/127-0-0-1-17b977ab-c09a-46a4-a5d3-479063196e0587
-rw-r--r--sessions/127-0-0-1-2fc3e1b4-be47-4229-a6b3-065be030141813
-rw-r--r--sessions/127-0-0-1-31641b63-f0a4-478a-b72b-ec62f607c56597
-rw-r--r--sessions/127-0-0-1-33368913-e2d5-437e-848c-9630afa03fe613
-rw-r--r--sessions/127-0-0-1-5b53cc8d-5988-4a95-a3fb-2bfc97b0c12b94
-rw-r--r--sessions/127-0-0-1-5c75c2ab-740a-4917-98e7-68ee08593b5413
-rw-r--r--sessions/127-0-0-1-5ea3cc27-0619-489f-b5d8-01f498ca220613
-rw-r--r--sessions/127-0-0-1-67192e32-196b-4b82-9983-6ad070fe765026
-rw-r--r--sessions/127-0-0-1-7c07d1f2-c718-4fc5-a095-74a6279342a611
-rw-r--r--sessions/127-0-0-1-8ce5f553-b5e8-4c4e-ba1c-77b71bd12d5313
-rw-r--r--sessions/127-0-0-1-90ce4596-0740-4a89-a451-427611419c3d13
-rw-r--r--sessions/127-0-0-1-9e3ea9c1-5743-4a5a-baa0-196902fc7bb998
-rw-r--r--sessions/127-0-0-1-b8c059ab-c97c-4aac-a21d-750e685bb15a13
-rw-r--r--sessions/127-0-0-1-cba64c5b-ec3b-405e-9c5e-8e3d8b2b7aa311
-rw-r--r--static/background.gifbin0 -> 1205 bytes
-rw-r--r--static/base.css636
-rw-r--r--static/calendar.css1
-rw-r--r--static/calendar.js80
-rw-r--r--static/ez-plug-min.css4
-rw-r--r--static/ez-plug.css147
-rw-r--r--static/glike.css69
-rw-r--r--static/glike.css.bak0
-rw-r--r--static/header.gifbin0 -> 1008 bytes
-rw-r--r--static/jquery.js152
-rw-r--r--static/menu.gifbin0 -> 264 bytes
-rw-r--r--static/title.pngbin0 -> 10937 bytes
-rw-r--r--uploads/comment.file.81d7970cbb9e7191.547572746c65417274436f6c6f72732833292e7461.ta1
-rw-r--r--uploads/comment.file.82f54d8ce1b21807.6f63742e7461.pngbin0 -> 7010 bytes
-rw-r--r--uploads/comment.file.82f54d8ce1b21807.6f63742e7461.ta1
-rw-r--r--uploads/comment.file.8422e8e9993e197a.547572746c65417274436f6c6f72732832292e7461.pngbin0 -> 43582 bytes
-rw-r--r--uploads/comment.file.8422e8e9993e197a.547572746c65417274436f6c6f72732832292e7461.ta1
-rw-r--r--uploads/comment.file.84504ba1b74b79db.6f63742e7461.ta1
-rw-r--r--uploads/comment.file.86e1907a57f27ca4.7371756172652e7461.ta1
-rw-r--r--uploads/comment.file.8713cec71bc2c47e.72616e646f6d2e7461.ta1
-rw-r--r--uploads/comment.file.871a0f417ec61c9b.636f6c6f72776865656c2e7461.ta1
-rw-r--r--uploads/comment.file.8c521e341f67938a.547572746c65417274436f6c6f72732e7461.ta1
-rw-r--r--uploads/comment.file.8d6af2114401515b.72616e646f6d2e7461.ta1
-rw-r--r--uploads/comment.file.8de211ac973fc023.547572746c65417274436f6c6f72732e7461.pngbin0 -> 43582 bytes
-rw-r--r--uploads/comment.file.8de211ac973fc023.547572746c65417274436f6c6f72732e7461.ta1
-rw-r--r--uploads/comment.file.8e409f405dcce256.72616e646f6d2e7461.ta1
-rw-r--r--uploads/comment.file.8e886ea0dea26d33.72616e646f6d2e7461.ta1
-rw-r--r--uploads/comment.file.8ffcc006f7d9b671.6f63742e7461.ta1
-rw-r--r--uploads/comment.file.90337a96e341cdab.7061747465726e2e7461.ta1
-rw-r--r--uploads/comment.file.909a0af0445403d4.547572746c65417274436f6c6f72732e7461.ta1
-rw-r--r--uploads/comment.file.91fdd282b0577e09.547572746c65417274436f6c6f72732e7461.ta1
-rw-r--r--uploads/comment.file.92a63c5d1605151b.747572746c65617274746573742e7461.pngbin0 -> 4874 bytes
-rw-r--r--uploads/comment.file.92a63c5d1605151b.747572746c65617274746573742e7461.ta1
-rw-r--r--uploads/comment.file.92da1baf2da6ae6b.72616e646f6d2e7461.ta1
-rw-r--r--uploads/comment.file.93827d6c52f20276.6f63742e7461.ta1
-rw-r--r--uploads/comment.file.9457e6586f80fc90.7371756172652e7461.ta1
-rw-r--r--uploads/comment.file.94947c77625ae2a0.547572746c65417274436f6c6f72732e7461.ta1
-rw-r--r--uploads/comment.file.961269c389d0f6b8.72616e646f6d2e7461.ta1
-rw-r--r--uploads/comment.file.96610faa8111f42a.547572746c65417274436f6c6f72732e7461.ta1
-rw-r--r--uploads/comment.file.96d82c103540cce2.72616e646f6d2e7461.ta1
-rw-r--r--uploads/comment.file.97fe971da28492b7.72616e646f6d2e7461.pngbin0 -> 15883 bytes
-rw-r--r--uploads/comment.file.97fe971da28492b7.72616e646f6d2e7461.ta1
-rw-r--r--uploads/comment.file.98c655089b2e157d.6f63742e7461.ta1
-rw-r--r--uploads/comment.file.9a4e0293482d1a9d.72616e646f6d2e7461.pngbin0 -> 17172 bytes
-rw-r--r--uploads/comment.file.9a4e0293482d1a9d.72616e646f6d2e7461.ta1
-rw-r--r--uploads/comment.file.9a7b64a807371945.547572746c65417274436f6c6f72732e7461.ta1
-rw-r--r--uploads/comment.file.9b57eed8e9790aa2.7371756172652e7461.pngbin0 -> 6169 bytes
-rw-r--r--uploads/comment.file.9b57eed8e9790aa2.7371756172652e7461.ta1
-rw-r--r--uploads/comment.file.9d67a10e4aaad424.747572746c65617274746573742e7461.pngbin0 -> 4874 bytes
-rw-r--r--uploads/comment.file.9d67a10e4aaad424.747572746c65617274746573742e7461.ta1
-rw-r--r--uploads/comment.file.a1cb04531244e0db.7061747465726e342e7461.ta1
-rw-r--r--uploads/comment.file.a234583b81dbb1c7.547572746c65417274436f6c6f72732e7461.ta1
-rw-r--r--uploads/comment.file.a27fe041a9bb2ef2.7371756172652e7461.ta1
-rw-r--r--uploads/comment.file.a2e183920e6abd08.72616e646f6d2e7461.ta1
-rw-r--r--uploads/comment.file.a2f0bc23968201d1.747572746c6561727474657374322e7461.pngbin0 -> 12933 bytes
-rw-r--r--uploads/comment.file.a2f0bc23968201d1.747572746c6561727474657374322e7461.ta1
-rw-r--r--uploads/comment.file.a362acc16a0243a3.72616e646f6d2e7461.ta1
-rw-r--r--uploads/comment.file.a3d69f66ebacbe99.6f63742e7461.ta1
-rw-r--r--uploads/comment.file.a3ecaf3a01807525.72616e646f6d2e7461.ta1
-rw-r--r--uploads/comment.file.a54cd149b2c94dec.72616e646f6d2e7461.ta1
-rw-r--r--uploads/comment.file.a5a0c1815110a050.6f63742e7461.ta1
-rw-r--r--uploads/comment.file.a6fa8e82a3c64a3a.72616e646f6d2e7461.ta1
-rw-r--r--uploads/comment.file.a87b52d8c16758e4.72616e646f6d2e7461.ta1
-rw-r--r--uploads/comment.file.aaa1f397ad21e704.7371756172652e7461.ta1
-rw-r--r--uploads/comment.file.aae673c25380d9d7.72616e646f6d2e7461.ta1
-rw-r--r--uploads/comment.file.ad291df0e3b89480.72616e646f6d2e7461.ta1
-rw-r--r--uploads/comment.file.ad617490bd0124d9.6f63742e7461.ta1
-rw-r--r--uploads/comment.file.af669bccfd1c980a.547572746c65417274436f6c6f72732e7461.pngbin0 -> 43582 bytes
-rw-r--r--uploads/comment.file.af669bccfd1c980a.547572746c65417274436f6c6f72732e7461.ta1
-rw-r--r--uploads/comment.file.b30f00228581a6a2.547572746c65417274436f6c6f72732e7461.ta1
-rw-r--r--uploads/comment.file.b377d772869ccbcb.547572746c65417274436f6c6f72732832292e7461.pngbin0 -> 43582 bytes
-rw-r--r--uploads/comment.file.b377d772869ccbcb.547572746c65417274436f6c6f72732832292e7461.ta1
-rw-r--r--uploads/comment.file.b4054c7c358a664c.7371756172652e7461.ta1
-rw-r--r--uploads/comment.file.b44a77af4bc940ad.747572746c6561727474657374322e7461.pngbin0 -> 12933 bytes
-rw-r--r--uploads/comment.file.b44a77af4bc940ad.747572746c6561727474657374322e7461.ta1
-rw-r--r--uploads/comment.file.b47fdec09160466c.72616e646f6d2e7461.ta1
-rw-r--r--uploads/comment.file.b4d41b2e6a6c6dd4.547572746c65417274436f6c6f72732833292e7461.pngbin0 -> 43582 bytes
-rw-r--r--uploads/comment.file.b4d41b2e6a6c6dd4.547572746c65417274436f6c6f72732833292e7461.ta1
-rw-r--r--uploads/comment.file.b5e4828313a24ba6.547572746c65417274436f6c6f72732e7461.ta1
-rw-r--r--uploads/comment.file.b795f9173ebfdedb.547572746c65417274436f6c6f72732e7461.ta1
-rw-r--r--uploads/comment.file.b7f2a06146dcba0c.6f63742e7461.pngbin0 -> 7010 bytes
-rw-r--r--uploads/comment.file.b7f2a06146dcba0c.6f63742e7461.ta1
-rw-r--r--uploads/comment.file.b830add106e875cb.72616e646f6d2e7461.ta1
-rw-r--r--uploads/comment.file.b858721e9288d063.547572746c65417274436f6c6f72732e7461.ta1
-rw-r--r--uploads/comment.file.ba4675a0e85b1df7.7371756172652e7461.ta1
-rw-r--r--uploads/comment.file.bb08bc437fa46be6.6f63742e7461.ta1
-rw-r--r--uploads/comment.file.bb52024805066709.7061747465726e2e7461.ta1
-rw-r--r--uploads/comment.file.bb7cad68c4f6cf78.7061747465726e322e7461.ta1
-rw-r--r--uploads/comment.file.bbe458e7fc45b838.72616e646f6d2e7461.ta1
-rw-r--r--uploads/comment.file.bbeda6293097768a.7061747465726e332e7461.ta1
-rw-r--r--uploads/comment.file.bcdf956a459387fe.6f63742e7461.ta1
-rw-r--r--uploads/comment.file.bcffc0b86ec366a7.7371756172652e7461.ta1
-rw-r--r--uploads/comment.file.bd638f7fa8135ef8.6f63742e7461.ta1
-rw-r--r--uploads/comment.newimage.808a861a19fa178d.7061747465726e342e706e67.pngbin0 -> 294731 bytes
-rw-r--r--uploads/comment.newimage.86b1562d4db46876.72616e646f6d2e706e67.pngbin0 -> 9832 bytes
-rw-r--r--uploads/comment.newimage.88fabbfc379a9c99.72616e646f6d2e706e67.pngbin0 -> 9832 bytes
-rw-r--r--uploads/comment.newimage.899efa6a4b074f63.72616e646f6d2e706e67.pngbin0 -> 9832 bytes
-rw-r--r--uploads/comment.newimage.8eff9d1bb83a51c1.547572746c65417274436f6c6f72732e706e67.pngbin0 -> 50496 bytes
-rw-r--r--uploads/comment.newimage.8f995e2afe4c34da.547572746c65417274436f6c6f72732e706e67.pngbin0 -> 50496 bytes
-rw-r--r--uploads/comment.newimage.910f7e9615a03bcb.72616e646f6d2e706e67.pngbin0 -> 9832 bytes
-rw-r--r--uploads/comment.newimage.9167bbbca0caad97.547572746c65417274436f6c6f72732e706e67.pngbin0 -> 50496 bytes
-rw-r--r--uploads/comment.newimage.91d85a30ad539dc7.72616e646f6d2e706e67.pngbin0 -> 9832 bytes
-rw-r--r--uploads/comment.newimage.9222d6fa727c1325.547572746c65417274436f6c6f72732e706e67.pngbin0 -> 50496 bytes
-rw-r--r--uploads/comment.newimage.925644106969a2f6.547572746c65417274436f6c6f72732e706e67.pngbin0 -> 50496 bytes
-rw-r--r--uploads/comment.newimage.9294b7dd4b712b98.7061747465726e352e706e67.pngbin0 -> 11390 bytes
-rw-r--r--uploads/comment.newimage.9359d4958ffe58e3.72616e646f6d2e706e67.pngbin0 -> 9832 bytes
-rw-r--r--uploads/comment.newimage.970aa68555838b03.72616e646f6d2e706e67.pngbin0 -> 9832 bytes
-rw-r--r--uploads/comment.newimage.9babac2bb7cfc14c.547572746c65417274436f6c6f72732e706e67.pngbin0 -> 50496 bytes
-rw-r--r--uploads/comment.newimage.9c1f47d9d06be6d7.72616e646f6d2e706e67.pngbin0 -> 9832 bytes
-rw-r--r--uploads/comment.newimage.a3c5e5da0b56515e.547572746c65417274436f6c6f72732e706e67.pngbin0 -> 50496 bytes
-rw-r--r--uploads/comment.newimage.a49d84e150a5fb66.547572746c65417274436f6c6f72732e706e67.pngbin0 -> 50496 bytes
-rw-r--r--uploads/comment.newimage.a500f746bfdcdc70.7061747465726e332e706e67.pngbin0 -> 181780 bytes
-rw-r--r--uploads/comment.newimage.a507c5ef26fa0fbc.72616e646f6d2e706e67.pngbin0 -> 9832 bytes
-rw-r--r--uploads/comment.newimage.a6f10ba70f75e477.547572746c65417274436f6c6f72732e706e67.pngbin0 -> 50496 bytes
-rw-r--r--uploads/comment.newimage.a7fe775f92ebe11b.72616e646f6d2e706e67.pngbin0 -> 9832 bytes
-rw-r--r--uploads/comment.newimage.a853dd164949b8f9.72616e646f6d2e706e67.pngbin0 -> 9832 bytes
-rw-r--r--uploads/comment.newimage.aa542b34978ab93e.7061747465726e322e706e67.pngbin0 -> 218002 bytes
-rw-r--r--uploads/comment.newimage.ac3b57c60b470662.72616e646f6d2e706e67.pngbin0 -> 9832 bytes
-rw-r--r--uploads/comment.newimage.aeb94355af0dd82e.7061747465726e2e706e67.pngbin0 -> 109838 bytes
-rw-r--r--uploads/comment.newimage.af8e115276c5ddbe.636f6c6f72776865656c2e706e67.pngbin0 -> 103283 bytes
-rw-r--r--uploads/comment.newimage.b27266f434f19c29.547572746c65417274436f6c6f72732e706e67.pngbin0 -> 50496 bytes
-rw-r--r--uploads/comment.newimage.b3e4d0f0001a07d6.72616e646f6d2e706e67.pngbin0 -> 9832 bytes
-rw-r--r--uploads/comment.newimage.b4e1717e79409107.72616e646f6d2e706e67.pngbin0 -> 9832 bytes
-rw-r--r--uploads/comment.newimage.b86951a6c75b913e.72616e646f6d2e706e67.pngbin0 -> 9832 bytes
-rw-r--r--uploads/comment.newimage.b9bd155018fa2da2.72616e646f6d2e706e67.pngbin0 -> 9832 bytes
-rw-r--r--uploads/comment.newimage.bd7d50a1ab065911.72616e646f6d2e706e67.pngbin0 -> 9832 bytes
-rw-r--r--uploads/comment.newimage.bdeb82ce001eb04a.72616e646f6d2e706e67.pngbin0 -> 9832 bytes
-rw-r--r--uploads/image.file.838f51bdacc7a5ee.7061747465726e2e7461.ta1
-rw-r--r--uploads/image.file.8ec336050d2f1968.7061747465726e2e7461.ta1
-rw-r--r--uploads/image.file.9d39681cf7b07e12.7061747465726e2e7461.ta1
-rw-r--r--uploads/image.file.a11d74583031ce9b.7061747465726e2e7461.ta1
-rw-r--r--uploads/image.file.a65380ec655637c3.7061747465726e2e7461.ta1
-rw-r--r--uploads/image.file.b0a7b723ca312329.636f6c6f72732e7461.ta1
-rw-r--r--uploads/image.file.b776db7abedaa85f.7061747465726e2e7461.ta1
-rw-r--r--uploads/image.file.bbed5a50205cb9a6.636f6c6f7273322e7461.ta1
-rw-r--r--uploads/image.file.beebcae39552bd52.7061747465726e2e7461.ta1
-rw-r--r--uploads/image.file.bf08ced37b80d52e.7061747465726e2e7461.ta1
-rw-r--r--uploads/image.newimage.89e5872d246ba62d.7061747465726e2e706e67.pngbin0 -> 103110 bytes
-rw-r--r--uploads/image.newimage.8c15b9ce81f24314.7061747465726e2e706e67.pngbin0 -> 103110 bytes
-rw-r--r--uploads/image.newimage.979840aad8ca92c4.7061747465726e2e706e67.pngbin0 -> 103110 bytes
-rw-r--r--uploads/image.newimage.99038a85fdbc0f25.7061747465726e322e706e67.pngbin0 -> 95223 bytes
-rw-r--r--uploads/image.newimage.9fa7d3e5e29db916.7061747465726e2e706e67.pngbin0 -> 103110 bytes
-rw-r--r--uploads/image.newimage.a8d21af43048bb9c.7061747465726e2e706e67.pngbin0 -> 103110 bytes
-rw-r--r--uploads/image.newimage.b117d7d8603fdef0.7061747465726e2e706e67.pngbin0 -> 103110 bytes
-rw-r--r--uploads/image.newimage.b3362909ab39b2c7.636f6c6f72732e706e67.pngbin0 -> 53931 bytes
-rw-r--r--uploads/image.newimage.bd3cc8032ddc3ff0.636f6c6f72732e706e67.pngbin0 -> 53931 bytes
-rw-r--r--uploads/image.newimage.bdefee79db56d74a.7061747465726e322e706e67.pngbin0 -> 95223 bytes
-rw-r--r--views/appadmin.html198
-rw-r--r--views/default/_base.html25
-rw-r--r--views/default/_base.html.119
-rw-r--r--views/default/_base.html.bak20
-rw-r--r--views/default/adminpage.html3
-rw-r--r--views/default/image.html23
-rw-r--r--views/default/index.html55
-rw-r--r--views/default/index.html.14
-rw-r--r--views/default/index.html.bak4
-rw-r--r--views/default/submit.html4
-rw-r--r--views/default/testpage.html2
-rw-r--r--views/default/testpage.html.bak4
-rw-r--r--views/default/upload.html2
-rw-r--r--views/default/user.html20
-rw-r--r--views/generic.html18
-rw-r--r--views/generic.json11
-rw-r--r--views/generic.rss16
-rw-r--r--views/generic.xml11
-rw-r--r--views/layout.html67
-rw-r--r--views/web2py_ajax.html90
469 files changed, 8852 insertions, 0 deletions
diff --git a/ABOUT b/ABOUT
new file mode 100644
index 0000000..b160b8e
--- /dev/null
+++ b/ABOUT
@@ -0,0 +1,2 @@
+Write something about this app.
+Developed with web2py. \ No newline at end of file
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..c634946
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,2 @@
+This is a sample license. You can write here anything you want
+as long as you do not violate web2py copyright, trademark and license.
diff --git a/__init__.py b/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/__init__.py
diff --git a/cache/cache.lock b/cache/cache.lock
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/cache/cache.lock
diff --git a/cache/cache.shelve b/cache/cache.shelve
new file mode 100644
index 0000000..ce66aa6
--- /dev/null
+++ b/cache/cache.shelve
Binary files differ
diff --git a/controllers/CreateImage b/controllers/CreateImage
new file mode 160000
+Subproject 41ff529465f8901dda5aa7247219595b7822c66
diff --git a/controllers/appadmin.py b/controllers/appadmin.py
new file mode 100644
index 0000000..e3b66e0
--- /dev/null
+++ b/controllers/appadmin.py
@@ -0,0 +1,408 @@
+# -*- coding: utf-8 -*-
+
+# ##########################################################
+# ## make sure administrator is on localhost
+# ###########################################################
+
+import os
+import socket
+import datetime
+import copy
+import gluon.contenttype
+import gluon.fileutils
+
+# ## critical --- make a copy of the environment
+
+global_env = copy.copy(globals())
+global_env['datetime'] = datetime
+
+http_host = request.env.http_host.split(':')[0]
+remote_addr = request.env.remote_addr
+try:
+ hosts = (http_host, socket.gethostname(),
+ socket.gethostbyname(http_host),
+ '::1','127.0.0.1','::ffff:127.0.0.1')
+except:
+ hosts = (http_host, )
+
+if request.env.http_x_forwarded_for or request.env.wsgi_url_scheme\
+ in ['https', 'HTTPS']:
+ session.secure()
+elif (remote_addr not in hosts) and (remote_addr != "127.0.0.1"):
+ raise HTTP(200, T('appadmin is disabled because insecure channel'))
+if not gluon.fileutils.check_credentials(request):
+ redirect(URL(a='admin', c='default', f='index'))
+
+ignore_rw = True
+response.view = 'appadmin.html'
+response.menu = [[T('design'), False, URL('admin', 'default', 'design',
+ args=[request.application])], [T('db'), False,
+ URL(r=request, f='index')], [T('state'), False,
+ URL(r=request, f='state')], [T('cache'), False,
+ URL(r=request, f='ccache')]]
+
+# ##########################################################
+# ## auxiliary functions
+# ###########################################################
+
+
+def get_databases(request):
+ dbs = {}
+ for (key, value) in global_env.items():
+ cond = False
+ try:
+ cond = isinstance(value, GQLDB)
+ except:
+ cond = isinstance(value, SQLDB)
+ if cond:
+ dbs[key] = value
+ return dbs
+
+
+databases = get_databases(None)
+
+
+def eval_in_global_env(text):
+ exec ('_ret=%s' % text, {}, global_env)
+ return global_env['_ret']
+
+
+def get_database(request):
+ if request.args and request.args[0] in databases:
+ return eval_in_global_env(request.args[0])
+ else:
+ session.flash = T('invalid request')
+ redirect(URL(r=request, f='index'))
+
+
+def get_table(request):
+ db = get_database(request)
+ if len(request.args) > 1 and request.args[1] in db.tables:
+ return (db, request.args[1])
+ else:
+ session.flash = T('invalid request')
+ redirect(URL(r=request, f='index'))
+
+
+def get_query(request):
+ try:
+ return eval_in_global_env(request.vars.query)
+ except Exception:
+ return None
+
+
+def query_by_table_type(tablename,db,request=request):
+ keyed = hasattr(db[tablename],'_primarykey')
+ if keyed:
+ firstkey = db[tablename][db[tablename]._primarykey[0]]
+ cond = '>0'
+ if firstkey.type in ['string', 'text']:
+ cond = '!=""'
+ qry = '%s.%s.%s%s' % (request.args[0], request.args[1], firstkey.name, cond)
+ else:
+ qry = '%s.%s.id>0' % tuple(request.args[:2])
+ return qry
+
+
+
+# ##########################################################
+# ## list all databases and tables
+# ###########################################################
+
+
+def index():
+ return dict(databases=databases)
+
+
+# ##########################################################
+# ## insert a new record
+# ###########################################################
+
+
+def insert():
+ (db, table) = get_table(request)
+ form = SQLFORM(db[table], ignore_rw=ignore_rw)
+ if form.accepts(request.vars, session):
+ response.flash = T('new record inserted')
+ return dict(form=form,table=db[table])
+
+
+# ##########################################################
+# ## list all records in table and insert new record
+# ###########################################################
+
+
+def download():
+ import os
+ db = get_database(request)
+ return response.download(request,db)
+
+def csv():
+ import gluon.contenttype
+ response.headers['Content-Type'] = \
+ gluon.contenttype.contenttype('.csv')
+ db = get_database(request)
+ query = get_query(request)
+ if not query:
+ return None
+ response.headers['Content-disposition'] = 'attachment; filename=%s_%s.csv'\
+ % tuple(request.vars.query.split('.')[:2])
+ return str(db(query).select())
+
+
+def import_csv(table, file):
+ table.import_from_csv_file(file)
+
+def select():
+ import re
+ db = get_database(request)
+ dbname = request.args[0]
+ regex = re.compile('(?P<table>\w+)\.(?P<field>\w+)=(?P<value>\d+)')
+ if len(request.args)>1 and hasattr(db[request.args[1]],'_primarykey'):
+ regex = re.compile('(?P<table>\w+)\.(?P<field>\w+)=(?P<value>.+)')
+ if request.vars.query:
+ match = regex.match(request.vars.query)
+ if match:
+ request.vars.query = '%s.%s.%s==%s' % (request.args[0],
+ match.group('table'), match.group('field'),
+ match.group('value'))
+ else:
+ request.vars.query = session.last_query
+ query = get_query(request)
+ if request.vars.start:
+ start = int(request.vars.start)
+ else:
+ start = 0
+ nrows = 0
+ stop = start + 100
+ table = None
+ rows = []
+ orderby = request.vars.orderby
+ if orderby:
+ orderby = dbname + '.' + orderby
+ if orderby == session.last_orderby:
+ if orderby[0] == '~':
+ orderby = orderby[1:]
+ else:
+ orderby = '~' + orderby
+ session.last_orderby = orderby
+ session.last_query = request.vars.query
+ form = FORM(TABLE(TR(T('Query:'), '', INPUT(_style='width:400px',
+ _name='query', _value=request.vars.query or '',
+ requires=IS_NOT_EMPTY(error_message=T("Cannot be empty")))), TR(T('Update:'),
+ INPUT(_name='update_check', _type='checkbox',
+ value=False), INPUT(_style='width:400px',
+ _name='update_fields', _value=request.vars.update_fields
+ or '')), TR(T('Delete:'), INPUT(_name='delete_check',
+ _class='delete', _type='checkbox', value=False), ''),
+ TR('', '', INPUT(_type='submit', _value='submit'))),
+ _action=URL(r=request,args=request.args))
+ if request.vars.csvfile != None:
+ try:
+ import_csv(db[request.vars.table],
+ request.vars.csvfile.file)
+ response.flash = T('data uploaded')
+ except Exception, e:
+ response.flash = DIV(T('unable to parse csv file'),PRE(str(e)))
+ if form.accepts(request.vars, formname=None):
+# regex = re.compile(request.args[0] + '\.(?P<table>\w+)\.id\>0')
+ regex = re.compile(request.args[0] + '\.(?P<table>\w+)\..+')
+
+ match = regex.match(form.vars.query.strip())
+ if match:
+ table = match.group('table')
+ try:
+ nrows = db(query).count()
+ if form.vars.update_check and form.vars.update_fields:
+ db(query).update(**eval_in_global_env('dict(%s)'
+ % form.vars.update_fields))
+ response.flash = T('%s rows updated', nrows)
+ elif form.vars.delete_check:
+ db(query).delete()
+ response.flash = T('%s rows deleted', nrows)
+ nrows = db(query).count()
+ if orderby:
+ rows = db(query).select(limitby=(start, stop),
+ orderby=eval_in_global_env(orderby))
+ else:
+ rows = db(query).select(limitby=(start, stop))
+ except Exception, e:
+ (rows, nrows) = ([], 0)
+ response.flash = DIV(T('Invalid Query'),PRE(str(e)))
+ return dict(
+ form=form,
+ table=table,
+ start=start,
+ stop=stop,
+ nrows=nrows,
+ rows=rows,
+ query=request.vars.query,
+ )
+
+
+# ##########################################################
+# ## edit delete one record
+# ###########################################################
+
+
+def update():
+ (db, table) = get_table(request)
+ keyed = hasattr(db[table],'_primarykey')
+ record = None
+ if keyed:
+ key = [f for f in request.vars if f in db[table]._primarykey]
+ if key:
+ record = db(db[table][key[0]] == request.vars[key[0]]).select().first()
+ else:
+ record = db(db[table].id == request.args(2)).select().first()
+
+ if not record:
+ qry = query_by_table_type(table, db)
+ session.flash = T('record does not exist')
+ redirect(URL(r=request, f='select', args=request.args[:1],
+ vars=dict(query=qry)))
+
+ if keyed:
+ for k in db[table]._primarykey:
+ db[table][k].writable=False
+
+ form = SQLFORM(db[table], record, deletable=True, delete_label=T('Check to delete'),
+ ignore_rw=ignore_rw and not keyed,
+ linkto=URL(r=request, f='select',
+ args=request.args[:1]), upload=URL(r=request,
+ f='download', args=request.args[:1]))
+
+ if form.accepts(request.vars, session):
+ session.flash = T('done!')
+ qry = query_by_table_type(table, db)
+ redirect(URL(r=request, f='select', args=request.args[:1],
+ vars=dict(query=qry)))
+ return dict(form=form,table=db[table])
+
+
+# ##########################################################
+# ## get global variables
+# ###########################################################
+
+
+def state():
+ return dict()
+
+def ccache():
+ form = FORM(
+ P(TAG.BUTTON("Clear CACHE?", _type="submit", _name="yes", _value="yes")),
+ P(TAG.BUTTON("Clear RAM", _type="submit", _name="ram", _value="ram")),
+ P(TAG.BUTTON("Clear DISK", _type="submit", _name="disk", _value="disk")),
+ )
+
+ if form.accepts(request.vars, session):
+ clear_ram = False
+ clear_disk = False
+ session.flash = ""
+ if request.vars.yes:
+ clear_ram = clear_disk = True
+ if request.vars.ram:
+ clear_ram = True
+ if request.vars.disk:
+ clear_disk = True
+
+ if clear_ram:
+ cache.ram.clear()
+ session.flash += "Ram Cleared "
+ if clear_disk:
+ cache.disk.clear()
+ session.flash += "Disk Cleared"
+
+ redirect(URL(r=request))
+
+ try:
+ from guppy import hpy; hp=hpy()
+ except ImportError:
+ hp = False
+
+ import shelve, os, copy, time, math
+ from gluon import portalocker
+
+ ram = {
+ 'bytes': 0,
+ 'objects': 0,
+ 'hits': 0,
+ 'misses': 0,
+ 'ratio': 0,
+ 'oldest': time.time()
+ }
+ disk = copy.copy(ram)
+ total = copy.copy(ram)
+
+ for key, value in cache.ram.storage.items():
+ if isinstance(value, dict):
+ ram['hits'] = value['hit_total'] - value['misses']
+ ram['misses'] = value['misses']
+ try:
+ ram['ratio'] = ram['hits'] * 100 / value['hit_total']
+ except (KeyError, ZeroDivisionError):
+ ram['ratio'] = 0
+ else:
+ if hp:
+ ram['bytes'] += hp.iso(value[1]).size
+ ram['objects'] += hp.iso(value[1]).count
+
+ if value[0] < ram['oldest']:
+ ram['oldest'] = value[0]
+
+ locker = open(os.path.join(request.folder,
+ 'cache/cache.lock'), 'a')
+ portalocker.lock(locker, portalocker.LOCK_EX)
+ disk_storage = shelve.open(
+ os.path.join(request.folder,
+ 'cache/cache.shelve'))
+
+ for key, value in disk_storage.items():
+ if isinstance(value, dict):
+ disk['hits'] = value['hit_total'] - value['misses']
+ disk['misses'] = value['misses']
+ try:
+ disk['ratio'] = disk['hits'] * 100 / value['hit_total']
+ except (KeyError, ZeroDivisionError):
+ disk['ratio'] = 0
+ else:
+ if hp:
+ disk['bytes'] += hp.iso(value[1]).size
+ disk['objects'] += hp.iso(value[1]).count
+ if value[0] < disk['oldest']:
+ disk['oldest'] = value[0]
+
+ portalocker.unlock(locker)
+ locker.close()
+ disk_storage.close()
+
+ total['bytes'] = ram['bytes'] + disk['bytes']
+ total['objects'] = ram['objects'] + disk['objects']
+ total['hits'] = ram['hits'] + disk['hits']
+ total['misses'] = ram['misses'] + disk['misses']
+ try:
+ total['ratio'] = total['hits'] * 100 / (total['hits'] + total['misses'])
+ except (KeyError, ZeroDivisionError):
+ total['ratio'] = 0
+
+ if disk['oldest'] < ram['oldest']:
+ total['oldest'] = disk['oldest']
+ else:
+ total['oldest'] = ram['oldest']
+
+ def GetInHMS(seconds):
+ hours = math.floor(seconds / 3600)
+ seconds -= hours * 3600
+ minutes = math.floor(seconds / 60)
+ seconds -= minutes * 60
+ seconds = math.floor(seconds)
+
+ return (hours, minutes, seconds)
+
+ ram['oldest'] = GetInHMS(time.time() - ram['oldest'])
+ disk['oldest'] = GetInHMS(time.time() - disk['oldest'])
+ total['oldest'] = GetInHMS(time.time() - total['oldest'])
+
+ return dict(form=form, total=total,
+ ram=ram, disk=disk)
+
diff --git a/controllers/default.py b/controllers/default.py
new file mode 100644
index 0000000..d9f9a6d
--- /dev/null
+++ b/controllers/default.py
@@ -0,0 +1,120 @@
+import os
+
+def sort_by_views(L):
+ if len(L) <= 1: return L
+ return sort_by_views( [ lt for lt in L[1:] if lt.views < L[0].views ] ) + [ L[0] ] + sort_by_views( [ ge for ge in L[1:] if ge.views >= L[0].views ] )
+
+def sort_by_id(L):
+ if len(L) <= 1: return L
+ return sort_by_id( [ lt for lt in L[1:] if lt.id < L[0].id ] ) + [ L[0] ] + sort_by_id( [ ge for ge in L[1:] if ge.id >= L[0].id ] )
+
+def index():
+ sorts = ["newest", "views"]
+ if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1
+ else: page = 0
+ if "sort" in request.vars.keys(): sort = request.vars["sort"]
+ else: sort = 'newest'
+ if sort not in sorts:
+ sort = "newest"
+ if "profile" in request.vars.keys(): profile = request.vars["profile"]
+ else: profile = None
+ table = []
+ raw_images = db().select(db.image.ALL)
+ i = 0
+ row = []
+ count = 0
+ images = []
+ for image in raw_images:
+ if profile != None:
+ if image.creator == profile:
+ images.append(image)
+ else: images.append(image)
+ if sort == 'views':
+ #images = sort_by_views(images)
+ images.reverse()
+ if sort == 'newest':
+ images.sort(cmp=lambda x,y:cmp(x.id,y.id))
+ images.reverse()
+ for image in images:
+ if count >= page * 12 and page*12+12 > count:
+ if i == 4:
+ table.append(row)
+ row = []
+ i = 0
+ i += 1
+ row.append(image)
+ count += 1
+ table.append(row)
+ pages = count / 12
+ if count%12 > 0: pages += 1
+ page += 1
+ return dict(images=table, pages=pages, page=page, sort=sort, profile=profile)
+
+def upload():
+ form = SQLFORM(db.image, fields = ['title', 'file', 'newimage', 'description'])
+ if form.accepts(request.vars, session):
+ session.new_image_title = form.vars.title
+ db(db.image.title==session.new_image_title).update(creator = auth.user.username)
+ db(db.image.title==session.new_image_title).update(views = 0)
+ redirect(URL(r=request, f='index'))
+ return dict(form=form)
+
+"""@service.xmlrpc
+def upload_remote(username,password,image,ta_file,title,description):
+ logged_in = auth.login_bare(username,password)
+ if logged_in:
+ db.image.insert(file=ta_file,
+ image=image,
+ title=title,
+ description=description,
+ creator=auth.user.username,
+ views=0)"""
+
+
+
+def image():
+ images = db().select(db.image.ALL)
+ image_id = int(request.vars["image"])
+ for image in images:
+ if image.id == image_id:
+ real_image = image
+ title=real_image.title
+ if real_image == None:
+ redirect(URL(r=request, f='index'))
+ if auth.is_logged_in():
+ if auth.user.username != real_image.creator:
+ views = int(real_image.views) + 1
+ db(db.image.title==real_image.title).update(views = views)
+ form = SQLFORM(db.comment, fields = ['body'])
+ if form.accepts(request.vars, session):
+ db(db.comment.id==form.vars.id).update(author = auth.user.username)
+ db(db.comment.id==form.vars.id).update(image_id = real_image.id)
+ comments=db().select(db.comment.ALL)
+ image_comments = []
+ for comment in comments:
+ if comment.image_id == real_image.id:
+ image_comments.append(comment)
+ return dict(image = real_image, form= form,comments=image_comments)
+
+
+def testimage():
+ return db(db.image.title=="hellotest")
+
+def user():
+ return dict(form=auth())
+
+def delete():
+ images = db().select(db.image.ALL)
+ image_id = int(request.vars["id"])
+ for image in images:
+ if image.id == image_id:
+ real_image = image
+ if auth.is_logged_in():
+ if auth.user.username == real_image.creator:
+ query=(db.image.id==real_image.id)
+ db(query).delete()
+ redirect(URL(r=request, f='index'))
+
+
+def download():
+ return response.download(request, db)
diff --git a/controllers/default.py.1 b/controllers/default.py.1
new file mode 100644
index 0000000..dd10347
--- /dev/null
+++ b/controllers/default.py.1
@@ -0,0 +1,36 @@
+import os
+
+def index():
+ if len(request.args):
+ records = db(db.comment.image_id==request.args[0]).select()
+ if len(request.args) and len(records):
+ form = SQLFORM(db.comment, records[0], deletable=True)
+ else:
+ form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])
+ if form.accepts(request.vars, session):
+ response.flash = 'form accepted'
+ session.file = form.vars.file
+ redirect(URL(r=request, f='jamiesprogram'))
+ elif form.errors:
+ response.flash = 'form has errors'
+ return dict(form=form)
+
+def jamiesprogram():
+ images = db().select(db.comment.ALL)
+ for row in images:
+ db.comment.insert(file=os.system('python applications/turtle_art_images/modules/PngGenerator.py '+URL(request.application,'default','download',args=row.file)))
+ return dict()
+
+def imagelist():
+ comments = db().select(db.comment.ALL)
+ return dict(comments=comments)
+
+def adminpage():
+ db.comment.truncate()
+ redirect('index.html')
+
+def imagetemplate():
+ return dict()
+
+def download():
+ return response.download(request, db)
diff --git a/controllers/default.py.bak b/controllers/default.py.bak
new file mode 100644
index 0000000..d843133
--- /dev/null
+++ b/controllers/default.py.bak
@@ -0,0 +1,30 @@
+import os
+
+def index():
+ form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])
+ if form.accepts(request.vars, session):
+ session.new_image = form.vars.file
+ session.new_image_title = form.vars.title
+ redirect(URL(r=request, f='jamiesprogram'))
+ return dict(form=form)
+
+def jamiesprogram():
+ file_name_length = len(session.new_image)
+ os.system('python applications/turtle_art_images/modules/PngGenerator.py applications/turtle_art_images/uploads/'+session.new_image)
+ db(db.comment.title==session.new_image_title).update(newimage ='applications/turtle_art_images/uplodates/%s.png' % session.new_image[:-3])
+ redirect(URL(r=request, f='imagelist'))
+ return dict()
+
+def imagelist():
+ comments = db().select(db.comment.ALL)
+ return dict(comments=comments)
+
+def adminpage():
+ db.comment.truncate()
+ redirect('index.html')
+
+def imagetemplate():
+ return dict()
+
+def download():
+ return response.download(request, db)
diff --git a/cron/crontab b/cron/crontab
new file mode 100644
index 0000000..6ab4ea8
--- /dev/null
+++ b/cron/crontab
@@ -0,0 +1 @@
+#crontab \ No newline at end of file
diff --git a/databases/fb87181b96a99be45f5a23f4277867ce_auth_event.table b/databases/fb87181b96a99be45f5a23f4277867ce_auth_event.table
new file mode 100644
index 0000000..4e39a3a
--- /dev/null
+++ b/databases/fb87181b96a99be45f5a23f4277867ce_auth_event.table
@@ -0,0 +1,26 @@
+(dp1
+S'origin'
+p2
+S'CHAR(512)'
+p3
+sS'client_ip'
+p4
+S'CHAR(512)'
+p5
+sS'user_id'
+p6
+S'REFERENCES auth_user(id) ON DELETE CASCADE'
+p7
+sS'description'
+p8
+S'TEXT'
+p9
+sS'time_stamp'
+p10
+S'TIMESTAMP'
+p11
+sS'id'
+p12
+S'INTEGER PRIMARY KEY AUTOINCREMENT'
+p13
+s. \ No newline at end of file
diff --git a/databases/fb87181b96a99be45f5a23f4277867ce_auth_group.table b/databases/fb87181b96a99be45f5a23f4277867ce_auth_group.table
new file mode 100644
index 0000000..d0f448f
--- /dev/null
+++ b/databases/fb87181b96a99be45f5a23f4277867ce_auth_group.table
@@ -0,0 +1,14 @@
+(dp1
+S'role'
+p2
+S'CHAR(512)'
+p3
+sS'id'
+p4
+S'INTEGER PRIMARY KEY AUTOINCREMENT'
+p5
+sS'description'
+p6
+S'TEXT'
+p7
+s. \ No newline at end of file
diff --git a/databases/fb87181b96a99be45f5a23f4277867ce_auth_membership.table b/databases/fb87181b96a99be45f5a23f4277867ce_auth_membership.table
new file mode 100644
index 0000000..c7ebb10
--- /dev/null
+++ b/databases/fb87181b96a99be45f5a23f4277867ce_auth_membership.table
@@ -0,0 +1,14 @@
+(dp1
+S'group_id'
+p2
+S'REFERENCES auth_group(id) ON DELETE CASCADE'
+p3
+sS'user_id'
+p4
+S'REFERENCES auth_user(id) ON DELETE CASCADE'
+p5
+sS'id'
+p6
+S'INTEGER PRIMARY KEY AUTOINCREMENT'
+p7
+s. \ No newline at end of file
diff --git a/databases/fb87181b96a99be45f5a23f4277867ce_auth_permission.table b/databases/fb87181b96a99be45f5a23f4277867ce_auth_permission.table
new file mode 100644
index 0000000..c9791b0
--- /dev/null
+++ b/databases/fb87181b96a99be45f5a23f4277867ce_auth_permission.table
@@ -0,0 +1,22 @@
+(dp1
+S'record_id'
+p2
+S'INTEGER'
+p3
+sS'group_id'
+p4
+S'REFERENCES auth_group(id) ON DELETE CASCADE'
+p5
+sS'table_name'
+p6
+S'CHAR(512)'
+p7
+sS'id'
+p8
+S'INTEGER PRIMARY KEY AUTOINCREMENT'
+p9
+sS'name'
+p10
+S'CHAR(512)'
+p11
+s. \ No newline at end of file
diff --git a/databases/fb87181b96a99be45f5a23f4277867ce_auth_user.table b/databases/fb87181b96a99be45f5a23f4277867ce_auth_user.table
new file mode 100644
index 0000000..a01e993
--- /dev/null
+++ b/databases/fb87181b96a99be45f5a23f4277867ce_auth_user.table
@@ -0,0 +1,22 @@
+(dp1
+S'username'
+p2
+S'CHAR(128) UNIQUE'
+p3
+sS'password'
+p4
+S'CHAR(256)'
+p5
+sS'registration_key'
+p6
+S'CHAR(128)'
+p7
+sS'id'
+p8
+S'INTEGER PRIMARY KEY AUTOINCREMENT'
+p9
+sS'email'
+p10
+S'CHAR(128) UNIQUE'
+p11
+s. \ No newline at end of file
diff --git a/databases/fb87181b96a99be45f5a23f4277867ce_comment.table b/databases/fb87181b96a99be45f5a23f4277867ce_comment.table
new file mode 100644
index 0000000..9ed83e8
--- /dev/null
+++ b/databases/fb87181b96a99be45f5a23f4277867ce_comment.table
@@ -0,0 +1,18 @@
+(dp1
+S'body'
+p2
+S'TEXT'
+p3
+sS'image_id'
+p4
+S'REFERENCES image(id) ON DELETE CASCADE'
+p5
+sS'id'
+p6
+S'INTEGER PRIMARY KEY AUTOINCREMENT'
+p7
+sS'author'
+p8
+S'CHAR(512)'
+p9
+s. \ No newline at end of file
diff --git a/databases/fb87181b96a99be45f5a23f4277867ce_image.table b/databases/fb87181b96a99be45f5a23f4277867ce_image.table
new file mode 100644
index 0000000..07353ec
--- /dev/null
+++ b/databases/fb87181b96a99be45f5a23f4277867ce_image.table
@@ -0,0 +1,34 @@
+(dp1
+S'description'
+p2
+S'TEXT'
+p3
+sS'creator'
+p4
+S'CHAR(512)'
+p5
+sS'views'
+p6
+S'CHAR(512)'
+p7
+sS'title'
+p8
+S'CHAR(512)'
+p9
+sS'image_id'
+p10
+S'CHAR(512)'
+p11
+sS'file'
+p12
+S'CHAR(512)'
+p13
+sS'newimage'
+p14
+S'CHAR(512)'
+p15
+sS'id'
+p16
+S'INTEGER PRIMARY KEY AUTOINCREMENT'
+p17
+s. \ No newline at end of file
diff --git a/databases/sql.log b/databases/sql.log
new file mode 100644
index 0000000..7a8e599
--- /dev/null
+++ b/databases/sql.log
@@ -0,0 +1,62 @@
+timestamp: 2010-07-08T16:17:34.182357
+CREATE TABLE image(
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
+ file CHAR(512),
+ title CHAR(512),
+ image_id CHAR(512),
+ creator CHAR(512),
+ description TEXT,
+ views CHAR(512),
+ newimage CHAR(512)
+);
+success!
+timestamp: 2010-07-08T16:17:34.305771
+CREATE TABLE comment(
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
+ image_id REFERENCES image(id) ON DELETE CASCADE,
+ author CHAR(512),
+ body TEXT
+);
+success!
+timestamp: 2010-07-08T16:17:34.388196
+CREATE TABLE auth_user(
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
+ username CHAR(128) UNIQUE,
+ email CHAR(128) UNIQUE,
+ password CHAR(256),
+ registration_key CHAR(128)
+);
+success!
+timestamp: 2010-07-08T16:17:34.496921
+CREATE TABLE auth_group(
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
+ role CHAR(512),
+ description TEXT
+);
+success!
+timestamp: 2010-07-08T16:17:34.600049
+CREATE TABLE auth_membership(
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
+ user_id REFERENCES auth_user(id) ON DELETE CASCADE,
+ group_id REFERENCES auth_group(id) ON DELETE CASCADE
+);
+success!
+timestamp: 2010-07-08T16:17:34.678659
+CREATE TABLE auth_permission(
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
+ group_id REFERENCES auth_group(id) ON DELETE CASCADE,
+ name CHAR(512),
+ table_name CHAR(512),
+ record_id INTEGER
+);
+success!
+timestamp: 2010-07-08T16:17:34.767754
+CREATE TABLE auth_event(
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
+ time_stamp TIMESTAMP,
+ client_ip CHAR(512),
+ user_id REFERENCES auth_user(id) ON DELETE CASCADE,
+ origin CHAR(512),
+ description TEXT
+);
+success!
diff --git a/databases/storage.db b/databases/storage.db
new file mode 100644
index 0000000..c84e34a
--- /dev/null
+++ b/databases/storage.db
Binary files differ
diff --git a/errors/127.0.0.1.2010-06-08.10-29-30.a9dded01-6c75-4d19-9761-5e346879dac4 b/errors/127.0.0.1.2010-06-08.10-29-30.a9dded01-6c75-4d19-9761-5e346879dac4
new file mode 100644
index 0000000..605a19a
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-08.10-29-30.a9dded01-6c75-4d19-9761-5e346879dac4
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\ndef index():\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True, linkto=URL(r=request, f='submitted')\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'], linkto=URL(r=request, f='submitted')\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 8\n else:\n ^\nSyntaxError: invalid syntax\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-08.10-30-57.0df069ba-69cd-4836-b262-d857b1071262 b/errors/127.0.0.1.2010-06-08.10-30-57.0df069ba-69cd-4836-b262-d857b1071262
new file mode 100644
index 0000000..59b0a83
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-08.10-30-57.0df069ba-69cd-4836-b262-d857b1071262
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/views/default/jamiesprogram.html'
+p4
+sS'code'
+p5
+S'response.write(\'<html>\\n <link rel="stylesheet" href="../static/glike.css" type="text/css" />\\n <head>\\n <title>Turtle Art Image Database</title>\\n </head>\\n <body>\\n <div id="header">\\n <h1><a href="index.html" >Home</a></h1>\\n <ul>\\n <li><a href="imagelist.html" >Images</a></li>\\n <li><a href="jamiesprogram.html">JamiesProgram</a></li>\\n <li><a href="adminpage.html" >Clear All</a></li>\\n </ul>\\n </div>\\n <div id=\\\'bodycontent\\\'>\\n \\n\',escape=False)\nresponse.write(form)\nresponse.write(\'\\n\\n </div>\\n </body>\\n </style>\\n</html>\\n\',escape=False)'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/views/default/jamiesprogram.html", line 2, in <module>\n {{=form}}\nNameError: name \'form\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-08.10-48-56.81e53335-045e-467e-a12d-293847e8a598 b/errors/127.0.0.1.2010-06-08.10-48-56.81e53335-045e-467e-a12d-293847e8a598
new file mode 100644
index 0000000..ba65087
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-08.10-48-56.81e53335-045e-467e-a12d-293847e8a598
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/models/db.py'
+p4
+sS'code'
+p5
+S'db = DAL("sqlite://storage.db")\n\ndb.define_table(\'comment\',\n Field(\'file\', \'upload\', requires=IS_NOT_EMPTY(), IS_UPLOAD_FILENAME(extension=\'ta\')),\n Field(\'title\', requires=[IS_NOT_EMPTY(), IS_NOT_IN_DB(db, \'comment.title\')]),\n Field(\'image_id\'),\n Field(\'creator\', requires=IS_NOT_EMPTY()),\n Field(\'description\', \'text\'))\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/models/db.py", line 4\n Field(\'file\', \'upload\', requires=IS_NOT_EMPTY(), IS_UPLOAD_FILENAME(extension=\'ta\')),\nSyntaxError: non-keyword arg after keyword arg\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-08.11-22-35.7f7de9ca-aa01-4bcc-b220-19645284efab b/errors/127.0.0.1.2010-06-08.11-22-35.7f7de9ca-aa01-4bcc-b220-19645284efab
new file mode 100644
index 0000000..da99f8e
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-08.11-22-35.7f7de9ca-aa01-4bcc-b220-19645284efab
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\ndef index():\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True, linkto=URL(r=request, f='jamiesprogram'))\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'], linkto=URL(r=request, f='jamiesprogram'))\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n os.system('python PngGenerator ' + db.comment.file)\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(jamiesprogram)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 34, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 17, in jamiesprogram\n os.system(\'python PngGenerator \' + db.comment.file)\nTypeError: cannot concatenate \'str\' and \'Field\' objects\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-08.11-28-40.04741190-0b12-44e0-b35a-3a90d45bf99d b/errors/127.0.0.1.2010-06-08.11-28-40.04741190-0b12-44e0-b35a-3a90d45bf99d
new file mode 100644
index 0000000..6d413aa
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-08.11-28-40.04741190-0b12-44e0-b35a-3a90d45bf99d
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\ndef index():\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True, linkto=URL(r=request, f='jamiesprogram'))\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'], linkto=URL(r=request, f='jamiesprogram'))\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n os.system('python PngGenerator URL(request.application,'default','download',args=db.comment.title'))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(jamiesprogram)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 17\n os.system(\'python PngGenerator URL(request.application,\'default\',\'download\',args=db.comment.title\'))\n ^\nSyntaxError: invalid syntax\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-08.11-29-11.c5b311da-e66b-462d-a2e0-c93d522b4d54 b/errors/127.0.0.1.2010-06-08.11-29-11.c5b311da-e66b-462d-a2e0-c93d522b4d54
new file mode 100644
index 0000000..2bdeaa2
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-08.11-29-11.c5b311da-e66b-462d-a2e0-c93d522b4d54
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\ndef index():\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True, linkto=URL(r=request, f='jamiesprogram'))\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'], linkto=URL(r=request, f='jamiesprogram'))\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n os.system('python PngGenerator ' + URL(request.application,'default','download',args=db.comment.title'))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(jamiesprogram)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 17\n os.system(\'python PngGenerator \' + URL(request.application,\'default\',\'download\',args=db.comment.title\'))\n ^\nSyntaxError: EOL while scanning string literal\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-08.11-37-10.e61d028b-9f3b-4663-890c-0fd6f63402b1 b/errors/127.0.0.1.2010-06-08.11-37-10.e61d028b-9f3b-4663-890c-0fd6f63402b1
new file mode 100644
index 0000000..bec9a01
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-08.11-37-10.e61d028b-9f3b-4663-890c-0fd6f63402b1
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\ndef index():\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True, linkto=URL(r=request, f='jamiesprogram'))\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'], linkto=URL(r=request, f='jamiesprogram'))\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n os.system('python PngGenerator ' + URL(request.application,'default','download',args=db.comment.title))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n remove(applications.turtle_art_image.uploads)\n mkdir(applications.turtle_art_image.uploads)\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(adminpage)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 36, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 26, in adminpage\n remove(applications.turtle_art_image.uploads)\nNameError: global name \'remove\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-08.11-38-54.6768324a-18a4-48f1-a02f-5c8e9f6e2ffa b/errors/127.0.0.1.2010-06-08.11-38-54.6768324a-18a4-48f1-a02f-5c8e9f6e2ffa
new file mode 100644
index 0000000..41d22c6
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-08.11-38-54.6768324a-18a4-48f1-a02f-5c8e9f6e2ffa
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\ndef index():\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True, linkto=URL(r=request, f='jamiesprogram'))\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'], linkto=URL(r=request, f='jamiesprogram'))\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n os.system('python PngGenerator ' + URL(request.application,'default','download',args=db.comment.title))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n os.remove(applications.turtle_art_image.uploads)\n os.mkdir(applications.turtle_art_image.uploads)\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(adminpage)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 36, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 26, in adminpage\n os.remove(applications.turtle_art_image.uploads)\nNameError: global name \'applications\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-08.11-42-41.d4d22c6d-150e-440c-a8b7-51dcf0e3cb24 b/errors/127.0.0.1.2010-06-08.11-42-41.d4d22c6d-150e-440c-a8b7-51dcf0e3cb24
new file mode 100644
index 0000000..78a899d
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-08.11-42-41.d4d22c6d-150e-440c-a8b7-51dcf0e3cb24
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\ndef index():\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True, linkto=URL(r=request, f='jamiesprogram'))\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'], linkto=URL(r=request, f='jamiesprogram'))\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n os.system('python PngGenerator ' + URL(request.application,'default','download',args=db.comment.title))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n os.remove(../uploads)\n os.mkdir(/uploads)\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 26\n os.remove(../uploads)\n ^\nSyntaxError: invalid syntax\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-08.11-42-58.4c2324a1-10fe-40e4-859c-783d9aceeaf5 b/errors/127.0.0.1.2010-06-08.11-42-58.4c2324a1-10fe-40e4-859c-783d9aceeaf5
new file mode 100644
index 0000000..104f33c
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-08.11-42-58.4c2324a1-10fe-40e4-859c-783d9aceeaf5
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\ndef index():\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True, linkto=URL(r=request, f='jamiesprogram'))\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'], linkto=URL(r=request, f='jamiesprogram'))\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n os.system('python PngGenerator ' + URL(request.application,'default','download',args=db.comment.title))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n os.remove(/../uploads)\n os.mkdir(/uploads)\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 26\n os.remove(/../uploads)\n ^\nSyntaxError: invalid syntax\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-08.12-10-33.378c03b1-be2d-4d54-8e03-7edec5219851 b/errors/127.0.0.1.2010-06-08.12-10-33.378c03b1-be2d-4d54-8e03-7edec5219851
new file mode 100644
index 0000000..533d3dd
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-08.12-10-33.378c03b1-be2d-4d54-8e03-7edec5219851
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/views/default/index.html'
+p4
+sS'code'
+p5
+S'response.write(\'<html>\\n <link rel="stylesheet" href="../static/glike.css" type="text/css" />\\n <head>\\n <title>Turtle Art Image Database</title>\\n </head>\\n <body>\\n <div id="header">\\n <h1><a href="index.html" >Home</a></h1>\\n <ul>\\n <li><a href="imagelist.html" >Images</a></li>\\n <li><a href="jamiesprogram.html">JamiesProgram</a></li>\\n <li><a href="adminpage.html" >Clear All</a></li>\\n </ul>\\n </div>\\n <div id=\\\'bodycontent\\\'>\\n \\n<form action="jamiesprogram">\\n\',escape=False)\nresponse.write(form)\nresponse.write(\'\\n</form>\\n\\n </div>\\n </body>\\n </style>\\n</html>\\n\',escape=False)'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/views/default/index.html", line 2, in <module>\n <form action="jamiesprogram">\nNameError: name \'form\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-08.12-18-45.0ea0d17c-5fac-4a31-944d-39b71dce7cd6 b/errors/127.0.0.1.2010-06-08.12-18-45.0ea0d17c-5fac-4a31-944d-39b71dce7cd6
new file mode 100644
index 0000000..bb6a74e
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-08.12-18-45.0ea0d17c-5fac-4a31-944d-39b71dce7cd6
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\ndef index():\n form = SQLFORM(db.comment, \n return dict()\n\ndef submit():\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(submit)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 5\n return dict()\n ^\nSyntaxError: invalid syntax\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-08.12-39-37.69eebaf7-05e8-4972-a066-978858eae420 b/errors/127.0.0.1.2010-06-08.12-39-37.69eebaf7-05e8-4972-a066-978858eae420
new file mode 100644
index 0000000..e89a07d
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-08.12-39-37.69eebaf7-05e8-4972-a066-978858eae420
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\ndef index():\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n os.system('python PngGenerator '+form.vars.file)\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(jamiesprogram)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 34, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 17, in jamiesprogram\n os.system(\'python PngGenerator \'+form.vars.file)\nNameError: global name \'form\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-08.13-19-46.0608226e-8fe4-4648-8243-979753e1906e b/errors/127.0.0.1.2010-06-08.13-19-46.0608226e-8fe4-4648-8243-979753e1906e
new file mode 100644
index 0000000..e89a07d
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-08.13-19-46.0608226e-8fe4-4648-8243-979753e1906e
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\ndef index():\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n os.system('python PngGenerator '+form.vars.file)\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(jamiesprogram)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 34, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 17, in jamiesprogram\n os.system(\'python PngGenerator \'+form.vars.file)\nNameError: global name \'form\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-08.13-21-08.684ba333-a4e9-4d32-9862-ad634800041a b/errors/127.0.0.1.2010-06-08.13-21-08.684ba333-a4e9-4d32-9862-ad634800041a
new file mode 100644
index 0000000..e865b29
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-08.13-21-08.684ba333-a4e9-4d32-9862-ad634800041a
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\ndef index():\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n session.image_file = form.vars.file\n os.system('python PngGenerator '+session.image_file)\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(jamiesprogram)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 35, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 17, in jamiesprogram\n session.image_file = form.vars.file\nNameError: global name \'form\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-08.13-41-00.b4927283-c878-4114-931b-c76a4b8ac828 b/errors/127.0.0.1.2010-06-08.13-41-00.b4927283-c878-4114-931b-c76a4b8ac828
new file mode 100644
index 0000000..e865b29
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-08.13-41-00.b4927283-c878-4114-931b-c76a4b8ac828
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\ndef index():\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n session.image_file = form.vars.file\n os.system('python PngGenerator '+session.image_file)\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(jamiesprogram)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 35, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 17, in jamiesprogram\n session.image_file = form.vars.file\nNameError: global name \'form\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-08.13-46-53.0715089b-3ec0-48dc-89c2-c2dd55033836 b/errors/127.0.0.1.2010-06-08.13-46-53.0715089b-3ec0-48dc-89c2-c2dd55033836
new file mode 100644
index 0000000..e865b29
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-08.13-46-53.0715089b-3ec0-48dc-89c2-c2dd55033836
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\ndef index():\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n session.image_file = form.vars.file\n os.system('python PngGenerator '+session.image_file)\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(jamiesprogram)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 35, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 17, in jamiesprogram\n session.image_file = form.vars.file\nNameError: global name \'form\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-08.14-01-13.44e230ac-6a33-4cbe-9048-629acfb4407a b/errors/127.0.0.1.2010-06-08.14-01-13.44e230ac-6a33-4cbe-9048-629acfb4407a
new file mode 100644
index 0000000..e865b29
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-08.14-01-13.44e230ac-6a33-4cbe-9048-629acfb4407a
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\ndef index():\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n session.image_file = form.vars.file\n os.system('python PngGenerator '+session.image_file)\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(jamiesprogram)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 35, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 17, in jamiesprogram\n session.image_file = form.vars.file\nNameError: global name \'form\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-08.14-38-37.9c9a0779-9984-48c3-a397-42363f2107c6 b/errors/127.0.0.1.2010-06-08.14-38-37.9c9a0779-9984-48c3-a397-42363f2107c6
new file mode 100644
index 0000000..38a5403
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-08.14-38-37.9c9a0779-9984-48c3-a397-42363f2107c6
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\nsession.converting = False\n\ndef index():\n if session.converting == True:\n redirect('jamiesprogram.html')\n else:\n session.converting = True\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n os.system('python PngGenerator +'URL(request.application,'default','download',args=row.file)\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 23\n os.system(\'python PngGenerator +\'URL(request.application,\'default\',\'download\',args=row.file)\n ^\nSyntaxError: invalid syntax\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-08.14-39-04.18bd17ab-b51e-4246-9216-a0bde332a660 b/errors/127.0.0.1.2010-06-08.14-39-04.18bd17ab-b51e-4246-9216-a0bde332a660
new file mode 100644
index 0000000..e463b46
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-08.14-39-04.18bd17ab-b51e-4246-9216-a0bde332a660
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\nsession.converting = False\n\ndef index():\n if session.converting == True:\n redirect('jamiesprogram.html')\n else:\n session.converting = True\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n os.system('python PngGenerator '+URL(request.application,'default','download',args=row.file)\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 24\n return dict()\n ^\nSyntaxError: invalid syntax\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-08.14-39-34.bf860900-564c-476e-8324-3bb546251a85 b/errors/127.0.0.1.2010-06-08.14-39-34.bf860900-564c-476e-8324-3bb546251a85
new file mode 100644
index 0000000..5f37a7e
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-08.14-39-34.bf860900-564c-476e-8324-3bb546251a85
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\nsession.converting = False\n\ndef index():\n if session.converting == True:\n redirect('jamiesprogram.html')\n else:\n session.converting = True\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n os.system('python PngGenerator '+URL(request.application,'default','download',args=row.file))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(jamiesprogram)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 40, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 23, in jamiesprogram\n os.system(\'python PngGenerator \'+URL(request.application,\'default\',\'download\',args=row.file))\nNameError: global name \'row\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-08.14-40-08.6c1d47a6-7ece-40ac-8d1e-4dce7531e85a b/errors/127.0.0.1.2010-06-08.14-40-08.6c1d47a6-7ece-40ac-8d1e-4dce7531e85a
new file mode 100644
index 0000000..a0a0aba
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-08.14-40-08.6c1d47a6-7ece-40ac-8d1e-4dce7531e85a
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\nsession.converting = False\n\ndef index():\n if session.converting == True:\n redirect('jamiesprogram.html')\n else:\n session.converting = True\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n os.system('python PngGenerator '+URL(request.application,'default','download',args=comment.file))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(jamiesprogram)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 40, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 23, in jamiesprogram\n os.system(\'python PngGenerator \'+URL(request.application,\'default\',\'download\',args=comment.file))\nNameError: global name \'comment\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-08.14-52-32.17d9ae99-22fc-493e-a070-d8ab68d2e1b4 b/errors/127.0.0.1.2010-06-08.14-52-32.17d9ae99-22fc-493e-a070-d8ab68d2e1b4
new file mode 100644
index 0000000..417e1c3
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-08.14-52-32.17d9ae99-22fc-493e-a070-d8ab68d2e1b4
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\nsession.converting = False\n\ndef index():\n if session.converting == True:\n redirect('jamiesprogram.html')\n else:\n session.converting = True\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(download)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 40, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 38, in download\n return response.download(request, db)\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 195, in download\n (filename, stream) = field.retrieve(name)\n File "/home/acrowe/lib/python/web2py/gluon/sql.py", line 2731, in retrieve\n return (filename, open(os.path.join(path, name), \'rb\'))\nIOError: [Errno 2] No such file or directory: \'/home/acrowe/lib/python/web2py/applications/turtle_art_images/databases/../uploads/comment.file.a0770985fc7c7edf.747572746c65617274746573742e7461.ta\'\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-08.14-52-32.4829b99b-c00c-4f95-b5fb-749e352eac5d b/errors/127.0.0.1.2010-06-08.14-52-32.4829b99b-c00c-4f95-b5fb-749e352eac5d
new file mode 100644
index 0000000..6f72779
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-08.14-52-32.4829b99b-c00c-4f95-b5fb-749e352eac5d
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\nsession.converting = False\n\ndef index():\n if session.converting == True:\n redirect('jamiesprogram.html')\n else:\n session.converting = True\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(download)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 40, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 38, in download\n return response.download(request, db)\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 195, in download\n (filename, stream) = field.retrieve(name)\n File "/home/acrowe/lib/python/web2py/gluon/sql.py", line 2731, in retrieve\n return (filename, open(os.path.join(path, name), \'rb\'))\nIOError: [Errno 2] No such file or directory: \'/home/acrowe/lib/python/web2py/applications/turtle_art_images/databases/../uploads/comment.file.a2808727c73b30b8.747572746c65617274746573742e7461.ta\'\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-08.14-52-32.7e58f9bb-af77-4293-ac31-7360885d12c2 b/errors/127.0.0.1.2010-06-08.14-52-32.7e58f9bb-af77-4293-ac31-7360885d12c2
new file mode 100644
index 0000000..ffaa5a6
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-08.14-52-32.7e58f9bb-af77-4293-ac31-7360885d12c2
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\nsession.converting = False\n\ndef index():\n if session.converting == True:\n redirect('jamiesprogram.html')\n else:\n session.converting = True\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(download)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 40, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 38, in download\n return response.download(request, db)\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 195, in download\n (filename, stream) = field.retrieve(name)\n File "/home/acrowe/lib/python/web2py/gluon/sql.py", line 2731, in retrieve\n return (filename, open(os.path.join(path, name), \'rb\'))\nIOError: [Errno 2] No such file or directory: \'/home/acrowe/lib/python/web2py/applications/turtle_art_images/databases/../uploads/comment.file.af4e1bfe942c4acc.747572746c65617274746573742e7461.ta\'\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-08.14-52-32.fbbfe1e5-7294-434b-8780-13fc5708da62 b/errors/127.0.0.1.2010-06-08.14-52-32.fbbfe1e5-7294-434b-8780-13fc5708da62
new file mode 100644
index 0000000..500ed0d
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-08.14-52-32.fbbfe1e5-7294-434b-8780-13fc5708da62
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\nsession.converting = False\n\ndef index():\n if session.converting == True:\n redirect('jamiesprogram.html')\n else:\n session.converting = True\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(download)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 40, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 38, in download\n return response.download(request, db)\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 195, in download\n (filename, stream) = field.retrieve(name)\n File "/home/acrowe/lib/python/web2py/gluon/sql.py", line 2731, in retrieve\n return (filename, open(os.path.join(path, name), \'rb\'))\nIOError: [Errno 2] No such file or directory: \'/home/acrowe/lib/python/web2py/applications/turtle_art_images/databases/../uploads/comment.file.9d827481c4bcf49c.747572746c65617274746573742e7461.ta\'\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-08.14-54-09.32b1c1bc-bd65-4eb5-a177-f19d418bb393 b/errors/127.0.0.1.2010-06-08.14-54-09.32b1c1bc-bd65-4eb5-a177-f19d418bb393
new file mode 100644
index 0000000..0478526
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-08.14-54-09.32b1c1bc-bd65-4eb5-a177-f19d418bb393
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\nsession.converting = False\n\ndef index():\n if session.converting == True:\n redirect('jamiesprogram.html')\n else:\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n session.converting = True\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(download)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 41, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 39, in download\n return response.download(request, db)\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 195, in download\n (filename, stream) = field.retrieve(name)\n File "/home/acrowe/lib/python/web2py/gluon/sql.py", line 2731, in retrieve\n return (filename, open(os.path.join(path, name), \'rb\'))\nIOError: [Errno 2] No such file or directory: \'/home/acrowe/lib/python/web2py/applications/turtle_art_images/databases/../uploads/comment.file.a2808727c73b30b8.747572746c65617274746573742e7461.ta\'\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-08.14-54-09.9693a11a-6863-4021-b6c7-a461052d36d3 b/errors/127.0.0.1.2010-06-08.14-54-09.9693a11a-6863-4021-b6c7-a461052d36d3
new file mode 100644
index 0000000..3afe93f
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-08.14-54-09.9693a11a-6863-4021-b6c7-a461052d36d3
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\nsession.converting = False\n\ndef index():\n if session.converting == True:\n redirect('jamiesprogram.html')\n else:\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n session.converting = True\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(download)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 41, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 39, in download\n return response.download(request, db)\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 195, in download\n (filename, stream) = field.retrieve(name)\n File "/home/acrowe/lib/python/web2py/gluon/sql.py", line 2731, in retrieve\n return (filename, open(os.path.join(path, name), \'rb\'))\nIOError: [Errno 2] No such file or directory: \'/home/acrowe/lib/python/web2py/applications/turtle_art_images/databases/../uploads/comment.file.af4e1bfe942c4acc.747572746c65617274746573742e7461.ta\'\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-08.14-54-09.b1346402-5514-4402-ac35-9bdc86f69f9a b/errors/127.0.0.1.2010-06-08.14-54-09.b1346402-5514-4402-ac35-9bdc86f69f9a
new file mode 100644
index 0000000..b0424f8
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-08.14-54-09.b1346402-5514-4402-ac35-9bdc86f69f9a
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\nsession.converting = False\n\ndef index():\n if session.converting == True:\n redirect('jamiesprogram.html')\n else:\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n session.converting = True\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(download)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 41, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 39, in download\n return response.download(request, db)\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 195, in download\n (filename, stream) = field.retrieve(name)\n File "/home/acrowe/lib/python/web2py/gluon/sql.py", line 2731, in retrieve\n return (filename, open(os.path.join(path, name), \'rb\'))\nIOError: [Errno 2] No such file or directory: \'/home/acrowe/lib/python/web2py/applications/turtle_art_images/databases/../uploads/comment.file.a0770985fc7c7edf.747572746c65617274746573742e7461.ta\'\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-08.14-54-09.fc7cfcd7-8422-4ddf-9a41-4729502c16c6 b/errors/127.0.0.1.2010-06-08.14-54-09.fc7cfcd7-8422-4ddf-9a41-4729502c16c6
new file mode 100644
index 0000000..e9099b0
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-08.14-54-09.fc7cfcd7-8422-4ddf-9a41-4729502c16c6
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\nsession.converting = False\n\ndef index():\n if session.converting == True:\n redirect('jamiesprogram.html')\n else:\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n session.converting = True\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(download)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 41, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 39, in download\n return response.download(request, db)\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 195, in download\n (filename, stream) = field.retrieve(name)\n File "/home/acrowe/lib/python/web2py/gluon/sql.py", line 2731, in retrieve\n return (filename, open(os.path.join(path, name), \'rb\'))\nIOError: [Errno 2] No such file or directory: \'/home/acrowe/lib/python/web2py/applications/turtle_art_images/databases/../uploads/comment.file.9d827481c4bcf49c.747572746c65617274746573742e7461.ta\'\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-08.14-54-43.35e8817b-e95f-44f0-b402-0f9f4e80d716 b/errors/127.0.0.1.2010-06-08.14-54-43.35e8817b-e95f-44f0-b402-0f9f4e80d716
new file mode 100644
index 0000000..3afe93f
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-08.14-54-43.35e8817b-e95f-44f0-b402-0f9f4e80d716
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\nsession.converting = False\n\ndef index():\n if session.converting == True:\n redirect('jamiesprogram.html')\n else:\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n session.converting = True\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(download)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 41, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 39, in download\n return response.download(request, db)\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 195, in download\n (filename, stream) = field.retrieve(name)\n File "/home/acrowe/lib/python/web2py/gluon/sql.py", line 2731, in retrieve\n return (filename, open(os.path.join(path, name), \'rb\'))\nIOError: [Errno 2] No such file or directory: \'/home/acrowe/lib/python/web2py/applications/turtle_art_images/databases/../uploads/comment.file.af4e1bfe942c4acc.747572746c65617274746573742e7461.ta\'\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-08.14-54-43.42d59d33-f2e7-4989-9fb8-2db49afc4b4d b/errors/127.0.0.1.2010-06-08.14-54-43.42d59d33-f2e7-4989-9fb8-2db49afc4b4d
new file mode 100644
index 0000000..e9099b0
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-08.14-54-43.42d59d33-f2e7-4989-9fb8-2db49afc4b4d
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\nsession.converting = False\n\ndef index():\n if session.converting == True:\n redirect('jamiesprogram.html')\n else:\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n session.converting = True\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(download)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 41, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 39, in download\n return response.download(request, db)\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 195, in download\n (filename, stream) = field.retrieve(name)\n File "/home/acrowe/lib/python/web2py/gluon/sql.py", line 2731, in retrieve\n return (filename, open(os.path.join(path, name), \'rb\'))\nIOError: [Errno 2] No such file or directory: \'/home/acrowe/lib/python/web2py/applications/turtle_art_images/databases/../uploads/comment.file.9d827481c4bcf49c.747572746c65617274746573742e7461.ta\'\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-08.14-54-43.7889853c-d2a9-4abc-a658-94b9fb62c32f b/errors/127.0.0.1.2010-06-08.14-54-43.7889853c-d2a9-4abc-a658-94b9fb62c32f
new file mode 100644
index 0000000..b0424f8
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-08.14-54-43.7889853c-d2a9-4abc-a658-94b9fb62c32f
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\nsession.converting = False\n\ndef index():\n if session.converting == True:\n redirect('jamiesprogram.html')\n else:\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n session.converting = True\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(download)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 41, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 39, in download\n return response.download(request, db)\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 195, in download\n (filename, stream) = field.retrieve(name)\n File "/home/acrowe/lib/python/web2py/gluon/sql.py", line 2731, in retrieve\n return (filename, open(os.path.join(path, name), \'rb\'))\nIOError: [Errno 2] No such file or directory: \'/home/acrowe/lib/python/web2py/applications/turtle_art_images/databases/../uploads/comment.file.a0770985fc7c7edf.747572746c65617274746573742e7461.ta\'\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-08.14-54-43.dc7a1d48-777d-4fe9-9cea-e9eb4826b322 b/errors/127.0.0.1.2010-06-08.14-54-43.dc7a1d48-777d-4fe9-9cea-e9eb4826b322
new file mode 100644
index 0000000..0478526
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-08.14-54-43.dc7a1d48-777d-4fe9-9cea-e9eb4826b322
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\nsession.converting = False\n\ndef index():\n if session.converting == True:\n redirect('jamiesprogram.html')\n else:\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n session.converting = True\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(download)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 41, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 39, in download\n return response.download(request, db)\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 195, in download\n (filename, stream) = field.retrieve(name)\n File "/home/acrowe/lib/python/web2py/gluon/sql.py", line 2731, in retrieve\n return (filename, open(os.path.join(path, name), \'rb\'))\nIOError: [Errno 2] No such file or directory: \'/home/acrowe/lib/python/web2py/applications/turtle_art_images/databases/../uploads/comment.file.a2808727c73b30b8.747572746c65617274746573742e7461.ta\'\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-09.09-39-19.f1920252-2cc7-4ee4-8bd8-bd86c024f527 b/errors/127.0.0.1.2010-06-09.09-39-19.f1920252-2cc7-4ee4-8bd8-bd86c024f527
new file mode 100644
index 0000000..96e26c1
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-09.09-39-19.f1920252-2cc7-4ee4-8bd8-bd86c024f527
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\nsession.converting = False\n\ndef index():\n if session.converting == True:\n redirect('jamiesprogram.html')\n elif session.converting == False:\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n session.converting = True\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form, session.converting = True)\n else:\n redirect('testpage.html')\n\ndef jamiesprogram():\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 21\n return dict(form=form, session.converting = True)\nSyntaxError: keyword can\'t be an expression\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-09.09-44-11.e4847df3-f891-411e-8531-0c1cd43dc420 b/errors/127.0.0.1.2010-06-09.09-44-11.e4847df3-f891-411e-8531-0c1cd43dc420
new file mode 100644
index 0000000..c6102db
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-09.09-44-11.e4847df3-f891-411e-8531-0c1cd43dc420
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\nsession.converting = False\n\ndef index():\n if session.converting == True:\n redirect('jamiesprogram.html')\n elif session.converting == False:\n for row in newta:\n os.system('python PngGenerator '+URL(request.application,'default','download',args=row.file))\n session.converting = True\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n newta = db().select(db.comment.ALL)\n return dict(form=form, newta=newta)\n else:\n redirect('testpage.html')\n\ndef jamiesprogram():\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 45, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 9, in index\n for row in newta:\nUnboundLocalError: local variable \'newta\' referenced before assignment\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-09.10-57-47.367a5bd2-636b-4bf0-a867-566eded35d93 b/errors/127.0.0.1.2010-06-09.10-57-47.367a5bd2-636b-4bf0-a867-566eded35d93
new file mode 100644
index 0000000..dbbbd79
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-09.10-57-47.367a5bd2-636b-4bf0-a867-566eded35d93
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\nimport applications.turtle_art_images.modules.testmodul\n\nsession.converting = False\n\ndef index():\n if session.converting == True:\n redirect('jamiesprogram.html')\n elif session.converting == False:\n newta = db().select(db.comment.ALL)\n for row in newta:\n os.system('python PngGenerator '+URL(request.application,'default','download',args=row.file))\n session.converting = True\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n newta = db().select(db.comment.ALL)\n return dict(form=form, newta=newta)\n else:\n redirect('testpage.html')\n\ndef jamiesprogram():\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 2, in <module>\n import applications.turtle_art_images.modules.testmodul\nImportError: No module named testmodul\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-09.11-00-01.e8028dc9-ce76-4952-a24f-a329e09025e2 b/errors/127.0.0.1.2010-06-09.11-00-01.e8028dc9-ce76-4952-a24f-a329e09025e2
new file mode 100644
index 0000000..b24d2f0
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-09.11-00-01.e8028dc9-ce76-4952-a24f-a329e09025e2
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\nimport applications.turtle_art_images.modules.PngGenerator\n\nsession.converting = False\n\ndef index():\n PngGenerator.TurtleMain(db.comment.file)\n session.converting = True\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n newta = db().select(db.comment.ALL)\n return dict(form=form, newta=newta)\n else:\n redirect('testpage.html')\n\ndef jamiesprogram():\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 21\n else:\n ^\nIndentationError: unindent does not match any outer indentation level\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-09.11-00-27.cc34298b-82b1-42da-a5b6-9686f7352493 b/errors/127.0.0.1.2010-06-09.11-00-27.cc34298b-82b1-42da-a5b6-9686f7352493
new file mode 100644
index 0000000..0bef9c8
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-09.11-00-27.cc34298b-82b1-42da-a5b6-9686f7352493
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\nimport applications.turtle_art_images.modules.PngGenerator\n\nsession.converting = False\n\ndef index():\n PngGenerator.TurtleMain(db.comment.file)\n session.converting = True\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n newta = db().select(db.comment.ALL)\n return dict(form=form, newta=newta)\n\ndef jamiesprogram():\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 40, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 7, in index\n PngGenerator.TurtleMain(db.comment.file)\nNameError: global name \'PngGenerator\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-09.11-01-59.86cc9dce-a4d0-4d3c-a6e2-d9723ef415cd b/errors/127.0.0.1.2010-06-09.11-01-59.86cc9dce-a4d0-4d3c-a6e2-d9723ef415cd
new file mode 100644
index 0000000..6d5e20b
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-09.11-01-59.86cc9dce-a4d0-4d3c-a6e2-d9723ef415cd
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\nimport applications.turtle_art_images.modules.PngGenerator\n\nsession.converting = False\n\ndef index():\n import applications.turtle_art_images.modules.PngGenerator\n PngGenerator.TurtleMain(db.comment.file)\n session.converting = True\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n newta = db().select(db.comment.ALL)\n return dict(form=form, newta=newta)\n\ndef jamiesprogram():\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 41, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 8, in index\n PngGenerator.TurtleMain(db.comment.file)\nNameError: global name \'PngGenerator\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-09.11-06-55.3799546a-1dff-48ec-a692-463214db9a57 b/errors/127.0.0.1.2010-06-09.11-06-55.3799546a-1dff-48ec-a692-463214db9a57
new file mode 100644
index 0000000..5002877
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-09.11-06-55.3799546a-1dff-48ec-a692-463214db9a57
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\nimport PngGenerator\n\nsession.converting = False\n\ndef index():\n PngGenerator.TurtleMain(db.comment.file)\n session.converting = True\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n newta = db().select(db.comment.ALL)\n return dict(form=form, newta=newta)\n\ndef jamiesprogram():\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 2, in <module>\n import PngGenerator\nImportError: No module named PngGenerator\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-09.11-07-31.e9849899-c980-4b99-978b-7e4f9d1789ae b/errors/127.0.0.1.2010-06-09.11-07-31.e9849899-c980-4b99-978b-7e4f9d1789ae
new file mode 100644
index 0000000..5002877
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-09.11-07-31.e9849899-c980-4b99-978b-7e4f9d1789ae
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\nimport PngGenerator\n\nsession.converting = False\n\ndef index():\n PngGenerator.TurtleMain(db.comment.file)\n session.converting = True\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n newta = db().select(db.comment.ALL)\n return dict(form=form, newta=newta)\n\ndef jamiesprogram():\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 2, in <module>\n import PngGenerator\nImportError: No module named PngGenerator\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-09.11-13-47.7b3410b2-81ca-4139-a61f-bcdd854d8cc9 b/errors/127.0.0.1.2010-06-09.11-13-47.7b3410b2-81ca-4139-a61f-bcdd854d8cc9
new file mode 100644
index 0000000..0bef9c8
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-09.11-13-47.7b3410b2-81ca-4139-a61f-bcdd854d8cc9
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\nimport applications.turtle_art_images.modules.PngGenerator\n\nsession.converting = False\n\ndef index():\n PngGenerator.TurtleMain(db.comment.file)\n session.converting = True\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n newta = db().select(db.comment.ALL)\n return dict(form=form, newta=newta)\n\ndef jamiesprogram():\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 40, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 7, in index\n PngGenerator.TurtleMain(db.comment.file)\nNameError: global name \'PngGenerator\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-09.11-18-17.022ce195-a519-4702-a51a-319bffbefe5d b/errors/127.0.0.1.2010-06-09.11-18-17.022ce195-a519-4702-a51a-319bffbefe5d
new file mode 100644
index 0000000..0bef9c8
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-09.11-18-17.022ce195-a519-4702-a51a-319bffbefe5d
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\nimport applications.turtle_art_images.modules.PngGenerator\n\nsession.converting = False\n\ndef index():\n PngGenerator.TurtleMain(db.comment.file)\n session.converting = True\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n newta = db().select(db.comment.ALL)\n return dict(form=form, newta=newta)\n\ndef jamiesprogram():\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 40, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 7, in index\n PngGenerator.TurtleMain(db.comment.file)\nNameError: global name \'PngGenerator\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-09.11-18-55.8a80bce6-882e-4316-a22a-2dbdf30350ce b/errors/127.0.0.1.2010-06-09.11-18-55.8a80bce6-882e-4316-a22a-2dbdf30350ce
new file mode 100644
index 0000000..5ab42ae
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-09.11-18-55.8a80bce6-882e-4316-a22a-2dbdf30350ce
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\nsession.converting = False\n\ndef index():\n import applications.turtle_art_images.modules.PngGenerator\n PngGenerator.TurtleMain(db.comment.file)\n session.converting = True\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n newta = db().select(db.comment.ALL)\n return dict(form=form, newta=newta)\n\ndef jamiesprogram():\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 40, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 7, in index\n PngGenerator.TurtleMain(db.comment.file)\nNameError: global name \'PngGenerator\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-09.11-19-58.6b69840e-d0f0-458c-b963-9b84849cffaa b/errors/127.0.0.1.2010-06-09.11-19-58.6b69840e-d0f0-458c-b963-9b84849cffaa
new file mode 100644
index 0000000..5ab42ae
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-09.11-19-58.6b69840e-d0f0-458c-b963-9b84849cffaa
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\nsession.converting = False\n\ndef index():\n import applications.turtle_art_images.modules.PngGenerator\n PngGenerator.TurtleMain(db.comment.file)\n session.converting = True\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n newta = db().select(db.comment.ALL)\n return dict(form=form, newta=newta)\n\ndef jamiesprogram():\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 40, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 7, in index\n PngGenerator.TurtleMain(db.comment.file)\nNameError: global name \'PngGenerator\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-09.11-20-20.7e0e0756-5441-4605-bb18-36e029e08598 b/errors/127.0.0.1.2010-06-09.11-20-20.7e0e0756-5441-4605-bb18-36e029e08598
new file mode 100644
index 0000000..18f70be
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-09.11-20-20.7e0e0756-5441-4605-bb18-36e029e08598
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\nsession.converting = False\n\ndef index():\n import applications.turtle_art_images.modules.PngGenerato\n PngGenerator.TurtleMain(db.comment.file)\n session.converting = True\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n newta = db().select(db.comment.ALL)\n return dict(form=form, newta=newta)\n\ndef jamiesprogram():\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 40, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 6, in index\n import applications.turtle_art_images.modules.PngGenerato\nImportError: No module named PngGenerato\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-09.11-21-54.374a4d2f-c9d2-4b09-bd30-9261e01049dd b/errors/127.0.0.1.2010-06-09.11-21-54.374a4d2f-c9d2-4b09-bd30-9261e01049dd
new file mode 100644
index 0000000..baa9d2f
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-09.11-21-54.374a4d2f-c9d2-4b09-bd30-9261e01049dd
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\nsession.converting = False\n\ndef index():\n import applications.turtle_art_images.modules.testmodule\n testmodule.testfunc(25)\n session.converting = True\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n newta = db().select(db.comment.ALL)\n return dict(form=form, newta=newta)\n\ndef jamiesprogram():\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 40, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 7, in index\n testmodule.testfunc(25)\nNameError: global name \'testmodule\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-09.11-22-41.c435fc7a-38e0-4828-a06e-621f94db7bb0 b/errors/127.0.0.1.2010-06-09.11-22-41.c435fc7a-38e0-4828-a06e-621f94db7bb0
new file mode 100644
index 0000000..f229823
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-09.11-22-41.c435fc7a-38e0-4828-a06e-621f94db7bb0
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\nsession.converting = False\n\ndef index():\n from applications.turtle_art_images.modules.testmodule import testfunc\n testmodule.testfunc(25)\n session.converting = True\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n newta = db().select(db.comment.ALL)\n return dict(form=form, newta=newta)\n\ndef jamiesprogram():\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 40, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 7, in index\n testmodule.testfunc(25)\nNameError: global name \'testmodule\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-09.11-29-17.b89909c8-0381-4505-a74c-7f2ea463edee b/errors/127.0.0.1.2010-06-09.11-29-17.b89909c8-0381-4505-a74c-7f2ea463edee
new file mode 100644
index 0000000..82e23ff
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-09.11-29-17.b89909c8-0381-4505-a74c-7f2ea463edee
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\nimport applications.turtle_art_images.modules.PngGenerator\n\ndef index():\n newta = db().select(db.comment.file)\n TurtleMain.__init__(newta)\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 37, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 6, in index\n TurtleMain.__init__(newta)\nNameError: global name \'TurtleMain\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-09.11-29-43.e213d434-5001-4a9e-a320-b5aca5f2150d b/errors/127.0.0.1.2010-06-09.11-29-43.e213d434-5001-4a9e-a320-b5aca5f2150d
new file mode 100644
index 0000000..5834e08
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-09.11-29-43.e213d434-5001-4a9e-a320-b5aca5f2150d
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\nimport applications.turtle_art_images.modules.PngGenerator\n\ndef index():\n import applications.turtle_art_images.modules.PngGenerator\n newta = db().select(db.comment.file)\n TurtleMain.__init__(newta)\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 38, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 7, in index\n TurtleMain.__init__(newta)\nNameError: global name \'TurtleMain\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-09.11-30-16.7016b708-8872-4d47-ac2a-001279d39eea b/errors/127.0.0.1.2010-06-09.11-30-16.7016b708-8872-4d47-ac2a-001279d39eea
new file mode 100644
index 0000000..7c3f425
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-09.11-30-16.7016b708-8872-4d47-ac2a-001279d39eea
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\nfrom applications.turtle_art_images.modules.PngGenerator TurtleMain\n\ndef index():\n newta = db().select(db.comment.file)\n TurtleMain.__init__(newta)\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 2\n from applications.turtle_art_images.modules.PngGenerator TurtleMain\n ^\nSyntaxError: invalid syntax\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-09.11-30-35.d947a73d-b877-4b24-a659-a771d3fe3322 b/errors/127.0.0.1.2010-06-09.11-30-35.d947a73d-b877-4b24-a659-a771d3fe3322
new file mode 100644
index 0000000..52d3e6c
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-09.11-30-35.d947a73d-b877-4b24-a659-a771d3fe3322
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\nfrom applications.turtle_art_images.modules.PngGenerator import TurtleMain\n\ndef index():\n newta = db().select(db.comment.file)\n TurtleMain.__init__(newta)\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 37, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 6, in index\n TurtleMain.__init__(newta)\nTypeError: unbound method __init__() must be called with TurtleMain instance as first argument (got Rows instance instead)\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-09.11-30-57.72a62a7d-7aee-495d-be99-2a51ddb80709 b/errors/127.0.0.1.2010-06-09.11-30-57.72a62a7d-7aee-495d-be99-2a51ddb80709
new file mode 100644
index 0000000..52d3e6c
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-09.11-30-57.72a62a7d-7aee-495d-be99-2a51ddb80709
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\nfrom applications.turtle_art_images.modules.PngGenerator import TurtleMain\n\ndef index():\n newta = db().select(db.comment.file)\n TurtleMain.__init__(newta)\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 37, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 6, in index\n TurtleMain.__init__(newta)\nTypeError: unbound method __init__() must be called with TurtleMain instance as first argument (got Rows instance instead)\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-09.11-31-48.fbb0f6e6-2022-4bb1-82a2-4239c36482e2 b/errors/127.0.0.1.2010-06-09.11-31-48.fbb0f6e6-2022-4bb1-82a2-4239c36482e2
new file mode 100644
index 0000000..02b4719
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-09.11-31-48.fbb0f6e6-2022-4bb1-82a2-4239c36482e2
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\nfrom applications.turtle_art_images.modules.PngGenerator import TurtleMain\n\ndef index():\n newta = db().select(db.comment.file)\n __init__.TurtleMain(newta)\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 37, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 6, in index\n __init__.TurtleMain(newta)\nNameError: global name \'__init__\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-09.11-32-13.2722bf60-e500-4ed5-9300-22246adfb092 b/errors/127.0.0.1.2010-06-09.11-32-13.2722bf60-e500-4ed5-9300-22246adfb092
new file mode 100644
index 0000000..0708bc8
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-09.11-32-13.2722bf60-e500-4ed5-9300-22246adfb092
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\nfrom applications.turtle_art_images.modules.PngGenerator import TurtleMain\n\ndef index():\n newta = db().select(db.comment.file)\n TurtleMain(newta)\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 37, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 6, in index\n TurtleMain(newta)\nTypeError: __init__() takes exactly 1 argument (2 given)\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-09.11-41-18.fa10d0e9-b72c-47fa-bb1c-a1fe91aa54a8 b/errors/127.0.0.1.2010-06-09.11-41-18.fa10d0e9-b72c-47fa-bb1c-a1fe91aa54a8
new file mode 100644
index 0000000..0708bc8
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-09.11-41-18.fa10d0e9-b72c-47fa-bb1c-a1fe91aa54a8
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\nfrom applications.turtle_art_images.modules.PngGenerator import TurtleMain\n\ndef index():\n newta = db().select(db.comment.file)\n TurtleMain(newta)\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 37, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 6, in index\n TurtleMain(newta)\nTypeError: __init__() takes exactly 1 argument (2 given)\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-09.11-41-50.cfb87704-4b12-4100-9a25-442f7a81ade0 b/errors/127.0.0.1.2010-06-09.11-41-50.cfb87704-4b12-4100-9a25-442f7a81ade0
new file mode 100644
index 0000000..0bfa3d5
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-09.11-41-50.cfb87704-4b12-4100-9a25-442f7a81ade0
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\nfrom applications.turtle_art_images.modules.PngGenerator import TurtleMain\n\ndef index():\n newta = db().select(db.comment.file)\n TurtleMain()\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 37, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 6, in index\n TurtleMain()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/modules/PngGenerator.py", line 52, in __init__\n if self.file[-3:] != ".ta": raise Exception("argument is not a TurtleArt file")\nException: argument is not a TurtleArt file\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-09.11-44-00.64eed127-cbb0-4d03-b3fc-2810a8b851f4 b/errors/127.0.0.1.2010-06-09.11-44-00.64eed127-cbb0-4d03-b3fc-2810a8b851f4
new file mode 100644
index 0000000..0bfa3d5
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-09.11-44-00.64eed127-cbb0-4d03-b3fc-2810a8b851f4
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\nfrom applications.turtle_art_images.modules.PngGenerator import TurtleMain\n\ndef index():\n newta = db().select(db.comment.file)\n TurtleMain()\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 37, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 6, in index\n TurtleMain()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/modules/PngGenerator.py", line 52, in __init__\n if self.file[-3:] != ".ta": raise Exception("argument is not a TurtleArt file")\nException: argument is not a TurtleArt file\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-09.12-53-34.c57d0c83-2086-4213-bfba-1c95d1e17f9a b/errors/127.0.0.1.2010-06-09.12-53-34.c57d0c83-2086-4213-bfba-1c95d1e17f9a
new file mode 100644
index 0000000..ffbaa8a
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-09.12-53-34.c57d0c83-2086-4213-bfba-1c95d1e17f9a
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\ndef index():\n newta = db().select(db.comment.file)\n os.system('python applications/turtle_art_images/modules/PngGenerator.py '+newta)\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 36, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 5, in index\n os.system(\'python applications/turtle_art_images/modules/PngGenerator.py \'+newta)\nTypeError: cannot concatenate \'str\' and \'Rows\' objects\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-09.12-57-57.523a1b10-c75b-48a9-a467-b35d03e750ad b/errors/127.0.0.1.2010-06-09.12-57-57.523a1b10-c75b-48a9-a467-b35d03e750ad
new file mode 100644
index 0000000..33e9e1d
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-09.12-57-57.523a1b10-c75b-48a9-a467-b35d03e750ad
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\ndef index():\n newta = db(db.comment.title == form.vars.title).select()\n os.system('python applications/turtle_art_images/modules/PngGenerator.py '+newta)\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 36, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 4, in index\n newta = db(db.comment.title == form.vars.title).select()\nUnboundLocalError: local variable \'form\' referenced before assignment\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-09.13-00-29.a35d0a75-b764-4ce3-84bf-6573cf631513 b/errors/127.0.0.1.2010-06-09.13-00-29.a35d0a75-b764-4ce3-84bf-6573cf631513
new file mode 100644
index 0000000..757660a
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-09.13-00-29.a35d0a75-b764-4ce3-84bf-6573cf631513
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\ndef index():\n newta = db().select(db.comment.ALL)\n os.system('python applications/turtle_art_images/modules/PngGenerator.py '+newta)\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 36, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 5, in index\n os.system(\'python applications/turtle_art_images/modules/PngGenerator.py \'+newta)\nTypeError: cannot concatenate \'str\' and \'Rows\' objects\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-09.13-02-52.9fcd3b58-1ce4-4ecb-9cf3-39126f0d04fa b/errors/127.0.0.1.2010-06-09.13-02-52.9fcd3b58-1ce4-4ecb-9cf3-39126f0d04fa
new file mode 100644
index 0000000..1ad8803
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-09.13-02-52.9fcd3b58-1ce4-4ecb-9cf3-39126f0d04fa
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\ndef index():\n newta = URL(request.application,'default','download',args=db.comment[0].file)\n os.system('python applications/turtle_art_images/modules/PngGenerator.py '+newta)\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 36, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 4, in index\n newta = URL(request.application,\'default\',\'download\',args=db.comment[0].file)\nAttributeError: \'NoneType\' object has no attribute \'file\'\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-09.13-06-38.9e7f1704-78e8-4175-8a3f-eee7e748c22d b/errors/127.0.0.1.2010-06-09.13-06-38.9e7f1704-78e8-4175-8a3f-eee7e748c22d
new file mode 100644
index 0000000..e4cd0f9
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-09.13-06-38.9e7f1704-78e8-4175-8a3f-eee7e748c22d
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\ndef index():\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n elif form.errors:\n response.flash = 'form has errors'\n os.system('python applications/turtle_art_images/modules/PngGenerator.py '+form.vars.file)\n return dict(form=form)\n\ndef jamiesprogram():\n os.system('python PngGenerator '+URL(request.application,'default','download',args=db.comment.file))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 35, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 14, in index\n os.system(\'python applications/turtle_art_images/modules/PngGenerator.py \'+form.vars.file)\nTypeError: cannot concatenate \'str\' and \'NoneType\' objects\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-09.13-13-55.c761e91b-5c7e-4245-ae98-cde4d80925ef b/errors/127.0.0.1.2010-06-09.13-13-55.c761e91b-5c7e-4245-ae98-cde4d80925ef
new file mode 100644
index 0000000..dfc398f
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-09.13-13-55.c761e91b-5c7e-4245-ae98-cde4d80925ef
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\ndef index():\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n redirect(URL(r=request, f='jamiesprogram')) \n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n os.system('python applications/turtle_art_images/modules/PngGenerator.py '+form.vars.file\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 19\n return dict()\n ^\nSyntaxError: invalid syntax\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-09.13-15-14.29d3a726-0567-477c-9457-7be9c2f18837 b/errors/127.0.0.1.2010-06-09.13-15-14.29d3a726-0567-477c-9457-7be9c2f18837
new file mode 100644
index 0000000..4509352
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-09.13-15-14.29d3a726-0567-477c-9457-7be9c2f18837
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\ndef index():\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n redirect(URL(r=request, f='jamiesprogram')) \n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n os.system('python applications/turtle_art_images/modules/PngGenerator.py '+form.vars.file)\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(jamiesprogram)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 35, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 18, in jamiesprogram\n os.system(\'python applications/turtle_art_images/modules/PngGenerator.py \'+form.vars.file)\nNameError: global name \'form\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-09.13-17-21.ff1cbd51-2ecf-4bc9-b72c-1d48ac500c00 b/errors/127.0.0.1.2010-06-09.13-17-21.ff1cbd51-2ecf-4bc9-b72c-1d48ac500c00
new file mode 100644
index 0000000..dab2a17
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-09.13-17-21.ff1cbd51-2ecf-4bc9-b72c-1d48ac500c00
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\ndef index():\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n session.file = form.vars.file\n redirect(URL(r=request, f='jamiesprogram')) \n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n os.system('python applications/turtle_art_images/modules/PngGenerator.py '+session.file)\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(jamiesprogram)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 36, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 19, in jamiesprogram\n os.system(\'python applications/turtle_art_images/modules/PngGenerator.py \'+session.file)\nTypeError: cannot concatenate \'str\' and \'NoneType\' objects\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-09.13-26-17.140316fc-2085-4d85-b497-3b50a919a3af b/errors/127.0.0.1.2010-06-09.13-26-17.140316fc-2085-4d85-b497-3b50a919a3af
new file mode 100644
index 0000000..c4406a3
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-09.13-26-17.140316fc-2085-4d85-b497-3b50a919a3af
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\ndef index():\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n session.file = form.vars.file\n redirect(URL(r=request, f='jamiesprogram')) \n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n images = db().select(db.comment.ALL)\n for row in images:\n db.comment.insert(file=os.system('python applications/turtle_art_images/modules/PngGenerator.py '+URL(request.application,'default','download',args=row.file))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(adminpage)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 22\n return dict()\n ^\nSyntaxError: invalid syntax\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-10.09-29-54.72ad7c1a-7a4b-40ca-b38d-ee7aab8b7973 b/errors/127.0.0.1.2010-06-10.09-29-54.72ad7c1a-7a4b-40ca-b38d-ee7aab8b7973
new file mode 100644
index 0000000..afc1d23
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-10.09-29-54.72ad7c1a-7a4b-40ca-b38d-ee7aab8b7973
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\ndef index():\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n session.image_file = form.vars.file\n redirect(URL(r=request, f='jamiesprogram')) \n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n db.comment.insert(file=os.system('python applications/turtle_art_images/modules/PngGenerator.py '+session.image_file))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 20\n return dict()\n ^\nIndentationError: unindent does not match any outer indentation level\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-10.09-30-30.036bdcc1-8fda-4d61-9bc1-8dc9c16d25fd b/errors/127.0.0.1.2010-06-10.09-30-30.036bdcc1-8fda-4d61-9bc1-8dc9c16d25fd
new file mode 100644
index 0000000..afc1d23
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-10.09-30-30.036bdcc1-8fda-4d61-9bc1-8dc9c16d25fd
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\ndef index():\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n session.image_file = form.vars.file\n redirect(URL(r=request, f='jamiesprogram')) \n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n db.comment.insert(file=os.system('python applications/turtle_art_images/modules/PngGenerator.py '+session.image_file))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 20\n return dict()\n ^\nIndentationError: unindent does not match any outer indentation level\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-10.09-48-22.f4f2819c-2b39-4948-a4e4-b34b79958699 b/errors/127.0.0.1.2010-06-10.09-48-22.f4f2819c-2b39-4948-a4e4-b34b79958699
new file mode 100644
index 0000000..34ff3aa
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-10.09-48-22.f4f2819c-2b39-4948-a4e4-b34b79958699
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\ndef index():\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n session.new_image_id = form.vars.file\n redirect(URL(r=request, f='jamiesprogram')) \n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n new_image = db(db.comment.file == URL(request.application,'default','download',args=session.new_image_id).select())\n db.comment.insert(file=os.system('python applications/turtle_art_images/modules/PngGenerator.py '+new_image))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(jamiesprogram)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 37, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 19, in jamiesprogram\n new_image = db(db.comment.file == URL(request.application,\'default\',\'download\',args=session.new_image_id).select())\nAttributeError: \'str\' object has no attribute \'select\'\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-10.09-50-00.eb0ea40d-2bbb-447a-8d53-d4934e636ad8 b/errors/127.0.0.1.2010-06-10.09-50-00.eb0ea40d-2bbb-447a-8d53-d4934e636ad8
new file mode 100644
index 0000000..c59d514
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-10.09-50-00.eb0ea40d-2bbb-447a-8d53-d4934e636ad8
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\ndef index():\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n session.new_image_id = form.vars.file\n redirect(URL(r=request, f='jamiesprogram')) \n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n new_image = db(db.comment.file == URL(request.application,'default','download',args=session.new_image_id)).select()\n db.comment.insert(file=os.system('python applications/turtle_art_images/modules/PngGenerator.py '+new_image))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(jamiesprogram)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 37, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 20, in jamiesprogram\n db.comment.insert(file=os.system(\'python applications/turtle_art_images/modules/PngGenerator.py \'+new_image))\nTypeError: cannot concatenate \'str\' and \'Rows\' objects\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-10.09-53-31.41777e62-1e09-4638-b057-cadf6e483522 b/errors/127.0.0.1.2010-06-10.09-53-31.41777e62-1e09-4638-b057-cadf6e483522
new file mode 100644
index 0000000..d28d174
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-10.09-53-31.41777e62-1e09-4638-b057-cadf6e483522
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\ndef index():\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n session.new_image_id = form.vars.file\n redirect(URL(r=request, f='jamiesprogram')) \n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n new_image = db(db.comment.file == URL(request.application,'default','download',args=session.new_image_id)).select()\n os.system('python applications/turtle_art_images/modules/PngGenerator '+new_image)\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(jamiesprogram)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 37, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 20, in jamiesprogram\n os.system(\'python applications/turtle_art_images/modules/PngGenerator \'+new_image)\nTypeError: cannot concatenate \'str\' and \'Rows\' objects\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-10.09-58-11.37b68ce0-60cf-46cd-996f-8ad0af327f8a b/errors/127.0.0.1.2010-06-10.09-58-11.37b68ce0-60cf-46cd-996f-8ad0af327f8a
new file mode 100644
index 0000000..7f3d9d6
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-10.09-58-11.37b68ce0-60cf-46cd-996f-8ad0af327f8a
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\nimport applications.turtle_art_images.modules.PngGenerator\n\ndef index():\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n redirect(URL(r=request, f='jamiesprogram')) \n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n new_image = db(db.comment.file == URL(request.application,'default','download',args=session.new_image_id)).select()\n os.system('python applications/turtle_art_images/modules/PngGenerator '+new_image)\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(jamiesprogram)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 37, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 20, in jamiesprogram\n os.system(\'python applications/turtle_art_images/modules/PngGenerator \'+new_image)\nTypeError: cannot concatenate \'str\' and \'Rows\' objects\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-10.11-24-17.884f9072-4e27-493a-b688-6a164cf84e16 b/errors/127.0.0.1.2010-06-10.11-24-17.884f9072-4e27-493a-b688-6a164cf84e16
new file mode 100644
index 0000000..2dd58e0
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-10.11-24-17.884f9072-4e27-493a-b688-6a164cf84e16
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\ndef index():\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n session.new_image = form.vars.file\n redirect(URL(r=request, f='jamiesprogram')) \n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n new_image = db(db.comment.file == URL(request.application,'default','download',args=session.new_image)).select()\n os.system('python applications/turtle_art_images/modules/PngGenerator.py applications/turtle_art_images/uploads/'+session.new_image')\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 20\n os.system(\'python applications/turtle_art_images/modules/PngGenerator.py applications/turtle_art_images/uploads/\'+session.new_image\')\n ^\nSyntaxError: EOL while scanning string literal\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-10.11-40-09.d2bfa366-2548-41e3-aff7-8a76b66e68ac b/errors/127.0.0.1.2010-06-10.11-40-09.d2bfa366-2548-41e3-aff7-8a76b66e68ac
new file mode 100644
index 0000000..e5c6dd6
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-10.11-40-09.d2bfa366-2548-41e3-aff7-8a76b66e68ac
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\ndef index():\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n session.new_image = form.vars.file\n redirect(URL(r=request, f='jamiesprogram')) \n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n new_image = db(db.comment.file == URL(request.application,'default','download',args=session.new_image)).select()\n db.comment.insert(image=os.system('python applications/turtle_art_images/modules/PngGenerator.py applications/turtle_art_images/uploads/'+session.new_image))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(jamiesprogram)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 37, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 20, in jamiesprogram\n db.comment.insert(image=os.system(\'python applications/turtle_art_images/modules/PngGenerator.py applications/turtle_art_images/uploads/\'+session.new_image))\n File "/home/acrowe/lib/python/web2py/gluon/sql.py", line 1929, in insert\n query = self._insert(**fields)\n File "/home/acrowe/lib/python/web2py/gluon/sql.py", line 1897, in _insert\n % repr(invalid_fieldnames)\nSyntaxError: invalid field names: [\'image\']\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-10.11-41-16.7f7319ff-f582-4f84-b815-dbf08ac2e571 b/errors/127.0.0.1.2010-06-10.11-41-16.7f7319ff-f582-4f84-b815-dbf08ac2e571
new file mode 100644
index 0000000..f3a4042
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-10.11-41-16.7f7319ff-f582-4f84-b815-dbf08ac2e571
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/models/db.py'
+p4
+sS'code'
+p5
+S'db = DAL("sqlite://storage.db")\n\ndb.define_table(\'comment\',\n Field(\'file\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension=\'ta\', error_message="Must be a Turtle Art file")]),\n Field(\'title\', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, \'comment.title\', error_message="Title is already taken")]),\n Field(\'image_id\'),\n Field(\'creator\', requires=IS_NOT_EMPTY(error_message="You must include your name")),\n Field(\'description\', \'text\')\n Field(\'image\'))\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/models/db.py", line 9\n Field(\'image\'))\n ^\nSyntaxError: invalid syntax\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-11.09-29-18.0e1af70f-b279-4891-8c56-e7c1cd44a3c4 b/errors/127.0.0.1.2010-06-11.09-29-18.0e1af70f-b279-4891-8c56-e7c1cd44a3c4
new file mode 100644
index 0000000..1fd7b2a
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-11.09-29-18.0e1af70f-b279-4891-8c56-e7c1cd44a3c4
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\ndef index():\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n session.new_image = form.vars.file\n session.new_image_title = form.vars.title\n redirect(URL(r=request, f='jamiesprogram')) \n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n file_name_length = len(session.new_image)\n print session.new_image\n print file_name_length\n os.system('python applications/turtle_art_images/modules/PngGenerator.py applications/turtle_art_images/uploads/'+session.new_image)\n db().insert(newimage=os.system('applications/turtle_art_images/uploads/'+session.new_image[0:(file_name_length-2)]+'png'))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(jamiesprogram)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 41, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 24, in jamiesprogram\n db().insert(newimage=os.system(\'applications/turtle_art_images/uploads/\'+session.new_image[0:(file_name_length-2)]+\'png\'))\nAttributeError: \'Set\' object has no attribute \'insert\'\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-11.09-30-18.6e3d7c62-d84c-4e2c-a741-fa0f76868404 b/errors/127.0.0.1.2010-06-11.09-30-18.6e3d7c62-d84c-4e2c-a741-fa0f76868404
new file mode 100644
index 0000000..acbf867
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-11.09-30-18.6e3d7c62-d84c-4e2c-a741-fa0f76868404
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\ndef index():\n if len(request.args):\n records = db(db.comment.image_id==request.args[0]).select()\n if len(request.args) and len(records):\n form = SQLFORM(db.comment, records[0], deletable=True)\n else:\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n response.flash = 'form accepted'\n session.new_image = form.vars.file\n session.new_image_title = form.vars.title\n redirect(URL(r=request, f='jamiesprogram')) \n elif form.errors:\n response.flash = 'form has errors'\n return dict(form=form)\n\ndef jamiesprogram():\n file_name_length = len(session.new_image)\n print session.new_image\n print file_name_length\n os.system('python applications/turtle_art_images/modules/PngGenerator.py applications/turtle_art_images/uploads/'+session.new_image)\ndb.comment.insert(newimage=os.system('applications/turtle_art_images/uploads/'+session.new_image[0:(file_name_length-2)]+'png'))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 25\n return dict()\n ^\nIndentationError: unexpected indent\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-15.10-59-23.4caf31af-e05f-4a66-b90c-8fac85ea2797 b/errors/127.0.0.1.2010-06-15.10-59-23.4caf31af-e05f-4a66-b90c-8fac85ea2797
new file mode 100644
index 0000000..1377453
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-15.10-59-23.4caf31af-e05f-4a66-b90c-8fac85ea2797
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\ndef index():\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n session.new_image = form.vars.file\n session.new_image_title = form.vars.title\n redirect(URL(r=request, f='jamiesprogram')) \n return dict(form=form)\n\ndef jamiesprogram():\n file_name_length = len(session.new_image)\n os.system('python applications/turtle_art_images/modules/PngGenerator.py applications/turtle_art_images/uploads/'+session.new_image)\n db(db.comment.title==session.new_image_title).update(newimage ='applications/turtle_art_images/uplodates/%s.png' % session.new_image[:-3])\n redirect(URL(r=request, f='imagelist'))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n\ndef imagetemplate():\n session.viewed_image_title = row.title\n return dict()\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(imagetemplate)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 33, in <module>\n File "/home/acrowe/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/controllers/default.py", line 27, in imagetemplate\n session.viewed_image_title = row.title\nNameError: global name \'row\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-15.11-15-28.930b7138-35c1-45fb-b314-efe69037d65a b/errors/127.0.0.1.2010-06-15.11-15-28.930b7138-35c1-45fb-b314-efe69037d65a
new file mode 100644
index 0000000..337e720
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-15.11-15-28.930b7138-35c1-45fb-b314-efe69037d65a
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/views/default/imagetemplate.html'
+p4
+sS'code'
+p5
+S'response.write(\'<html>\\n <link rel="stylesheet" href="../static/glike.css" type="text/css" />\\n <head>\\n <title>Turtle Art Image Database</title>\\n </head>\\n <body>\\n <div id="header">\\n <h1><a href="index.html" >Home</a></h1>\\n <ul>\\n <li><a href="imagelist.html" >Images</a></li>\\n <li><a href="adminpage.html" >Clear All</a></li>\\n </ul>\\n </div>\\n <div id=\\\'bodycontent\\\'>\\n \\nviewed_image = db(db.comment.title == request.vars.viewed_image_title).select()\\n<center>\\n<img width="400px"\\n src="\',escape=False)\nresponse.write(URL(r=request, f=\'download\', args=viewed_image))\nresponse.write(\'" />\\n</center>\\n\\n </div>\\n </body>\\n </style>\\n</html>\\n\',escape=False)'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/views/default/imagetemplate.html", line 2, in <module>\n viewed_image = db(db.comment.title == request.vars.viewed_image_title).select()\nNameError: name \'viewed_image\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-15.11-15-40.b3af0fde-4ac3-42f0-9461-726a4d721859 b/errors/127.0.0.1.2010-06-15.11-15-40.b3af0fde-4ac3-42f0-9461-726a4d721859
new file mode 100644
index 0000000..337e720
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-15.11-15-40.b3af0fde-4ac3-42f0-9461-726a4d721859
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/views/default/imagetemplate.html'
+p4
+sS'code'
+p5
+S'response.write(\'<html>\\n <link rel="stylesheet" href="../static/glike.css" type="text/css" />\\n <head>\\n <title>Turtle Art Image Database</title>\\n </head>\\n <body>\\n <div id="header">\\n <h1><a href="index.html" >Home</a></h1>\\n <ul>\\n <li><a href="imagelist.html" >Images</a></li>\\n <li><a href="adminpage.html" >Clear All</a></li>\\n </ul>\\n </div>\\n <div id=\\\'bodycontent\\\'>\\n \\nviewed_image = db(db.comment.title == request.vars.viewed_image_title).select()\\n<center>\\n<img width="400px"\\n src="\',escape=False)\nresponse.write(URL(r=request, f=\'download\', args=viewed_image))\nresponse.write(\'" />\\n</center>\\n\\n </div>\\n </body>\\n </style>\\n</html>\\n\',escape=False)'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/views/default/imagetemplate.html", line 2, in <module>\n viewed_image = db(db.comment.title == request.vars.viewed_image_title).select()\nNameError: name \'viewed_image\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-15.11-20-54.9058efe3-8e6d-42a0-ba03-e76397a55cb3 b/errors/127.0.0.1.2010-06-15.11-20-54.9058efe3-8e6d-42a0-ba03-e76397a55cb3
new file mode 100644
index 0000000..115ced4
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-15.11-20-54.9058efe3-8e6d-42a0-ba03-e76397a55cb3
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/views/default/imagetemplate.html'
+p4
+sS'code'
+p5
+S'response.write(\'<html>\\n <link rel="stylesheet" href="../static/glike.css" type="text/css" />\\n <head>\\n <title>Turtle Art Image Database</title>\\n </head>\\n <body>\\n <div id="header">\\n <h1><a href="index.html" >Home</a></h1>\\n <ul>\\n <li><a href="imagelist.html" >Images</a></li>\\n <li><a href="adminpage.html" >Clear All</a></li>\\n </ul>\\n </div>\\n <div id=\\\'bodycontent\\\'>\\n \\nviewed_image = db(db.comment.title == session.viewed_image_title).select()\\n<center>\\n<img width="400px"\\n src="\',escape=False)\nresponse.write(URL(r=request, f=\'download\', args=viewed_image))\nresponse.write(\'" />\\n</center>\\n\\n </div>\\n </body>\\n </style>\\n</html>\\n\',escape=False)'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/views/default/imagetemplate.html", line 2, in <module>\n viewed_image = db(db.comment.title == session.viewed_image_title).select()\nNameError: name \'viewed_image\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-15.11-21-03.8189fe78-9ac1-4f8c-95a6-800da6ee74ef b/errors/127.0.0.1.2010-06-15.11-21-03.8189fe78-9ac1-4f8c-95a6-800da6ee74ef
new file mode 100644
index 0000000..115ced4
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-15.11-21-03.8189fe78-9ac1-4f8c-95a6-800da6ee74ef
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/views/default/imagetemplate.html'
+p4
+sS'code'
+p5
+S'response.write(\'<html>\\n <link rel="stylesheet" href="../static/glike.css" type="text/css" />\\n <head>\\n <title>Turtle Art Image Database</title>\\n </head>\\n <body>\\n <div id="header">\\n <h1><a href="index.html" >Home</a></h1>\\n <ul>\\n <li><a href="imagelist.html" >Images</a></li>\\n <li><a href="adminpage.html" >Clear All</a></li>\\n </ul>\\n </div>\\n <div id=\\\'bodycontent\\\'>\\n \\nviewed_image = db(db.comment.title == session.viewed_image_title).select()\\n<center>\\n<img width="400px"\\n src="\',escape=False)\nresponse.write(URL(r=request, f=\'download\', args=viewed_image))\nresponse.write(\'" />\\n</center>\\n\\n </div>\\n </body>\\n </style>\\n</html>\\n\',escape=False)'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/views/default/imagetemplate.html", line 2, in <module>\n viewed_image = db(db.comment.title == session.viewed_image_title).select()\nNameError: name \'viewed_image\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-15.11-26-40.8825298a-5418-4c02-92eb-b69d915d4109 b/errors/127.0.0.1.2010-06-15.11-26-40.8825298a-5418-4c02-92eb-b69d915d4109
new file mode 100644
index 0000000..82091d2
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-15.11-26-40.8825298a-5418-4c02-92eb-b69d915d4109
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/acrowe/lib/python/web2py/applications/turtle_art_images/views/default/imagelist.html'
+p4
+sS'code'
+p5
+S'response.write(\'<html>\\n <link rel="stylesheet" href="../static/glike.css" type="text/css" />\\n <head>\\n <title>Turtle Art Image Database</title>\\n </head>\\n <body>\\n <div id="header">\\n <h1><a href="index.html" >Home</a></h1>\\n <ul>\\n <li><a href="imagelist.html" >Images</a></li>\\n <li><a href="adminpage.html" >Clear All</a></li>\\n </ul>\\n </div>\\n <div id=\\\'bodycontent\\\'>\\n \\n<h1>Submissions</h1>\\n <table>\\n <tr>\\n <th>Title</th>\\n <th>Author</th>\\n <th>Description</th>\\n <th>Image</th>\\n </tr>\\n <tr>\\n \',escape=False)\nfor row in comments:\n response.write(\'\\n <td>\',escape=False)\n response.write(row.title)\n response.write(\'</td>\\n <td>\',escape=False)\n response.write(row.creator)\n response.write(\'</td>\\n <td>\',escape=False)\n response.write(row.description)\n response.write(\'</td>\\n <td><img width="100px" src="\',escape=False)\n response.write(URL(r=request, f=\'download\', args=row.image))\n response.write(\'" onclick="this.src=\\\'\',escape=False)\n response.write(URL(r=request, f=\'download\', args=row.image))\n response.write(\'\\\';this.height=400;this.width=300" ondblclick="this.src=\\\'\',escape=False)\n response.write(URL(r=request, f=\'download\', args=row.image))\n response.write(\'\\\';this.height=200;this.width=150" /></td>\\n </tr>\\n \',escape=False)\n pass\nresponse.write(\'\\n </table>\\n\\n </div>\\n </body>\\n </style>\\n</html>\\n\',escape=False)'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/acrowe/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/acrowe/lib/python/web2py/applications/turtle_art_images/views/default/imagelist.html", line 10, in <module>\n <tr>\n File "/home/acrowe/lib/python/web2py/gluon/sql.py", line 665, in __getattr__\n return dict.__getitem__(self,key)\nKeyError: \'image\'\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-15.16-18-22.e49f5f67-6ef5-40cc-b7a7-b75fc9238d93 b/errors/127.0.0.1.2010-06-15.16-18-22.e49f5f67-6ef5-40cc-b7a7-b75fc9238d93
new file mode 100644
index 0000000..ffca768
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-15.16-18-22.e49f5f67-6ef5-40cc-b7a7-b75fc9238d93
@@ -0,0 +1,16 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'Framework'
+p4
+sS'code'
+p5
+S''
+sS'traceback'
+p6
+S'Traceback (most recent call last):\n File "/home/dreich/lib/python/web2py/gluon/main.py", line 407, in wsgibase\n session._try_store_on_disk(request, response)\n File "/home/dreich/lib/python/web2py/gluon/globals.py", line 375, in _try_store_on_disk\n cPickle.dump(dict(self), response.session_file)\n File "/usr/lib/python2.6/copy_reg.py", line 70, in _reduce_ex\n raise TypeError, "can\'t pickle %s objects" % base.__name__\nTypeError: can\'t pickle file objects\n'
+p7
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-15.16-20-33.7ee6e03c-40af-4774-93cb-ffe50e8b9cff b/errors/127.0.0.1.2010-06-15.16-20-33.7ee6e03c-40af-4774-93cb-ffe50e8b9cff
new file mode 100644
index 0000000..ffca768
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-15.16-20-33.7ee6e03c-40af-4774-93cb-ffe50e8b9cff
@@ -0,0 +1,16 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'Framework'
+p4
+sS'code'
+p5
+S''
+sS'traceback'
+p6
+S'Traceback (most recent call last):\n File "/home/dreich/lib/python/web2py/gluon/main.py", line 407, in wsgibase\n session._try_store_on_disk(request, response)\n File "/home/dreich/lib/python/web2py/gluon/globals.py", line 375, in _try_store_on_disk\n cPickle.dump(dict(self), response.session_file)\n File "/usr/lib/python2.6/copy_reg.py", line 70, in _reduce_ex\n raise TypeError, "can\'t pickle %s objects" % base.__name__\nTypeError: can\'t pickle file objects\n'
+p7
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-15.16-25-34.c0fde657-1530-4eb9-8c9f-f6912813f68c b/errors/127.0.0.1.2010-06-15.16-25-34.c0fde657-1530-4eb9-8c9f-f6912813f68c
new file mode 100644
index 0000000..ffca768
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-15.16-25-34.c0fde657-1530-4eb9-8c9f-f6912813f68c
@@ -0,0 +1,16 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'Framework'
+p4
+sS'code'
+p5
+S''
+sS'traceback'
+p6
+S'Traceback (most recent call last):\n File "/home/dreich/lib/python/web2py/gluon/main.py", line 407, in wsgibase\n session._try_store_on_disk(request, response)\n File "/home/dreich/lib/python/web2py/gluon/globals.py", line 375, in _try_store_on_disk\n cPickle.dump(dict(self), response.session_file)\n File "/usr/lib/python2.6/copy_reg.py", line 70, in _reduce_ex\n raise TypeError, "can\'t pickle %s objects" % base.__name__\nTypeError: can\'t pickle file objects\n'
+p7
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-15.16-25-54.669ae8c0-5c6b-4aa6-851b-9fea24a11495 b/errors/127.0.0.1.2010-06-15.16-25-54.669ae8c0-5c6b-4aa6-851b-9fea24a11495
new file mode 100644
index 0000000..7f3d572
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-15.16-25-54.669ae8c0-5c6b-4aa6-851b-9fea24a11495
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S"import os\n\ndef index():\n form = SQLFORM(db.comment, fields = ['title', 'file', 'creator', 'description'])\n if form.accepts(request.vars, session):\n session.new_image = form.vars.file\n session.new_image_title = form.vars.title\n redirect(URL(r=request, f='jamiesprogram')) \n return dict(form=form)\n\ndef jamiesprogram():\n file_name_length = len(session.new_image)\n os.system('python applications/turtle_art_images/modules/PngGenerator.py applications/turtle_art_images/uploads/'+session.new_image)\n db(db.comment.title==session.new_image_title).update(newimage ='applications/turtle_art_images/uplodates/%s.png' % session.new_image[:-3])\n redirect(URL(r=request, f='imagelist'))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef adminpage():\n db.comment.truncate()\n redirect('index.html')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(jamiesprogram)\n"
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/dreich/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py", line 29, in <module>\n File "/home/dreich/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py", line 12, in jamiesprogram\n file_name_length = len(session.new_image)\nTypeError: object of type \'NoneType\' has no len()\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-15.16-29-02.41d5041c-372e-425b-bbb4-db8c6f8c5e46 b/errors/127.0.0.1.2010-06-15.16-29-02.41d5041c-372e-425b-bbb4-db8c6f8c5e46
new file mode 100644
index 0000000..ffca768
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-15.16-29-02.41d5041c-372e-425b-bbb4-db8c6f8c5e46
@@ -0,0 +1,16 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'Framework'
+p4
+sS'code'
+p5
+S''
+sS'traceback'
+p6
+S'Traceback (most recent call last):\n File "/home/dreich/lib/python/web2py/gluon/main.py", line 407, in wsgibase\n session._try_store_on_disk(request, response)\n File "/home/dreich/lib/python/web2py/gluon/globals.py", line 375, in _try_store_on_disk\n cPickle.dump(dict(self), response.session_file)\n File "/usr/lib/python2.6/copy_reg.py", line 70, in _reduce_ex\n raise TypeError, "can\'t pickle %s objects" % base.__name__\nTypeError: can\'t pickle file objects\n'
+p7
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-15.16-36-48.c043ff98-5f0f-4e35-a438-ea190f28f05c b/errors/127.0.0.1.2010-06-15.16-36-48.c043ff98-5f0f-4e35-a438-ea190f28f05c
new file mode 100644
index 0000000..ffca768
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-15.16-36-48.c043ff98-5f0f-4e35-a438-ea190f28f05c
@@ -0,0 +1,16 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'Framework'
+p4
+sS'code'
+p5
+S''
+sS'traceback'
+p6
+S'Traceback (most recent call last):\n File "/home/dreich/lib/python/web2py/gluon/main.py", line 407, in wsgibase\n session._try_store_on_disk(request, response)\n File "/home/dreich/lib/python/web2py/gluon/globals.py", line 375, in _try_store_on_disk\n cPickle.dump(dict(self), response.session_file)\n File "/usr/lib/python2.6/copy_reg.py", line 70, in _reduce_ex\n raise TypeError, "can\'t pickle %s objects" % base.__name__\nTypeError: can\'t pickle file objects\n'
+p7
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-15.16-46-49.0a02205d-e5f0-417b-9fd0-d026372da726 b/errors/127.0.0.1.2010-06-15.16-46-49.0a02205d-e5f0-417b-9fd0-d026372da726
new file mode 100644
index 0000000..ffca768
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-15.16-46-49.0a02205d-e5f0-417b-9fd0-d026372da726
@@ -0,0 +1,16 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'Framework'
+p4
+sS'code'
+p5
+S''
+sS'traceback'
+p6
+S'Traceback (most recent call last):\n File "/home/dreich/lib/python/web2py/gluon/main.py", line 407, in wsgibase\n session._try_store_on_disk(request, response)\n File "/home/dreich/lib/python/web2py/gluon/globals.py", line 375, in _try_store_on_disk\n cPickle.dump(dict(self), response.session_file)\n File "/usr/lib/python2.6/copy_reg.py", line 70, in _reduce_ex\n raise TypeError, "can\'t pickle %s objects" % base.__name__\nTypeError: can\'t pickle file objects\n'
+p7
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-15.16-51-02.0a2ed667-56f1-4353-8017-d36df68710fd b/errors/127.0.0.1.2010-06-15.16-51-02.0a2ed667-56f1-4353-8017-d36df68710fd
new file mode 100644
index 0000000..6b36471
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-15.16-51-02.0a2ed667-56f1-4353-8017-d36df68710fd
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'creator\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n redirect(URL(r=request, f=\'jamiesprogram\')) \n return dict(form=form)\n\ndef jamiesprogram():\n new_image = db(db.comment.title==session.new_image_title).file\n os.system(\'python applications/turtle_art_images/modules/PngGenerator.py applications/turtle_art_images/uploads/\'+new_image)\n db(db.comment.title==session.new_image_title).update(newimage =\'applications/turtle_art_images/uplodates/%s.png\' % new_image[:-3])\n redirect(URL(r=request, f=\'imagelist\'))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef testimage():\n\tdb(db.comment.title=="hellotest").update(description = "hello")\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(jamiesprogram)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/dreich/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py", line 31, in <module>\n File "/home/dreich/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py", line 11, in jamiesprogram\n new_image = db(db.comment.title==session.new_image_title).file\nAttributeError: \'Set\' object has no attribute \'file\'\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-15.16-55-27.f037969c-cc51-4247-8648-459c3c9808c7 b/errors/127.0.0.1.2010-06-15.16-55-27.f037969c-cc51-4247-8648-459c3c9808c7
new file mode 100644
index 0000000..e369a05
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-15.16-55-27.f037969c-cc51-4247-8648-459c3c9808c7
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'creator\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n redirect(URL(r=request, f=\'jamiesprogram\')) \n return dict(form=form)\n\ndef jamiesprogram():\n new_image = db(db.comment.title==session.new_image_title)[\'file\']\n os.system(\'python applications/turtle_art_images/modules/PngGenerator.py applications/turtle_art_images/uploads/\'+new_image)\n db(db.comment.title==session.new_image_title).update(newimage =\'applications/turtle_art_images/uplodates/%s.png\' % new_image[:-3])\n redirect(URL(r=request, f=\'imagelist\'))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(jamiesprogram)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/dreich/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py", line 32, in <module>\n File "/home/dreich/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py", line 11, in jamiesprogram\n new_image = db(db.comment.title==session.new_image_title)[\'file\']\nTypeError: \'Set\' object is unsubscriptable\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-15.16-58-10.5b283ebe-409e-4254-b0d9-ab3dc70d674a b/errors/127.0.0.1.2010-06-15.16-58-10.5b283ebe-409e-4254-b0d9-ab3dc70d674a
new file mode 100644
index 0000000..eaef4a6
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-15.16-58-10.5b283ebe-409e-4254-b0d9-ab3dc70d674a
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'creator\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n redirect(URL(r=request, f=\'jamiesprogram\')) \n return dict(form=form)\n\ndef jamiesprogram():\n print db(db.comment.title==session.new_image_title)\n os.system(\'python applications/turtle_art_images/modules/PngGenerator.py applications/turtle_art_images/uploads/\'+new_image)\n db(db.comment.title==session.new_image_title).update(newimage =\'applications/turtle_art_images/uplodates/%s.png\' % new_image[:-3])\n redirect(URL(r=request, f=\'imagelist\'))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(jamiesprogram)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/dreich/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py", line 32, in <module>\n File "/home/dreich/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py", line 12, in jamiesprogram\n os.system(\'python applications/turtle_art_images/modules/PngGenerator.py applications/turtle_art_images/uploads/\'+new_image)\nNameError: global name \'new_image\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-15.17-00-10.563018f1-cd5c-4f7d-b969-19d65d005b1c b/errors/127.0.0.1.2010-06-15.17-00-10.563018f1-cd5c-4f7d-b969-19d65d005b1c
new file mode 100644
index 0000000..48c8431
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-15.17-00-10.563018f1-cd5c-4f7d-b969-19d65d005b1c
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'creator\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n redirect(URL(r=request, f=\'jamiesprogram\')) \n return dict(form=form)\n\ndef jamiesprogram():\n print db(db.comment.title==session.new_image_title).select()\n os.system(\'python applications/turtle_art_images/modules/PngGenerator.py applications/turtle_art_images/uploads/\'+new_image)\n db(db.comment.title==session.new_image_title).update(newimage =\'applications/turtle_art_images/uplodates/%s.png\' % new_image[:-3])\n redirect(URL(r=request, f=\'imagelist\'))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(jamiesprogram)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/dreich/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py", line 32, in <module>\n File "/home/dreich/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py", line 12, in jamiesprogram\n os.system(\'python applications/turtle_art_images/modules/PngGenerator.py applications/turtle_art_images/uploads/\'+new_image)\nNameError: global name \'new_image\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-15.17-00-42.533264a6-2dc7-4477-a4e8-7c295ace2b1a b/errors/127.0.0.1.2010-06-15.17-00-42.533264a6-2dc7-4477-a4e8-7c295ace2b1a
new file mode 100644
index 0000000..2184cdd
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-15.17-00-42.533264a6-2dc7-4477-a4e8-7c295ace2b1a
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'creator\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n redirect(URL(r=request, f=\'jamiesprogram\')) \n return dict(form=form)\n\ndef jamiesprogram():\n print db(db.comment.title==session.new_image_title).select().file\n os.system(\'python applications/turtle_art_images/modules/PngGenerator.py applications/turtle_art_images/uploads/\'+new_image)\n db(db.comment.title==session.new_image_title).update(newimage =\'applications/turtle_art_images/uplodates/%s.png\' % new_image[:-3])\n redirect(URL(r=request, f=\'imagelist\'))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(jamiesprogram)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/dreich/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py", line 32, in <module>\n File "/home/dreich/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py", line 11, in jamiesprogram\n print db(db.comment.title==session.new_image_title).select().file\nAttributeError: \'Rows\' object has no attribute \'file\'\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-15.17-02-01.63632b71-54a7-42a6-b090-4e205e161f42 b/errors/127.0.0.1.2010-06-15.17-02-01.63632b71-54a7-42a6-b090-4e205e161f42
new file mode 100644
index 0000000..f5b0b38
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-15.17-02-01.63632b71-54a7-42a6-b090-4e205e161f42
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'creator\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n redirect(URL(r=request, f=\'jamiesprogram\')) \n return dict(form=form)\n\ndef jamiesprogram():\n newfile = db(db.comment.title==session.new_image_title).select()\n print newfile\n print type(newfile)\n os.system(\'python applications/turtle_art_images/modules/PngGenerator.py applications/turtle_art_images/uploads/\'+new_image)\n db(db.comment.title==session.new_image_title).update(newimage =\'applications/turtle_art_images/uplodates/%s.png\' % new_image[:-3])\n redirect(URL(r=request, f=\'imagelist\'))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(jamiesprogram)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/dreich/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py", line 34, in <module>\n File "/home/dreich/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py", line 14, in jamiesprogram\n os.system(\'python applications/turtle_art_images/modules/PngGenerator.py applications/turtle_art_images/uploads/\'+new_image)\nNameError: global name \'new_image\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-15.17-05-53.fe4b74d7-5662-4023-95ce-586e9bc33332 b/errors/127.0.0.1.2010-06-15.17-05-53.fe4b74d7-5662-4023-95ce-586e9bc33332
new file mode 100644
index 0000000..3e354bd
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-15.17-05-53.fe4b74d7-5662-4023-95ce-586e9bc33332
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'creator\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n redirect(URL(r=request, f=\'jamiesprogram\')) \n return dict(form=form)\n\ndef jamiesprogram():\n newfile = db(db.comment.title==session.new_image_title).select()\n print newfile\n print help(type(newfile))\n os.system(\'python applications/turtle_art_images/modules/PngGenerator.py applications/turtle_art_images/uploads/\'+new_image)\n db(db.comment.title==session.new_image_title).update(newimage =\'applications/turtle_art_images/uplodates/%s.png\' % new_image[:-3])\n redirect(URL(r=request, f=\'imagelist\'))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(jamiesprogram)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/dreich/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py", line 34, in <module>\n File "/home/dreich/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py", line 14, in jamiesprogram\n os.system(\'python applications/turtle_art_images/modules/PngGenerator.py applications/turtle_art_images/uploads/\'+new_image)\nNameError: global name \'new_image\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-15.17-06-56.22f1fc56-0621-4aa2-9621-00ff0553894a b/errors/127.0.0.1.2010-06-15.17-06-56.22f1fc56-0621-4aa2-9621-00ff0553894a
new file mode 100644
index 0000000..e64615d
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-15.17-06-56.22f1fc56-0621-4aa2-9621-00ff0553894a
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'creator\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n redirect(URL(r=request, f=\'jamiesprogram\')) \n return dict(form=form)\n\ndef jamiesprogram():\n newfile = db(db.comment.title==session.new_image_title).select().first()\n print newfile\n print help(type(newfile))\n os.system(\'python applications/turtle_art_images/modules/PngGenerator.py applications/turtle_art_images/uploads/\'+new_image)\n db(db.comment.title==session.new_image_title).update(newimage =\'applications/turtle_art_images/uplodates/%s.png\' % new_image[:-3])\n redirect(URL(r=request, f=\'imagelist\'))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(jamiesprogram)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/dreich/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py", line 34, in <module>\n File "/home/dreich/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py", line 14, in jamiesprogram\n os.system(\'python applications/turtle_art_images/modules/PngGenerator.py applications/turtle_art_images/uploads/\'+new_image)\nNameError: global name \'new_image\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-15.17-07-23.f83e43d1-73ed-4c9c-8ee6-69413af33d03 b/errors/127.0.0.1.2010-06-15.17-07-23.f83e43d1-73ed-4c9c-8ee6-69413af33d03
new file mode 100644
index 0000000..6e43484
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-15.17-07-23.f83e43d1-73ed-4c9c-8ee6-69413af33d03
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'creator\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n redirect(URL(r=request, f=\'jamiesprogram\')) \n return dict(form=form)\n\ndef jamiesprogram():\n newfile = db(db.comment.title==session.new_image_title).select().first()[file]\n print newfile\n os.system(\'python applications/turtle_art_images/modules/PngGenerator.py applications/turtle_art_images/uploads/\'+new_image)\n db(db.comment.title==session.new_image_title).update(newimage =\'applications/turtle_art_images/uplodates/%s.png\' % new_image[:-3])\n redirect(URL(r=request, f=\'imagelist\'))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(jamiesprogram)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/dreich/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py", line 33, in <module>\n File "/home/dreich/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py", line 11, in jamiesprogram\n newfile = db(db.comment.title==session.new_image_title).select().first()[file]\n File "/home/dreich/lib/python/web2py/gluon/sql.py", line 659, in __getitem__\n return dict.__getitem__(self, key)\nKeyError: "<type \'file\'>"\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-15.17-09-41.b387bb25-9164-412e-bd91-1ef65135ee96 b/errors/127.0.0.1.2010-06-15.17-09-41.b387bb25-9164-412e-bd91-1ef65135ee96
new file mode 100644
index 0000000..e64615d
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-15.17-09-41.b387bb25-9164-412e-bd91-1ef65135ee96
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'creator\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n redirect(URL(r=request, f=\'jamiesprogram\')) \n return dict(form=form)\n\ndef jamiesprogram():\n newfile = db(db.comment.title==session.new_image_title).select().first()\n print newfile\n print help(type(newfile))\n os.system(\'python applications/turtle_art_images/modules/PngGenerator.py applications/turtle_art_images/uploads/\'+new_image)\n db(db.comment.title==session.new_image_title).update(newimage =\'applications/turtle_art_images/uplodates/%s.png\' % new_image[:-3])\n redirect(URL(r=request, f=\'imagelist\'))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(jamiesprogram)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/dreich/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py", line 34, in <module>\n File "/home/dreich/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py", line 14, in jamiesprogram\n os.system(\'python applications/turtle_art_images/modules/PngGenerator.py applications/turtle_art_images/uploads/\'+new_image)\nNameError: global name \'new_image\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-15.17-10-16.50d4ec68-0005-4eea-8d8c-7b3f0634845b b/errors/127.0.0.1.2010-06-15.17-10-16.50d4ec68-0005-4eea-8d8c-7b3f0634845b
new file mode 100644
index 0000000..c0abc46
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-15.17-10-16.50d4ec68-0005-4eea-8d8c-7b3f0634845b
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'creator\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n redirect(URL(r=request, f=\'jamiesprogram\')) \n return dict(form=form)\n\ndef jamiesprogram():\n newfile = db(db.comment.title==session.new_image_title).select().first()\n newfile = newfile.file\n print newfile\n print help(type(newfile))\n os.system(\'python applications/turtle_art_images/modules/PngGenerator.py applications/turtle_art_images/uploads/\'+new_image)\n db(db.comment.title==session.new_image_title).update(newimage =\'applications/turtle_art_images/uplodates/%s.png\' % new_image[:-3])\n redirect(URL(r=request, f=\'imagelist\'))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(jamiesprogram)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/dreich/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py", line 35, in <module>\n File "/home/dreich/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py", line 15, in jamiesprogram\n os.system(\'python applications/turtle_art_images/modules/PngGenerator.py applications/turtle_art_images/uploads/\'+new_image)\nNameError: global name \'new_image\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-15.17-10-58.d2b352f6-4294-4583-ba1e-5c2ff8d81a2f b/errors/127.0.0.1.2010-06-15.17-10-58.d2b352f6-4294-4583-ba1e-5c2ff8d81a2f
new file mode 100644
index 0000000..42c60fa
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-15.17-10-58.d2b352f6-4294-4583-ba1e-5c2ff8d81a2f
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'creator\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n redirect(URL(r=request, f=\'jamiesprogram\')) \n return dict(form=form)\n\ndef jamiesprogram():\n newfile = db(db.comment.title==session.new_image_title).select().first()\n new_image = newfile.file\n print newfile\n os.system(\'python applications/turtle_art_images/modules/PngGenerator.py applications/turtle_art_images/uploads/\'+new_image)\n db(db.comment.title==session.new_image_title).update(newimage =\'applications/turtle_art_images/uplodates/%s.png\' % new_image[:-3])\n redirect(URL(r=request, f=\'imagelist\'))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(download)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/dreich/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py", line 34, in <module>\n File "/home/dreich/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py", line 32, in download\n return response.download(request, db)\n File "/home/dreich/lib/python/web2py/gluon/globals.py", line 195, in download\n (filename, stream) = field.retrieve(name)\n File "/home/dreich/lib/python/web2py/gluon/sql.py", line 2725, in retrieve\n return (filename, open(os.path.join(path, name), \'rb\'))\nIOError: [Errno 2] No such file or directory: \'/home/dreich/lib/python/web2py/applications/turtlesite/databases/../uploads/comment.file.9457e6586f80fc90.7371756172652e7461.png\'\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-15.17-11-47.c6ceaa6b-23e0-4b5d-80f5-d0ed29f23ba2 b/errors/127.0.0.1.2010-06-15.17-11-47.c6ceaa6b-23e0-4b5d-80f5-d0ed29f23ba2
new file mode 100644
index 0000000..b71c3ff
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-15.17-11-47.c6ceaa6b-23e0-4b5d-80f5-d0ed29f23ba2
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'creator\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n redirect(URL(r=request, f=\'jamiesprogram\')) \n return dict(form=form)\n\ndef jamiesprogram():\n newfile = db(db.comment.title==session.new_image_title).select().first()\n new_image = newfile.file\n print newfile\n os.system(\'python applications/turtlesite/modules/PngGenerator.py applications/turtle_art_images/uploads/\'+new_image)\n db(db.comment.title==session.new_image_title).update(newimage =\'applications/turtlesite/uplodates/%s.png\' % new_image[:-3])\n redirect(URL(r=request, f=\'imagelist\'))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(download)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/dreich/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py", line 34, in <module>\n File "/home/dreich/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py", line 32, in download\n return response.download(request, db)\n File "/home/dreich/lib/python/web2py/gluon/globals.py", line 195, in download\n (filename, stream) = field.retrieve(name)\n File "/home/dreich/lib/python/web2py/gluon/sql.py", line 2725, in retrieve\n return (filename, open(os.path.join(path, name), \'rb\'))\nIOError: [Errno 2] No such file or directory: \'/home/dreich/lib/python/web2py/applications/turtlesite/databases/../uploads/comment.file.a5a0c1815110a050.6f63742e7461.png\'\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-15.17-11-47.d5c501a0-e7a6-4aa2-9cc2-3a10fb7c9b58 b/errors/127.0.0.1.2010-06-15.17-11-47.d5c501a0-e7a6-4aa2-9cc2-3a10fb7c9b58
new file mode 100644
index 0000000..649bd46
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-15.17-11-47.d5c501a0-e7a6-4aa2-9cc2-3a10fb7c9b58
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'creator\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n redirect(URL(r=request, f=\'jamiesprogram\')) \n return dict(form=form)\n\ndef jamiesprogram():\n newfile = db(db.comment.title==session.new_image_title).select().first()\n new_image = newfile.file\n print newfile\n os.system(\'python applications/turtlesite/modules/PngGenerator.py applications/turtle_art_images/uploads/\'+new_image)\n db(db.comment.title==session.new_image_title).update(newimage =\'applications/turtlesite/uplodates/%s.png\' % new_image[:-3])\n redirect(URL(r=request, f=\'imagelist\'))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(download)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/dreich/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py", line 34, in <module>\n File "/home/dreich/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py", line 32, in download\n return response.download(request, db)\n File "/home/dreich/lib/python/web2py/gluon/globals.py", line 195, in download\n (filename, stream) = field.retrieve(name)\n File "/home/dreich/lib/python/web2py/gluon/sql.py", line 2725, in retrieve\n return (filename, open(os.path.join(path, name), \'rb\'))\nIOError: [Errno 2] No such file or directory: \'/home/dreich/lib/python/web2py/applications/turtlesite/databases/../uploads/comment.file.9457e6586f80fc90.7371756172652e7461.png\'\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-15.17-12-56.b3dc871a-875b-4a69-9ee4-a4d752496808 b/errors/127.0.0.1.2010-06-15.17-12-56.b3dc871a-875b-4a69-9ee4-a4d752496808
new file mode 100644
index 0000000..0cd161e
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-15.17-12-56.b3dc871a-875b-4a69-9ee4-a4d752496808
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'creator\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n redirect(URL(r=request, f=\'jamiesprogram\')) \n return dict(form=form)\n\ndef jamiesprogram():\n newfile = db(db.comment.title==session.new_image_title).select().first()\n new_image = newfile.file\n print newfile\n os.system(\'python applications/turtlesite/modules/PngGenerator.py applications/turtlesite/uploads/\'+new_image)\n db(db.comment.title==session.new_image_title).update(newimage =\'applications/turtlesite/uplodates/%s.png\' % new_image[:-3])\n redirect(URL(r=request, f=\'imagelist\'))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(download)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/dreich/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py", line 34, in <module>\n File "/home/dreich/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py", line 32, in download\n return response.download(request, db)\n File "/home/dreich/lib/python/web2py/gluon/globals.py", line 195, in download\n (filename, stream) = field.retrieve(name)\n File "/home/dreich/lib/python/web2py/gluon/sql.py", line 2725, in retrieve\n return (filename, open(os.path.join(path, name), \'rb\'))\nIOError: [Errno 2] No such file or directory: \'/home/dreich/lib/python/web2py/applications/turtlesite/databases/../uploads/comment.file.a5a0c1815110a050.6f63742e7461.png\'\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-15.17-12-56.c76b13a1-604e-413d-bd54-d36456556888 b/errors/127.0.0.1.2010-06-15.17-12-56.c76b13a1-604e-413d-bd54-d36456556888
new file mode 100644
index 0000000..30232f8
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-15.17-12-56.c76b13a1-604e-413d-bd54-d36456556888
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'creator\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n redirect(URL(r=request, f=\'jamiesprogram\')) \n return dict(form=form)\n\ndef jamiesprogram():\n newfile = db(db.comment.title==session.new_image_title).select().first()\n new_image = newfile.file\n print newfile\n os.system(\'python applications/turtlesite/modules/PngGenerator.py applications/turtlesite/uploads/\'+new_image)\n db(db.comment.title==session.new_image_title).update(newimage =\'applications/turtlesite/uplodates/%s.png\' % new_image[:-3])\n redirect(URL(r=request, f=\'imagelist\'))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(download)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/dreich/lib/python/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py", line 34, in <module>\n File "/home/dreich/lib/python/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/dreich/lib/python/web2py/applications/turtlesite/controllers/default.py", line 32, in download\n return response.download(request, db)\n File "/home/dreich/lib/python/web2py/gluon/globals.py", line 195, in download\n (filename, stream) = field.retrieve(name)\n File "/home/dreich/lib/python/web2py/gluon/sql.py", line 2725, in retrieve\n return (filename, open(os.path.join(path, name), \'rb\'))\nIOError: [Errno 2] No such file or directory: \'/home/dreich/lib/python/web2py/applications/turtlesite/databases/../uploads/comment.file.9457e6586f80fc90.7371756172652e7461.png\'\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-22.17-58-24.43169241-d580-433a-9534-40fd95c8ba0e b/errors/127.0.0.1.2010-06-22.17-58-24.43169241-d580-433a-9534-40fd95c8ba0e
new file mode 100644
index 0000000..30cafe8
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-22.17-58-24.43169241-d580-433a-9534-40fd95c8ba0e
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'creator\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n redirect(URL(r=request, f=\'jamiesprogram\')) \n return dict(form=form)\n\ndef jamiesprogram():\n newfile = db(db.comment.title==session.new_image_title).select().first()\n import pdb\n pdb.set_trace()\n new_image = newfile.file\n print newfile\n os.system(\'python applications/turtlesite/modules/PngGenerator.py applications/turtlesite/uploads/\'+new_image)\n db(db.comment.title==session.new_image_title).update(newimage =\'applications/turtlesite/uplodates/%s.png\' % new_image[:-3])\n redirect(URL(r=request, f=\'imagelist\'))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(jamiesprogram)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/web2py/applications/turtlesite/controllers/default.py", line 36, in <module>\n File "/home/jboisture/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/web2py/applications/turtlesite/controllers/default.py", line 14, in jamiesprogram\n new_image = newfile.file\n File "/home/jboisture/web2py/applications/turtlesite/controllers/default.py", line 14, in jamiesprogram\n new_image = newfile.file\n File "/usr/lib/python2.6/bdb.py", line 46, in trace_dispatch\n return self.dispatch_line(frame)\n File "/usr/lib/python2.6/bdb.py", line 65, in dispatch_line\n if self.quitting: raise BdbQuit\nBdbQuit\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-26.14-18-00.942dfcc0-58c1-4580-891e-a5831f65587a b/errors/127.0.0.1.2010-06-26.14-18-00.942dfcc0-58c1-4580-891e-a5831f65587a
new file mode 100644
index 0000000..30cafe8
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-26.14-18-00.942dfcc0-58c1-4580-891e-a5831f65587a
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'creator\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n redirect(URL(r=request, f=\'jamiesprogram\')) \n return dict(form=form)\n\ndef jamiesprogram():\n newfile = db(db.comment.title==session.new_image_title).select().first()\n import pdb\n pdb.set_trace()\n new_image = newfile.file\n print newfile\n os.system(\'python applications/turtlesite/modules/PngGenerator.py applications/turtlesite/uploads/\'+new_image)\n db(db.comment.title==session.new_image_title).update(newimage =\'applications/turtlesite/uplodates/%s.png\' % new_image[:-3])\n redirect(URL(r=request, f=\'imagelist\'))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(jamiesprogram)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/web2py/applications/turtlesite/controllers/default.py", line 36, in <module>\n File "/home/jboisture/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/web2py/applications/turtlesite/controllers/default.py", line 14, in jamiesprogram\n new_image = newfile.file\n File "/home/jboisture/web2py/applications/turtlesite/controllers/default.py", line 14, in jamiesprogram\n new_image = newfile.file\n File "/usr/lib/python2.6/bdb.py", line 46, in trace_dispatch\n return self.dispatch_line(frame)\n File "/usr/lib/python2.6/bdb.py", line 65, in dispatch_line\n if self.quitting: raise BdbQuit\nBdbQuit\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-26.14-29-02.e3e135f4-5f67-4e62-a3a4-f5eeb38c06cb b/errors/127.0.0.1.2010-06-26.14-29-02.e3e135f4-5f67-4e62-a3a4-f5eeb38c06cb
new file mode 100644
index 0000000..68b76e8
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-26.14-29-02.e3e135f4-5f67-4e62-a3a4-f5eeb38c06cb
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'creator\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n redirect(URL(r=request, f=\'jamiesprogram\')) \n return dict(form=form)\n\ndef jamiesprogram():\n newfile = db(db.comment.title==session.new_image_title).select().first()\n print db(db.comment.title=="test").select()[0][\'file\']\n print newfile.title\n import pdb\n pdb.set)trace()\n new_image = newfile.file\n print newfile\n \n os.system(\'python applications/turtlesite/modules/PngGenerator.py applications/turtlesite/uploads/\'+new_image)\n db(db.comment.title==session.new_image_title).update(newimage =\'applications/turtlesite/uplodates/%s.png\' % new_image[:-3])\n redirect(URL(r=request, f=\'imagelist\'))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/jboisture/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/jboisture/web2py/applications/turtlesite/controllers/default.py", line 15\n pdb.set)trace()\n ^\nSyntaxError: invalid syntax\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-26.14-29-08.01743076-f940-47a9-a1e9-e6e3d6122668 b/errors/127.0.0.1.2010-06-26.14-29-08.01743076-f940-47a9-a1e9-e6e3d6122668
new file mode 100644
index 0000000..68b76e8
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-26.14-29-08.01743076-f940-47a9-a1e9-e6e3d6122668
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'creator\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n redirect(URL(r=request, f=\'jamiesprogram\')) \n return dict(form=form)\n\ndef jamiesprogram():\n newfile = db(db.comment.title==session.new_image_title).select().first()\n print db(db.comment.title=="test").select()[0][\'file\']\n print newfile.title\n import pdb\n pdb.set)trace()\n new_image = newfile.file\n print newfile\n \n os.system(\'python applications/turtlesite/modules/PngGenerator.py applications/turtlesite/uploads/\'+new_image)\n db(db.comment.title==session.new_image_title).update(newimage =\'applications/turtlesite/uplodates/%s.png\' % new_image[:-3])\n redirect(URL(r=request, f=\'imagelist\'))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/jboisture/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/jboisture/web2py/applications/turtlesite/controllers/default.py", line 15\n pdb.set)trace()\n ^\nSyntaxError: invalid syntax\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-26.14-29-11.c5ef7ec4-58fa-4c31-bd75-6e9807bad314 b/errors/127.0.0.1.2010-06-26.14-29-11.c5ef7ec4-58fa-4c31-bd75-6e9807bad314
new file mode 100644
index 0000000..68b76e8
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-26.14-29-11.c5ef7ec4-58fa-4c31-bd75-6e9807bad314
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'creator\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n redirect(URL(r=request, f=\'jamiesprogram\')) \n return dict(form=form)\n\ndef jamiesprogram():\n newfile = db(db.comment.title==session.new_image_title).select().first()\n print db(db.comment.title=="test").select()[0][\'file\']\n print newfile.title\n import pdb\n pdb.set)trace()\n new_image = newfile.file\n print newfile\n \n os.system(\'python applications/turtlesite/modules/PngGenerator.py applications/turtlesite/uploads/\'+new_image)\n db(db.comment.title==session.new_image_title).update(newimage =\'applications/turtlesite/uplodates/%s.png\' % new_image[:-3])\n redirect(URL(r=request, f=\'imagelist\'))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/jboisture/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/jboisture/web2py/applications/turtlesite/controllers/default.py", line 15\n pdb.set)trace()\n ^\nSyntaxError: invalid syntax\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-26.14-29-21.2f1d3ccf-be29-4fde-9927-fe72dea2c404 b/errors/127.0.0.1.2010-06-26.14-29-21.2f1d3ccf-be29-4fde-9927-fe72dea2c404
new file mode 100644
index 0000000..68b76e8
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-26.14-29-21.2f1d3ccf-be29-4fde-9927-fe72dea2c404
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'creator\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n redirect(URL(r=request, f=\'jamiesprogram\')) \n return dict(form=form)\n\ndef jamiesprogram():\n newfile = db(db.comment.title==session.new_image_title).select().first()\n print db(db.comment.title=="test").select()[0][\'file\']\n print newfile.title\n import pdb\n pdb.set)trace()\n new_image = newfile.file\n print newfile\n \n os.system(\'python applications/turtlesite/modules/PngGenerator.py applications/turtlesite/uploads/\'+new_image)\n db(db.comment.title==session.new_image_title).update(newimage =\'applications/turtlesite/uplodates/%s.png\' % new_image[:-3])\n redirect(URL(r=request, f=\'imagelist\'))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/jboisture/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/jboisture/web2py/applications/turtlesite/controllers/default.py", line 15\n pdb.set)trace()\n ^\nSyntaxError: invalid syntax\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-06-26.14-31-17.97b6af6d-b028-4416-84c3-1c5cf2e77d55 b/errors/127.0.0.1.2010-06-26.14-31-17.97b6af6d-b028-4416-84c3-1c5cf2e77d55
new file mode 100644
index 0000000..8846c4a
--- /dev/null
+++ b/errors/127.0.0.1.2010-06-26.14-31-17.97b6af6d-b028-4416-84c3-1c5cf2e77d55
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'creator\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n redirect(URL(r=request, f=\'jamiesprogram\')) \n return dict(form=form)\n\ndef jamiesprogram():\n newfile = db(db.comment.title==session.new_image_title).select().first()\n print db(db.comment.title=="test").select()[0][\'file\']\n print newfile.title\n import pdb\n pdb.set_trace()\n new_image = newfile.file\n print newfile\n \n os.system(\'python applications/turtlesite/modules/PngGenerator.py applications/turtlesite/uploads/\'+new_image)\n db(db.comment.title==session.new_image_title).update(newimage =\'applications/turtlesite/uplodates/%s.png\' % new_image[:-3])\n redirect(URL(r=request, f=\'imagelist\'))\n return dict()\n \ndef imagelist():\n comments = db().select(db.comment.ALL)\n return dict(comments=comments)\n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(jamiesprogram)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/web2py/applications/turtlesite/controllers/default.py", line 39, in <module>\n File "/home/jboisture/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/web2py/applications/turtlesite/controllers/default.py", line 16, in jamiesprogram\n new_image = newfile.file\n File "/home/jboisture/web2py/applications/turtlesite/controllers/default.py", line 16, in jamiesprogram\n new_image = newfile.file\n File "/usr/lib/python2.6/bdb.py", line 46, in trace_dispatch\n return self.dispatch_line(frame)\n File "/usr/lib/python2.6/bdb.py", line 65, in dispatch_line\n if self.quitting: raise BdbQuit\nBdbQuit\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-06.11-14-07.d7c8aece-7bc3-4049-937b-30fb481f421d b/errors/127.0.0.1.2010-07-06.11-14-07.d7c8aece-7bc3-4049-937b-30fb481f421d
new file mode 100644
index 0000000..03e39bc
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-06.11-14-07.d7c8aece-7bc3-4049-937b-30fb481f421d
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/google_appengine/web2py/applications/turtlesite/models/db.py'
+p4
+sS'code'
+p5
+S'from gluon.contrib.gq import GQLDB\ndb=GQLDB()\nsession.connect(request,response,db=db)\n\n\ndb.define_table(\'comment\',\n Field(\'file\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension=\'ta\', error_message="Must be a Turtle Art file")]),\n Field(\'title\', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, \'comment.title\', error_message="Title is already taken")]),\n Field(\'image_id\'),\n Field(\'creator\', requires=IS_NOT_EMPTY(error_message="You must include your name")),\n Field(\'description\', \'text\'),\n Field(\'newimage\', \'upload\'))\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/google_appengine/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/google_appengine/web2py/applications/turtlesite/models/db.py", line 1, in <module>\n from gluon.contrib.gq import GQLDB\nImportError: No module named gq\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-06.21-18-26.e5bbcb96-f7a6-4440-888b-46bd1a677336 b/errors/127.0.0.1.2010-07-06.21-18-26.e5bbcb96-f7a6-4440-888b-46bd1a677336
new file mode 100644
index 0000000..d626576
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-06.21-18-26.e5bbcb96-f7a6-4440-888b-46bd1a677336
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/google_appengine/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n table = []\n comments = db().select(db.comment.ALL)\n i = 0\n row = []\n for comment in comments:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n table.append(row)\n import pdb\n pdb.set_trace()\n return dict(comments=table)\n\ndef upload():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'newimage\', \'creator\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n redirect(URL(r=request, f=\'imagelist\')) \n return dict(form=form)\n\n\ndef image():\n comment = db(db.comment.title==request.vars["title"]).select().first()\n return dict(comment = comment)\n \n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\ndef user(): return dict(form=auth())\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/google_appengine/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/google_appengine/web2py/applications/turtlesite/controllers/default.py", line 46, in <module>\n File "/home/jboisture/Desktop/google_appengine/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/google_appengine/web2py/applications/turtlesite/controllers/default.py", line 18, in index\n return dict(comments=table)\n File "/home/jboisture/Desktop/google_appengine/web2py/applications/turtlesite/controllers/default.py", line 18, in index\n return dict(comments=table)\n File "/usr/lib/python2.6/bdb.py", line 46, in trace_dispatch\n return self.dispatch_line(frame)\n File "/usr/lib/python2.6/bdb.py", line 65, in dispatch_line\n if self.quitting: raise BdbQuit\nBdbQuit\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-06.21-18-53.0f21c2ca-659d-4f8c-9f39-bda12e55bad0 b/errors/127.0.0.1.2010-07-06.21-18-53.0f21c2ca-659d-4f8c-9f39-bda12e55bad0
new file mode 100644
index 0000000..11a8c5c
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-06.21-18-53.0f21c2ca-659d-4f8c-9f39-bda12e55bad0
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/google_appengine/web2py/applications/turtlesite/models/db.py'
+p4
+sS'code'
+p5
+S'if request.env.web2py_runtime_gae:\n db = DAL(\'gae\')\n session.connect(request,response,db=db)\nelse:db = DAL("sqlite://storage.db")\n\ndb.define_table(\'comment\',\n Field(\'file\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension=\'ta\', error_message="Must be a Turtle Art file")]),\n Field(\'title\', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, \'comment.title\', error_message="Title is already taken")]),\n Field(\'image_id\'),\n Field(\'creator\', requires=IS_NOT_EMPTY(error_message="You must include your name")),\n Field(\'description\', \'text\'),\n Field(\'newimage\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a image to upload"), IS_UPLOAD_FILENAME(extension=\'png\', error_message="Must be a PNG image")]))\n\nauth_table = db.define_table(\n auth.settings.table_user_name,\n Field(\'user_name\', length=128),\n Field(\'email\', length=128, unique=True),\n Field(\'password\', \'password\', length=256,\n readable=False, label=\'Password\'),\n Field(\'registration_key\', length=128,\n writable=False, readable=False))\n\n\nauth_table.user_name.requires = \\\n IS_NOT_EMPTY(error_message=auth.messages.is_empty, IS_NOT_IN_DB(db, \'auth_table.user_name\', error_message="User name is already taken")])\nauth_table.password.requires = [IS_STRONG(), CRYPT()]\nauth_table.email.requires = [\n IS_EMAIL(error_message=auth.messages.invalid_email),\n IS_NOT_IN_DB(db, auth_table.email)]\nauth.settings.table_user = auth_table\n\n# before\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/google_appengine/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/jboisture/Desktop/google_appengine/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/jboisture/Desktop/google_appengine/web2py/applications/turtlesite/models/db.py", line 25\n IS_NOT_EMPTY(error_message=auth.messages.is_empty, IS_NOT_IN_DB(db, \'auth_table.user_name\', error_message="User name is already taken")])\n ^\nSyntaxError: invalid syntax\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-06.21-19-07.10b0d3ea-d4d6-4b6e-a119-db5d42150eaa b/errors/127.0.0.1.2010-07-06.21-19-07.10b0d3ea-d4d6-4b6e-a119-db5d42150eaa
new file mode 100644
index 0000000..11a8c5c
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-06.21-19-07.10b0d3ea-d4d6-4b6e-a119-db5d42150eaa
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/google_appengine/web2py/applications/turtlesite/models/db.py'
+p4
+sS'code'
+p5
+S'if request.env.web2py_runtime_gae:\n db = DAL(\'gae\')\n session.connect(request,response,db=db)\nelse:db = DAL("sqlite://storage.db")\n\ndb.define_table(\'comment\',\n Field(\'file\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension=\'ta\', error_message="Must be a Turtle Art file")]),\n Field(\'title\', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, \'comment.title\', error_message="Title is already taken")]),\n Field(\'image_id\'),\n Field(\'creator\', requires=IS_NOT_EMPTY(error_message="You must include your name")),\n Field(\'description\', \'text\'),\n Field(\'newimage\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a image to upload"), IS_UPLOAD_FILENAME(extension=\'png\', error_message="Must be a PNG image")]))\n\nauth_table = db.define_table(\n auth.settings.table_user_name,\n Field(\'user_name\', length=128),\n Field(\'email\', length=128, unique=True),\n Field(\'password\', \'password\', length=256,\n readable=False, label=\'Password\'),\n Field(\'registration_key\', length=128,\n writable=False, readable=False))\n\n\nauth_table.user_name.requires = \\\n IS_NOT_EMPTY(error_message=auth.messages.is_empty, IS_NOT_IN_DB(db, \'auth_table.user_name\', error_message="User name is already taken")])\nauth_table.password.requires = [IS_STRONG(), CRYPT()]\nauth_table.email.requires = [\n IS_EMAIL(error_message=auth.messages.invalid_email),\n IS_NOT_IN_DB(db, auth_table.email)]\nauth.settings.table_user = auth_table\n\n# before\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/google_appengine/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/jboisture/Desktop/google_appengine/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/jboisture/Desktop/google_appengine/web2py/applications/turtlesite/models/db.py", line 25\n IS_NOT_EMPTY(error_message=auth.messages.is_empty, IS_NOT_IN_DB(db, \'auth_table.user_name\', error_message="User name is already taken")])\n ^\nSyntaxError: invalid syntax\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-06.21-19-33.2df43f1a-91b2-493d-9ce8-f06efc4fe629 b/errors/127.0.0.1.2010-07-06.21-19-33.2df43f1a-91b2-493d-9ce8-f06efc4fe629
new file mode 100644
index 0000000..0609fe6
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-06.21-19-33.2df43f1a-91b2-493d-9ce8-f06efc4fe629
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/google_appengine/web2py/applications/turtlesite/models/db.py'
+p4
+sS'code'
+p5
+S'if request.env.web2py_runtime_gae:\n db = DAL(\'gae\')\n session.connect(request,response,db=db)\nelse:db = DAL("sqlite://storage.db")\n\ndb.define_table(\'comment\',\n Field(\'file\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension=\'ta\', error_message="Must be a Turtle Art file")]),\n Field(\'title\', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, \'comment.title\', error_message="Title is already taken")]),\n Field(\'image_id\'),\n Field(\'creator\', requires=IS_NOT_EMPTY(error_message="You must include your name")),\n Field(\'description\', \'text\'),\n Field(\'newimage\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a image to upload"), IS_UPLOAD_FILENAME(extension=\'png\', error_message="Must be a PNG image")]))\n\nauth_table = db.define_table(\n auth.settings.table_user_name,\n Field(\'user_name\', length=128),\n Field(\'email\', length=128, unique=True),\n Field(\'password\', \'password\', length=256,\n readable=False, label=\'Password\'),\n Field(\'registration_key\', length=128,\n writable=False, readable=False))\n\n\nauth_table.user_name.requires = \\\n IS_NOT_EMPTY(error_message=auth.messages.is_empty, IS_NOT_IN_DB(db, \'auth_table.user_name\', error_message="User name is already taken")])\nauth_table.password.requires = [IS_STRONG(), CRYPT()]\nauth_table.email.requires = [\n IS_EMAIL(error_message=auth.messages.invalid_email),\n IS_NOT_IN_DB(db, auth_table.email)]\nauth.settings.table_user = auth_table\n\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/google_appengine/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/jboisture/Desktop/google_appengine/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/jboisture/Desktop/google_appengine/web2py/applications/turtlesite/models/db.py", line 25\n IS_NOT_EMPTY(error_message=auth.messages.is_empty, IS_NOT_IN_DB(db, \'auth_table.user_name\', error_message="User name is already taken")])\n ^\nSyntaxError: invalid syntax\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-06.21-19-39.c5331736-649b-4269-aec4-9c20cb7a9403 b/errors/127.0.0.1.2010-07-06.21-19-39.c5331736-649b-4269-aec4-9c20cb7a9403
new file mode 100644
index 0000000..0609fe6
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-06.21-19-39.c5331736-649b-4269-aec4-9c20cb7a9403
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/google_appengine/web2py/applications/turtlesite/models/db.py'
+p4
+sS'code'
+p5
+S'if request.env.web2py_runtime_gae:\n db = DAL(\'gae\')\n session.connect(request,response,db=db)\nelse:db = DAL("sqlite://storage.db")\n\ndb.define_table(\'comment\',\n Field(\'file\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension=\'ta\', error_message="Must be a Turtle Art file")]),\n Field(\'title\', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, \'comment.title\', error_message="Title is already taken")]),\n Field(\'image_id\'),\n Field(\'creator\', requires=IS_NOT_EMPTY(error_message="You must include your name")),\n Field(\'description\', \'text\'),\n Field(\'newimage\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a image to upload"), IS_UPLOAD_FILENAME(extension=\'png\', error_message="Must be a PNG image")]))\n\nauth_table = db.define_table(\n auth.settings.table_user_name,\n Field(\'user_name\', length=128),\n Field(\'email\', length=128, unique=True),\n Field(\'password\', \'password\', length=256,\n readable=False, label=\'Password\'),\n Field(\'registration_key\', length=128,\n writable=False, readable=False))\n\n\nauth_table.user_name.requires = \\\n IS_NOT_EMPTY(error_message=auth.messages.is_empty, IS_NOT_IN_DB(db, \'auth_table.user_name\', error_message="User name is already taken")])\nauth_table.password.requires = [IS_STRONG(), CRYPT()]\nauth_table.email.requires = [\n IS_EMAIL(error_message=auth.messages.invalid_email),\n IS_NOT_IN_DB(db, auth_table.email)]\nauth.settings.table_user = auth_table\n\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/google_appengine/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/jboisture/Desktop/google_appengine/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/jboisture/Desktop/google_appengine/web2py/applications/turtlesite/models/db.py", line 25\n IS_NOT_EMPTY(error_message=auth.messages.is_empty, IS_NOT_IN_DB(db, \'auth_table.user_name\', error_message="User name is already taken")])\n ^\nSyntaxError: invalid syntax\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-06.21-19-57.3ae15d94-8f52-438b-87d4-67899bf9f10d b/errors/127.0.0.1.2010-07-06.21-19-57.3ae15d94-8f52-438b-87d4-67899bf9f10d
new file mode 100644
index 0000000..2aa1717
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-06.21-19-57.3ae15d94-8f52-438b-87d4-67899bf9f10d
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/google_appengine/web2py/applications/turtlesite/models/db.py'
+p4
+sS'code'
+p5
+S'if request.env.web2py_runtime_gae:\n db = DAL(\'gae\')\n session.connect(request,response,db=db)\nelse:db = DAL("sqlite://storage.db")\n\ndb.define_table(\'comment\',\n Field(\'file\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension=\'ta\', error_message="Must be a Turtle Art file")]),\n Field(\'title\', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, \'comment.title\', error_message="Title is already taken")]),\n Field(\'image_id\'),\n Field(\'creator\', requires=IS_NOT_EMPTY(error_message="You must include your name")),\n Field(\'description\', \'text\'),\n Field(\'newimage\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a image to upload"), IS_UPLOAD_FILENAME(extension=\'png\', error_message="Must be a PNG image")]))\n\nauth_table = db.define_table(\n auth.settings.table_user_name,\n Field(\'user_name\', length=128),\n Field(\'email\', length=128, unique=True),\n Field(\'password\', \'password\', length=256,\n readable=False, label=\'Password\'),\n Field(\'registration_key\', length=128,\n writable=False, readable=False))\n\n\n#auth_table.user_name.requires = \\\n# IS_NOT_EMPTY(error_message=auth.messages.is_empty, IS_NOT_IN_DB(db, \'auth_table.user_name\', #error_message="User name is already taken")])\n#auth_table.password.requires = [IS_STRONG(), CRYPT()]\n#auth_table.email.requires = [\n# IS_EMAIL(error_message=auth.messages.invalid_email),\n# IS_NOT_IN_DB(db, auth_table.email)]\n#auth.settings.table_user = auth_table\n\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/google_appengine/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/google_appengine/web2py/applications/turtlesite/models/db.py", line 15, in <module>\n auth.settings.table_user_name,\nNameError: name \'auth\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-06.21-19-58.dd1e45d8-6e4d-4b2a-a305-b68e57e5a3bb b/errors/127.0.0.1.2010-07-06.21-19-58.dd1e45d8-6e4d-4b2a-a305-b68e57e5a3bb
new file mode 100644
index 0000000..2aa1717
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-06.21-19-58.dd1e45d8-6e4d-4b2a-a305-b68e57e5a3bb
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/google_appengine/web2py/applications/turtlesite/models/db.py'
+p4
+sS'code'
+p5
+S'if request.env.web2py_runtime_gae:\n db = DAL(\'gae\')\n session.connect(request,response,db=db)\nelse:db = DAL("sqlite://storage.db")\n\ndb.define_table(\'comment\',\n Field(\'file\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension=\'ta\', error_message="Must be a Turtle Art file")]),\n Field(\'title\', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, \'comment.title\', error_message="Title is already taken")]),\n Field(\'image_id\'),\n Field(\'creator\', requires=IS_NOT_EMPTY(error_message="You must include your name")),\n Field(\'description\', \'text\'),\n Field(\'newimage\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a image to upload"), IS_UPLOAD_FILENAME(extension=\'png\', error_message="Must be a PNG image")]))\n\nauth_table = db.define_table(\n auth.settings.table_user_name,\n Field(\'user_name\', length=128),\n Field(\'email\', length=128, unique=True),\n Field(\'password\', \'password\', length=256,\n readable=False, label=\'Password\'),\n Field(\'registration_key\', length=128,\n writable=False, readable=False))\n\n\n#auth_table.user_name.requires = \\\n# IS_NOT_EMPTY(error_message=auth.messages.is_empty, IS_NOT_IN_DB(db, \'auth_table.user_name\', #error_message="User name is already taken")])\n#auth_table.password.requires = [IS_STRONG(), CRYPT()]\n#auth_table.email.requires = [\n# IS_EMAIL(error_message=auth.messages.invalid_email),\n# IS_NOT_IN_DB(db, auth_table.email)]\n#auth.settings.table_user = auth_table\n\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/google_appengine/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/google_appengine/web2py/applications/turtlesite/models/db.py", line 15, in <module>\n auth.settings.table_user_name,\nNameError: name \'auth\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-06.21-19-59.c27db2ab-8227-4039-97cf-622d2eb6cc65 b/errors/127.0.0.1.2010-07-06.21-19-59.c27db2ab-8227-4039-97cf-622d2eb6cc65
new file mode 100644
index 0000000..2aa1717
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-06.21-19-59.c27db2ab-8227-4039-97cf-622d2eb6cc65
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/google_appengine/web2py/applications/turtlesite/models/db.py'
+p4
+sS'code'
+p5
+S'if request.env.web2py_runtime_gae:\n db = DAL(\'gae\')\n session.connect(request,response,db=db)\nelse:db = DAL("sqlite://storage.db")\n\ndb.define_table(\'comment\',\n Field(\'file\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension=\'ta\', error_message="Must be a Turtle Art file")]),\n Field(\'title\', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, \'comment.title\', error_message="Title is already taken")]),\n Field(\'image_id\'),\n Field(\'creator\', requires=IS_NOT_EMPTY(error_message="You must include your name")),\n Field(\'description\', \'text\'),\n Field(\'newimage\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a image to upload"), IS_UPLOAD_FILENAME(extension=\'png\', error_message="Must be a PNG image")]))\n\nauth_table = db.define_table(\n auth.settings.table_user_name,\n Field(\'user_name\', length=128),\n Field(\'email\', length=128, unique=True),\n Field(\'password\', \'password\', length=256,\n readable=False, label=\'Password\'),\n Field(\'registration_key\', length=128,\n writable=False, readable=False))\n\n\n#auth_table.user_name.requires = \\\n# IS_NOT_EMPTY(error_message=auth.messages.is_empty, IS_NOT_IN_DB(db, \'auth_table.user_name\', #error_message="User name is already taken")])\n#auth_table.password.requires = [IS_STRONG(), CRYPT()]\n#auth_table.email.requires = [\n# IS_EMAIL(error_message=auth.messages.invalid_email),\n# IS_NOT_IN_DB(db, auth_table.email)]\n#auth.settings.table_user = auth_table\n\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/google_appengine/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/google_appengine/web2py/applications/turtlesite/models/db.py", line 15, in <module>\n auth.settings.table_user_name,\nNameError: name \'auth\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-06.21-24-34.fd350e5c-5e4d-447f-bb1e-3caf586f135b b/errors/127.0.0.1.2010-07-06.21-24-34.fd350e5c-5e4d-447f-bb1e-3caf586f135b
new file mode 100644
index 0000000..a6c432d
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-06.21-24-34.fd350e5c-5e4d-447f-bb1e-3caf586f135b
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/google_appengine/web2py/applications/turtlesite/models/db.py'
+p4
+sS'code'
+p5
+S'if request.env.web2py_runtime_gae:\n db = DAL(\'gae\')\n session.connect(request,response,db=db)\nelse:db = DAL("sqlite://storage.db")\n\ndb.define_table(\'comment\',\n Field(\'file\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension=\'ta\', error_message="Must be a Turtle Art file")]),\n Field(\'title\', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, \'comment.title\', error_message="Title is already taken")]),\n Field(\'image_id\'),\n Field(\'creator\', requires=IS_NOT_EMPTY(error_message="You must include your name")),\n Field(\'description\', \'text\'),\n Field(\'newimage\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a image to upload"), IS_UPLOAD_FILENAME(extension=\'png\', error_message="Must be a PNG image")]))\n\nauth_table = db.define_table(\n auth.settings.table_user_name,\n Field(\'user_name\', length=128 requires = [IS_NOT_EMPTY(error_message=auth.messages.is_empty), IS_NOT_IN_DB(db, \'auth_table.user_name\', error_message="User name is already taken")]),\n Field(\'email\', length=128, unique=True, requires = [IS_EMAIL(error_message=auth.messages.invalid_email), IS_NOT_IN_DB(db, auth_table.email)]),\n Field(\'password\', \'password\', length=256,\n readable=False, label=\'Password\', requires = [IS_STRONG(), CRYPT()]),\n Field(\'registration_key\', length=128,\n writable=False, readable=False))\n\n\nauth_table.user_name.requires = \\\n [IS_NOT_EMPTY(error_message=auth.messages.is_empty, IS_NOT_IN_DB(db, \'auth_table.user_name\', error_message="User name is already taken")])]\nauth_table.password.requires = [IS_STRONG(), CRYPT()]\nauth_table.email.requires = [\n IS_EMAIL(error_message=auth.messages.invalid_email),\n IS_NOT_IN_DB(db, auth_table.email)]\nauth.settings.table_user = auth_table\n\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/google_appengine/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/jboisture/Desktop/google_appengine/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/jboisture/Desktop/google_appengine/web2py/applications/turtlesite/models/db.py", line 16\n Field(\'user_name\', length=128 requires = [IS_NOT_EMPTY(error_message=auth.messages.is_empty), IS_NOT_IN_DB(db, \'auth_table.user_name\', error_message="User name is already taken")]),\n ^\nSyntaxError: invalid syntax\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-06.21-24-36.11ba35b4-698d-4436-a189-5789431bdf62 b/errors/127.0.0.1.2010-07-06.21-24-36.11ba35b4-698d-4436-a189-5789431bdf62
new file mode 100644
index 0000000..a6c432d
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-06.21-24-36.11ba35b4-698d-4436-a189-5789431bdf62
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/google_appengine/web2py/applications/turtlesite/models/db.py'
+p4
+sS'code'
+p5
+S'if request.env.web2py_runtime_gae:\n db = DAL(\'gae\')\n session.connect(request,response,db=db)\nelse:db = DAL("sqlite://storage.db")\n\ndb.define_table(\'comment\',\n Field(\'file\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension=\'ta\', error_message="Must be a Turtle Art file")]),\n Field(\'title\', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, \'comment.title\', error_message="Title is already taken")]),\n Field(\'image_id\'),\n Field(\'creator\', requires=IS_NOT_EMPTY(error_message="You must include your name")),\n Field(\'description\', \'text\'),\n Field(\'newimage\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a image to upload"), IS_UPLOAD_FILENAME(extension=\'png\', error_message="Must be a PNG image")]))\n\nauth_table = db.define_table(\n auth.settings.table_user_name,\n Field(\'user_name\', length=128 requires = [IS_NOT_EMPTY(error_message=auth.messages.is_empty), IS_NOT_IN_DB(db, \'auth_table.user_name\', error_message="User name is already taken")]),\n Field(\'email\', length=128, unique=True, requires = [IS_EMAIL(error_message=auth.messages.invalid_email), IS_NOT_IN_DB(db, auth_table.email)]),\n Field(\'password\', \'password\', length=256,\n readable=False, label=\'Password\', requires = [IS_STRONG(), CRYPT()]),\n Field(\'registration_key\', length=128,\n writable=False, readable=False))\n\n\nauth_table.user_name.requires = \\\n [IS_NOT_EMPTY(error_message=auth.messages.is_empty, IS_NOT_IN_DB(db, \'auth_table.user_name\', error_message="User name is already taken")])]\nauth_table.password.requires = [IS_STRONG(), CRYPT()]\nauth_table.email.requires = [\n IS_EMAIL(error_message=auth.messages.invalid_email),\n IS_NOT_IN_DB(db, auth_table.email)]\nauth.settings.table_user = auth_table\n\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/google_appengine/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/jboisture/Desktop/google_appengine/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/jboisture/Desktop/google_appengine/web2py/applications/turtlesite/models/db.py", line 16\n Field(\'user_name\', length=128 requires = [IS_NOT_EMPTY(error_message=auth.messages.is_empty), IS_NOT_IN_DB(db, \'auth_table.user_name\', error_message="User name is already taken")]),\n ^\nSyntaxError: invalid syntax\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-06.21-24-43.79d98631-a87c-4c48-9efd-037be4e90b2b b/errors/127.0.0.1.2010-07-06.21-24-43.79d98631-a87c-4c48-9efd-037be4e90b2b
new file mode 100644
index 0000000..a6c432d
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-06.21-24-43.79d98631-a87c-4c48-9efd-037be4e90b2b
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/google_appengine/web2py/applications/turtlesite/models/db.py'
+p4
+sS'code'
+p5
+S'if request.env.web2py_runtime_gae:\n db = DAL(\'gae\')\n session.connect(request,response,db=db)\nelse:db = DAL("sqlite://storage.db")\n\ndb.define_table(\'comment\',\n Field(\'file\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension=\'ta\', error_message="Must be a Turtle Art file")]),\n Field(\'title\', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, \'comment.title\', error_message="Title is already taken")]),\n Field(\'image_id\'),\n Field(\'creator\', requires=IS_NOT_EMPTY(error_message="You must include your name")),\n Field(\'description\', \'text\'),\n Field(\'newimage\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a image to upload"), IS_UPLOAD_FILENAME(extension=\'png\', error_message="Must be a PNG image")]))\n\nauth_table = db.define_table(\n auth.settings.table_user_name,\n Field(\'user_name\', length=128 requires = [IS_NOT_EMPTY(error_message=auth.messages.is_empty), IS_NOT_IN_DB(db, \'auth_table.user_name\', error_message="User name is already taken")]),\n Field(\'email\', length=128, unique=True, requires = [IS_EMAIL(error_message=auth.messages.invalid_email), IS_NOT_IN_DB(db, auth_table.email)]),\n Field(\'password\', \'password\', length=256,\n readable=False, label=\'Password\', requires = [IS_STRONG(), CRYPT()]),\n Field(\'registration_key\', length=128,\n writable=False, readable=False))\n\n\nauth_table.user_name.requires = \\\n [IS_NOT_EMPTY(error_message=auth.messages.is_empty, IS_NOT_IN_DB(db, \'auth_table.user_name\', error_message="User name is already taken")])]\nauth_table.password.requires = [IS_STRONG(), CRYPT()]\nauth_table.email.requires = [\n IS_EMAIL(error_message=auth.messages.invalid_email),\n IS_NOT_IN_DB(db, auth_table.email)]\nauth.settings.table_user = auth_table\n\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/google_appengine/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/jboisture/Desktop/google_appengine/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/jboisture/Desktop/google_appengine/web2py/applications/turtlesite/models/db.py", line 16\n Field(\'user_name\', length=128 requires = [IS_NOT_EMPTY(error_message=auth.messages.is_empty), IS_NOT_IN_DB(db, \'auth_table.user_name\', error_message="User name is already taken")]),\n ^\nSyntaxError: invalid syntax\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-06.21-25-29.7040e780-9f79-4fba-8b25-9acc557d8768 b/errors/127.0.0.1.2010-07-06.21-25-29.7040e780-9f79-4fba-8b25-9acc557d8768
new file mode 100644
index 0000000..a6c432d
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-06.21-25-29.7040e780-9f79-4fba-8b25-9acc557d8768
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/google_appengine/web2py/applications/turtlesite/models/db.py'
+p4
+sS'code'
+p5
+S'if request.env.web2py_runtime_gae:\n db = DAL(\'gae\')\n session.connect(request,response,db=db)\nelse:db = DAL("sqlite://storage.db")\n\ndb.define_table(\'comment\',\n Field(\'file\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension=\'ta\', error_message="Must be a Turtle Art file")]),\n Field(\'title\', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, \'comment.title\', error_message="Title is already taken")]),\n Field(\'image_id\'),\n Field(\'creator\', requires=IS_NOT_EMPTY(error_message="You must include your name")),\n Field(\'description\', \'text\'),\n Field(\'newimage\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a image to upload"), IS_UPLOAD_FILENAME(extension=\'png\', error_message="Must be a PNG image")]))\n\nauth_table = db.define_table(\n auth.settings.table_user_name,\n Field(\'user_name\', length=128 requires = [IS_NOT_EMPTY(error_message=auth.messages.is_empty), IS_NOT_IN_DB(db, \'auth_table.user_name\', error_message="User name is already taken")]),\n Field(\'email\', length=128, unique=True, requires = [IS_EMAIL(error_message=auth.messages.invalid_email), IS_NOT_IN_DB(db, auth_table.email)]),\n Field(\'password\', \'password\', length=256,\n readable=False, label=\'Password\', requires = [IS_STRONG(), CRYPT()]),\n Field(\'registration_key\', length=128,\n writable=False, readable=False))\n\n\nauth_table.user_name.requires = \\\n [IS_NOT_EMPTY(error_message=auth.messages.is_empty, IS_NOT_IN_DB(db, \'auth_table.user_name\', error_message="User name is already taken")])]\nauth_table.password.requires = [IS_STRONG(), CRYPT()]\nauth_table.email.requires = [\n IS_EMAIL(error_message=auth.messages.invalid_email),\n IS_NOT_IN_DB(db, auth_table.email)]\nauth.settings.table_user = auth_table\n\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/google_appengine/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/jboisture/Desktop/google_appengine/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/jboisture/Desktop/google_appengine/web2py/applications/turtlesite/models/db.py", line 16\n Field(\'user_name\', length=128 requires = [IS_NOT_EMPTY(error_message=auth.messages.is_empty), IS_NOT_IN_DB(db, \'auth_table.user_name\', error_message="User name is already taken")]),\n ^\nSyntaxError: invalid syntax\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-06.21-25-30.cfb814ba-4b82-4e50-b49f-7ec4e67c7287 b/errors/127.0.0.1.2010-07-06.21-25-30.cfb814ba-4b82-4e50-b49f-7ec4e67c7287
new file mode 100644
index 0000000..a6c432d
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-06.21-25-30.cfb814ba-4b82-4e50-b49f-7ec4e67c7287
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/google_appengine/web2py/applications/turtlesite/models/db.py'
+p4
+sS'code'
+p5
+S'if request.env.web2py_runtime_gae:\n db = DAL(\'gae\')\n session.connect(request,response,db=db)\nelse:db = DAL("sqlite://storage.db")\n\ndb.define_table(\'comment\',\n Field(\'file\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension=\'ta\', error_message="Must be a Turtle Art file")]),\n Field(\'title\', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, \'comment.title\', error_message="Title is already taken")]),\n Field(\'image_id\'),\n Field(\'creator\', requires=IS_NOT_EMPTY(error_message="You must include your name")),\n Field(\'description\', \'text\'),\n Field(\'newimage\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a image to upload"), IS_UPLOAD_FILENAME(extension=\'png\', error_message="Must be a PNG image")]))\n\nauth_table = db.define_table(\n auth.settings.table_user_name,\n Field(\'user_name\', length=128 requires = [IS_NOT_EMPTY(error_message=auth.messages.is_empty), IS_NOT_IN_DB(db, \'auth_table.user_name\', error_message="User name is already taken")]),\n Field(\'email\', length=128, unique=True, requires = [IS_EMAIL(error_message=auth.messages.invalid_email), IS_NOT_IN_DB(db, auth_table.email)]),\n Field(\'password\', \'password\', length=256,\n readable=False, label=\'Password\', requires = [IS_STRONG(), CRYPT()]),\n Field(\'registration_key\', length=128,\n writable=False, readable=False))\n\n\nauth_table.user_name.requires = \\\n [IS_NOT_EMPTY(error_message=auth.messages.is_empty, IS_NOT_IN_DB(db, \'auth_table.user_name\', error_message="User name is already taken")])]\nauth_table.password.requires = [IS_STRONG(), CRYPT()]\nauth_table.email.requires = [\n IS_EMAIL(error_message=auth.messages.invalid_email),\n IS_NOT_IN_DB(db, auth_table.email)]\nauth.settings.table_user = auth_table\n\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/google_appengine/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/jboisture/Desktop/google_appengine/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/jboisture/Desktop/google_appengine/web2py/applications/turtlesite/models/db.py", line 16\n Field(\'user_name\', length=128 requires = [IS_NOT_EMPTY(error_message=auth.messages.is_empty), IS_NOT_IN_DB(db, \'auth_table.user_name\', error_message="User name is already taken")]),\n ^\nSyntaxError: invalid syntax\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-06.21-27-21.6b386041-0db0-4912-8fd5-bd00e9dd64e8 b/errors/127.0.0.1.2010-07-06.21-27-21.6b386041-0db0-4912-8fd5-bd00e9dd64e8
new file mode 100644
index 0000000..b357fc1
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-06.21-27-21.6b386041-0db0-4912-8fd5-bd00e9dd64e8
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py'
+p4
+sS'code'
+p5
+S'if request.env.web2py_runtime_gae:\n db = DAL(\'gae\')\n session.connect(request,response,db=db)\nelse:db = DAL("sqlite://storage.db")\n\ndb.define_table(\'comment\',\n Field(\'file\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension=\'ta\', error_message="Must be a Turtle Art file")]),\n Field(\'title\', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, \'comment.title\', error_message="Title is already taken")]),\n Field(\'image_id\'),\n Field(\'creator\', requires=IS_NOT_EMPTY(error_message="You must include your name")),\n Field(\'description\', \'text\'),\n Field(\'newimage\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a image to upload"), IS_UPLOAD_FILENAME(extension=\'png\', error_message="Must be a PNG image")]))\n\nauth_table = db.define_table(\n auth.settings.table_user_name,\n Field(\'user_name\', length=128 requires = [IS_NOT_EMPTY(error_message=auth.messages.is_empty), IS_NOT_IN_DB(db, \'auth_table.user_name\', error_message="User name is already taken")]),\n Field(\'email\', length=128, unique=True, requires = [IS_EMAIL(error_message=auth.messages.invalid_email), IS_NOT_IN_DB(db, auth_table.email)]),\n Field(\'password\', \'password\', length=256,\n readable=False, label=\'Password\', requires = [IS_STRONG(), CRYPT()]),\n Field(\'registration_key\', length=128,\n writable=False, readable=False))\n\n\nauth_table.user_name.requires = \\\n [IS_NOT_EMPTY(error_message=auth.messages.is_empty, IS_NOT_IN_DB(db, \'auth_table.user_name\', error_message="User name is already taken")])]\nauth_table.password.requires = [IS_STRONG(), CRYPT()]\nauth_table.email.requires = [\n IS_EMAIL(error_message=auth.messages.invalid_email),\n IS_NOT_IN_DB(db, auth_table.email)]\nauth.settings.table_user = auth_table\n\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py", line 16\n Field(\'user_name\', length=128 requires = [IS_NOT_EMPTY(error_message=auth.messages.is_empty), IS_NOT_IN_DB(db, \'auth_table.user_name\', error_message="User name is already taken")]),\n ^\nSyntaxError: invalid syntax\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-06.21-27-51.87af17a3-f8af-480e-9aec-2843976dba75 b/errors/127.0.0.1.2010-07-06.21-27-51.87af17a3-f8af-480e-9aec-2843976dba75
new file mode 100644
index 0000000..b357fc1
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-06.21-27-51.87af17a3-f8af-480e-9aec-2843976dba75
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py'
+p4
+sS'code'
+p5
+S'if request.env.web2py_runtime_gae:\n db = DAL(\'gae\')\n session.connect(request,response,db=db)\nelse:db = DAL("sqlite://storage.db")\n\ndb.define_table(\'comment\',\n Field(\'file\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension=\'ta\', error_message="Must be a Turtle Art file")]),\n Field(\'title\', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, \'comment.title\', error_message="Title is already taken")]),\n Field(\'image_id\'),\n Field(\'creator\', requires=IS_NOT_EMPTY(error_message="You must include your name")),\n Field(\'description\', \'text\'),\n Field(\'newimage\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a image to upload"), IS_UPLOAD_FILENAME(extension=\'png\', error_message="Must be a PNG image")]))\n\nauth_table = db.define_table(\n auth.settings.table_user_name,\n Field(\'user_name\', length=128 requires = [IS_NOT_EMPTY(error_message=auth.messages.is_empty), IS_NOT_IN_DB(db, \'auth_table.user_name\', error_message="User name is already taken")]),\n Field(\'email\', length=128, unique=True, requires = [IS_EMAIL(error_message=auth.messages.invalid_email), IS_NOT_IN_DB(db, auth_table.email)]),\n Field(\'password\', \'password\', length=256,\n readable=False, label=\'Password\', requires = [IS_STRONG(), CRYPT()]),\n Field(\'registration_key\', length=128,\n writable=False, readable=False))\n\n\nauth_table.user_name.requires = \\\n [IS_NOT_EMPTY(error_message=auth.messages.is_empty, IS_NOT_IN_DB(db, \'auth_table.user_name\', error_message="User name is already taken")])]\nauth_table.password.requires = [IS_STRONG(), CRYPT()]\nauth_table.email.requires = [\n IS_EMAIL(error_message=auth.messages.invalid_email),\n IS_NOT_IN_DB(db, auth_table.email)]\nauth.settings.table_user = auth_table\n\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py", line 16\n Field(\'user_name\', length=128 requires = [IS_NOT_EMPTY(error_message=auth.messages.is_empty), IS_NOT_IN_DB(db, \'auth_table.user_name\', error_message="User name is already taken")]),\n ^\nSyntaxError: invalid syntax\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-06.21-27-52.f705d212-1d5c-4272-b3af-c9fd0a0a5104 b/errors/127.0.0.1.2010-07-06.21-27-52.f705d212-1d5c-4272-b3af-c9fd0a0a5104
new file mode 100644
index 0000000..b357fc1
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-06.21-27-52.f705d212-1d5c-4272-b3af-c9fd0a0a5104
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py'
+p4
+sS'code'
+p5
+S'if request.env.web2py_runtime_gae:\n db = DAL(\'gae\')\n session.connect(request,response,db=db)\nelse:db = DAL("sqlite://storage.db")\n\ndb.define_table(\'comment\',\n Field(\'file\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension=\'ta\', error_message="Must be a Turtle Art file")]),\n Field(\'title\', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, \'comment.title\', error_message="Title is already taken")]),\n Field(\'image_id\'),\n Field(\'creator\', requires=IS_NOT_EMPTY(error_message="You must include your name")),\n Field(\'description\', \'text\'),\n Field(\'newimage\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a image to upload"), IS_UPLOAD_FILENAME(extension=\'png\', error_message="Must be a PNG image")]))\n\nauth_table = db.define_table(\n auth.settings.table_user_name,\n Field(\'user_name\', length=128 requires = [IS_NOT_EMPTY(error_message=auth.messages.is_empty), IS_NOT_IN_DB(db, \'auth_table.user_name\', error_message="User name is already taken")]),\n Field(\'email\', length=128, unique=True, requires = [IS_EMAIL(error_message=auth.messages.invalid_email), IS_NOT_IN_DB(db, auth_table.email)]),\n Field(\'password\', \'password\', length=256,\n readable=False, label=\'Password\', requires = [IS_STRONG(), CRYPT()]),\n Field(\'registration_key\', length=128,\n writable=False, readable=False))\n\n\nauth_table.user_name.requires = \\\n [IS_NOT_EMPTY(error_message=auth.messages.is_empty, IS_NOT_IN_DB(db, \'auth_table.user_name\', error_message="User name is already taken")])]\nauth_table.password.requires = [IS_STRONG(), CRYPT()]\nauth_table.email.requires = [\n IS_EMAIL(error_message=auth.messages.invalid_email),\n IS_NOT_IN_DB(db, auth_table.email)]\nauth.settings.table_user = auth_table\n\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py", line 16\n Field(\'user_name\', length=128 requires = [IS_NOT_EMPTY(error_message=auth.messages.is_empty), IS_NOT_IN_DB(db, \'auth_table.user_name\', error_message="User name is already taken")]),\n ^\nSyntaxError: invalid syntax\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-06.21-29-15.280641a8-e44d-4076-b209-755fc4295910 b/errors/127.0.0.1.2010-07-06.21-29-15.280641a8-e44d-4076-b209-755fc4295910
new file mode 100644
index 0000000..5abee74
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-06.21-29-15.280641a8-e44d-4076-b209-755fc4295910
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py'
+p4
+sS'code'
+p5
+S'if request.env.web2py_runtime_gae:\n db = DAL(\'gae\')\n session.connect(request,response,db=db)\nelse:db = DAL("sqlite://storage.db")\n\ndb.define_table(\'comment\',\n Field(\'file\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension=\'ta\', error_message="Must be a Turtle Art file")]),\n Field(\'title\', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, \'comment.title\', error_message="Title is already taken")]),\n Field(\'image_id\'),\n Field(\'creator\', requires=IS_NOT_EMPTY(error_message="You must include your name")),\n Field(\'description\', \'text\'),\n Field(\'newimage\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a image to upload"), IS_UPLOAD_FILENAME(extension=\'png\', error_message="Must be a PNG image")]))\n\nauth_table = db.define_table(\n auth.settings.table_user_name,\n Field(\'user_name\', length=128, requires = [IS_NOT_EMPTY(error_message=auth.messages.is_empty), IS_NOT_IN_DB(db, \'auth_table.user_name\', error_message="User name is already taken")]),\n Field(\'email\', length=128, unique=True, requires = [IS_EMAIL(error_message=auth.messages.invalid_email), IS_NOT_IN_DB(db, auth_table.email)]),\n Field(\'password\', \'password\', length=256,\n readable=False, label=\'Password\', requires = [IS_STRONG(), CRYPT()]),\n Field(\'registration_key\', length=128,\n writable=False, readable=False))\n\nauth.settings.table_user = auth_table\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py", line 15, in <module>\n auth.settings.table_user_name,\nNameError: name \'auth\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-06.21-29-55.314af018-1e67-47df-acb3-3d7902b5ec4f b/errors/127.0.0.1.2010-07-06.21-29-55.314af018-1e67-47df-acb3-3d7902b5ec4f
new file mode 100644
index 0000000..64f1246
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-06.21-29-55.314af018-1e67-47df-acb3-3d7902b5ec4f
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py'
+p4
+sS'code'
+p5
+S'if request.env.web2py_runtime_gae:\n db = DAL(\'gae\')\n session.connect(request,response,db=db)\nelse:db = DAL("sqlite://storage.db")\n\ndb.define_table(\'comment\',\n Field(\'file\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension=\'ta\', error_message="Must be a Turtle Art file")]),\n Field(\'title\', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, \'comment.title\', error_message="Title is already taken")]),\n Field(\'image_id\'),\n Field(\'creator\', requires=IS_NOT_EMPTY(error_message="You must include your name")),\n Field(\'description\', \'text\'),\n Field(\'newimage\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a image to upload"), IS_UPLOAD_FILENAME(extension=\'png\', error_message="Must be a PNG image")]))\nauth = Auth(globals(),db)\nauth_table = db.define_table(\n auth.settings.table_user_name,\n Field(\'user_name\', length=128, requires = [IS_NOT_EMPTY(error_message=auth.messages.is_empty), IS_NOT_IN_DB(db, \'auth_table.user_name\', error_message="User name is already taken")]),\n Field(\'email\', length=128, unique=True, requires = [IS_EMAIL(error_message=auth.messages.invalid_email), IS_NOT_IN_DB(db, auth_table.email)]),\n Field(\'password\', \'password\', length=256,\n readable=False, label=\'Password\', requires = [IS_STRONG(), CRYPT()]),\n Field(\'registration_key\', length=128,\n writable=False, readable=False))\n\nauth.settings.table_user = auth_table\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py", line 13, in <module>\n auth = Auth(globals(),db)\nNameError: name \'Auth\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-06.21-30-13.f44537c8-5e74-4c67-9d77-5eeef5fd244d b/errors/127.0.0.1.2010-07-06.21-30-13.f44537c8-5e74-4c67-9d77-5eeef5fd244d
new file mode 100644
index 0000000..64f1246
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-06.21-30-13.f44537c8-5e74-4c67-9d77-5eeef5fd244d
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py'
+p4
+sS'code'
+p5
+S'if request.env.web2py_runtime_gae:\n db = DAL(\'gae\')\n session.connect(request,response,db=db)\nelse:db = DAL("sqlite://storage.db")\n\ndb.define_table(\'comment\',\n Field(\'file\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension=\'ta\', error_message="Must be a Turtle Art file")]),\n Field(\'title\', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, \'comment.title\', error_message="Title is already taken")]),\n Field(\'image_id\'),\n Field(\'creator\', requires=IS_NOT_EMPTY(error_message="You must include your name")),\n Field(\'description\', \'text\'),\n Field(\'newimage\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a image to upload"), IS_UPLOAD_FILENAME(extension=\'png\', error_message="Must be a PNG image")]))\nauth = Auth(globals(),db)\nauth_table = db.define_table(\n auth.settings.table_user_name,\n Field(\'user_name\', length=128, requires = [IS_NOT_EMPTY(error_message=auth.messages.is_empty), IS_NOT_IN_DB(db, \'auth_table.user_name\', error_message="User name is already taken")]),\n Field(\'email\', length=128, unique=True, requires = [IS_EMAIL(error_message=auth.messages.invalid_email), IS_NOT_IN_DB(db, auth_table.email)]),\n Field(\'password\', \'password\', length=256,\n readable=False, label=\'Password\', requires = [IS_STRONG(), CRYPT()]),\n Field(\'registration_key\', length=128,\n writable=False, readable=False))\n\nauth.settings.table_user = auth_table\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py", line 13, in <module>\n auth = Auth(globals(),db)\nNameError: name \'Auth\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-06.21-30-42.a68356ed-8805-4d90-bc2a-c1152684b45a b/errors/127.0.0.1.2010-07-06.21-30-42.a68356ed-8805-4d90-bc2a-c1152684b45a
new file mode 100644
index 0000000..adc43d8
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-06.21-30-42.a68356ed-8805-4d90-bc2a-c1152684b45a
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py'
+p4
+sS'code'
+p5
+S'if request.env.web2py_runtime_gae:\n db = DAL(\'gae\')\n session.connect(request,response,db=db)\nelse:db = DAL("sqlite://storage.db")\n\ndb.define_table(\'comment\',\n Field(\'file\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension=\'ta\', error_message="Must be a Turtle Art file")]),\n Field(\'title\', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, \'comment.title\', error_message="Title is already taken")]),\n Field(\'image_id\'),\n Field(\'creator\', requires=IS_NOT_EMPTY(error_message="You must include your name")),\n Field(\'description\', \'text\'),\n Field(\'newimage\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a image to upload"), IS_UPLOAD_FILENAME(extension=\'png\', error_message="Must be a PNG image")]))\nfrom gluon.tools import Auth\nauth = Auth(globals(),db)\nauth_table = db.define_table(\n auth.settings.table_user_name,\n Field(\'user_name\', length=128, requires = [IS_NOT_EMPTY(error_message=auth.messages.is_empty), IS_NOT_IN_DB(db, \'auth_table.user_name\', error_message="User name is already taken")]),\n Field(\'email\', length=128, unique=True, requires = [IS_EMAIL(error_message=auth.messages.invalid_email), IS_NOT_IN_DB(db, auth_table.email)]),\n Field(\'password\', \'password\', length=256,\n readable=False, label=\'Password\', requires = [IS_STRONG(), CRYPT()]),\n Field(\'registration_key\', length=128,\n writable=False, readable=False))\n\nauth.settings.table_user = auth_table\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py", line 18, in <module>\n Field(\'email\', length=128, unique=True, requires = [IS_EMAIL(error_message=auth.messages.invalid_email), IS_NOT_IN_DB(db, auth_table.email)]),\nNameError: name \'auth_table\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-06.21-32-55.1455d8c8-5bca-4abd-8abb-b5b6ff94644e b/errors/127.0.0.1.2010-07-06.21-32-55.1455d8c8-5bca-4abd-8abb-b5b6ff94644e
new file mode 100644
index 0000000..fe63151
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-06.21-32-55.1455d8c8-5bca-4abd-8abb-b5b6ff94644e
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py'
+p4
+sS'code'
+p5
+S'if request.env.web2py_runtime_gae:\n db = DAL(\'gae\')\n session.connect(request,response,db=db)\nelse:db = DAL("sqlite://storage.db")\n\ndb.define_table(\'comment\',\n Field(\'file\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension=\'ta\', error_message="Must be a Turtle Art file")]),\n Field(\'title\', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, \'comment.title\', error_message="Title is already taken")]),\n Field(\'image_id\'),\n Field(\'creator\', requires=IS_NOT_EMPTY(error_message="You must include your name")),\n Field(\'description\', \'text\'),\n Field(\'newimage\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a image to upload"), IS_UPLOAD_FILENAME(extension=\'png\', error_message="Must be a PNG image")]))\nfrom gluon.tools import Auth\nauth = Auth(globals(),db)\nauth_table = db.define_table(\n auth.settings.table_user_name,\n Field(\'user_name\', length=128, requires = [IS_NOT_EMPTY(error_message=auth.messages.is_empty), IS_NOT_IN_DB(db, \'auth_table.user_name\', error_message="User name is already taken")]),\n Field(\'email\', length=128, unique=True, requires = [IS_EMAIL(error_message=auth.messages.invalid_email), IS_NOT_IN_DB(db, \'auth_table.email\')]),\n Field(\'password\', \'password\', length=256,\n readable=False, label=\'Password\', requires = [IS_STRONG(), CRYPT()]),\n Field(\'registration_key\', length=128,\n writable=False, readable=False))\n\nauth.settings.table_user = auth_table\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py", line 22, in <module>\n writable=False, readable=False))\n File "/home/jboisture/Desktop/web2py/gluon/sql.py", line 1309, in define_table\n t._create(migrate=migrate, fake_migrate=fake_migrate)\n File "/home/jboisture/Desktop/web2py/gluon/sql.py", line 1730, in _create\n self._db._execute(query)\n File "/home/jboisture/Desktop/web2py/gluon/sql.py", line 899, in <lambda>\n self._execute = lambda *a, **b: self._cursor.execute(*a, **b)\nOperationalError: table auth_user already exists\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-06.21-35-16.b352a050-21ae-413f-8ee9-a3ff49b4e4d9 b/errors/127.0.0.1.2010-07-06.21-35-16.b352a050-21ae-413f-8ee9-a3ff49b4e4d9
new file mode 100644
index 0000000..971997d
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-06.21-35-16.b352a050-21ae-413f-8ee9-a3ff49b4e4d9
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py'
+p4
+sS'code'
+p5
+S'if request.env.web2py_runtime_gae:\n db = DAL(\'gae\')\n session.connect(request,response,db=db)\nelse:db = DAL("sqlite://storage.db")\n\ndb.define_table(\'comment\',\n Field(\'file\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension=\'ta\', error_message="Must be a Turtle Art file")]),\n Field(\'title\', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, \'comment.title\', error_message="Title is already taken")]),\n Field(\'image_id\'),\n Field(\'creator\', requires=IS_NOT_EMPTY(error_message="You must include your name")),\n Field(\'description\', \'text\'),\n Field(\'newimage\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a image to upload"), IS_UPLOAD_FILENAME(extension=\'png\', error_message="Must be a PNG image")]))\nfrom gluon.tools import Auth\nauth = Auth(globals(),db)\nauth_table = db.define_table(\n auth.settings.table_user_name,\n Field(\'user_name\', length=128),\n Field(\'email\', length=128, unique=True),\n Field(\'password\', \'password\', length=256,\n readable=False, label=\'Password\'),\n Field(\'registration_key\', length=128, writable=False, readable=False))\n\nauth.settings.table_user = auth_table\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py", line 21, in <module>\n Field(\'registration_key\', length=128, writable=False, readable=False))\n File "/home/jboisture/Desktop/web2py/gluon/sql.py", line 1309, in define_table\n t._create(migrate=migrate, fake_migrate=fake_migrate)\n File "/home/jboisture/Desktop/web2py/gluon/sql.py", line 1730, in _create\n self._db._execute(query)\n File "/home/jboisture/Desktop/web2py/gluon/sql.py", line 899, in <lambda>\n self._execute = lambda *a, **b: self._cursor.execute(*a, **b)\nOperationalError: table auth_user already exists\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-06.21-35-17.143e16c3-1b07-4019-a4e4-9de63bca17dd b/errors/127.0.0.1.2010-07-06.21-35-17.143e16c3-1b07-4019-a4e4-9de63bca17dd
new file mode 100644
index 0000000..971997d
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-06.21-35-17.143e16c3-1b07-4019-a4e4-9de63bca17dd
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py'
+p4
+sS'code'
+p5
+S'if request.env.web2py_runtime_gae:\n db = DAL(\'gae\')\n session.connect(request,response,db=db)\nelse:db = DAL("sqlite://storage.db")\n\ndb.define_table(\'comment\',\n Field(\'file\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension=\'ta\', error_message="Must be a Turtle Art file")]),\n Field(\'title\', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, \'comment.title\', error_message="Title is already taken")]),\n Field(\'image_id\'),\n Field(\'creator\', requires=IS_NOT_EMPTY(error_message="You must include your name")),\n Field(\'description\', \'text\'),\n Field(\'newimage\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a image to upload"), IS_UPLOAD_FILENAME(extension=\'png\', error_message="Must be a PNG image")]))\nfrom gluon.tools import Auth\nauth = Auth(globals(),db)\nauth_table = db.define_table(\n auth.settings.table_user_name,\n Field(\'user_name\', length=128),\n Field(\'email\', length=128, unique=True),\n Field(\'password\', \'password\', length=256,\n readable=False, label=\'Password\'),\n Field(\'registration_key\', length=128, writable=False, readable=False))\n\nauth.settings.table_user = auth_table\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py", line 21, in <module>\n Field(\'registration_key\', length=128, writable=False, readable=False))\n File "/home/jboisture/Desktop/web2py/gluon/sql.py", line 1309, in define_table\n t._create(migrate=migrate, fake_migrate=fake_migrate)\n File "/home/jboisture/Desktop/web2py/gluon/sql.py", line 1730, in _create\n self._db._execute(query)\n File "/home/jboisture/Desktop/web2py/gluon/sql.py", line 899, in <lambda>\n self._execute = lambda *a, **b: self._cursor.execute(*a, **b)\nOperationalError: table auth_user already exists\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-06.21-37-59.45e285c7-b075-47b1-91c5-8838ae416d1b b/errors/127.0.0.1.2010-07-06.21-37-59.45e285c7-b075-47b1-91c5-8838ae416d1b
new file mode 100644
index 0000000..22041d1
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-06.21-37-59.45e285c7-b075-47b1-91c5-8838ae416d1b
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py'
+p4
+sS'code'
+p5
+S'if request.env.web2py_runtime_gae:\n db = DAL(\'gae\')\n session.connect(request,response,db=db)\nelse:db = DAL("sqlite://storage.db")\n\ndb.define_table(\'comment\',\n Field(\'file\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension=\'ta\', error_message="Must be a Turtle Art file")]),\n Field(\'title\', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, \'comment.title\', error_message="Title is already taken")]),\n Field(\'image_id\'),\n Field(\'creator\', requires=IS_NOT_EMPTY(error_message="You must include your name")),\n Field(\'description\', \'text\'),\n Field(\'newimage\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a image to upload"), IS_UPLOAD_FILENAME(extension=\'png\', error_message="Must be a PNG image")]))\nfrom gluon.tools import Auth\nauth = Auth(globals(),db)\nauth_table = db.define_table(\n auth.settings.table_user_name,\n Field(\'username\', length=128, default="),\n Field(\'email\', length=128, default=", unique=True),\n Field(\'password\', \'password\', length=256,\n readable=False, label=\'Password\'),\n Field(\'registration_key\', length=128, default= ",\n writable=False, readable=False))\n\n\nauth_table.username.requires = IS_NOT_IN_DB(db, auth_table.username)\nauth_table.password.requires = [IS_STRONG(), CRYPT()]\nauth_table.email.requires = [\n IS_EMAIL(error_message=auth.messages.invalid_email),\n IS_NOT_IN_DB(db, auth_table.email)]\nauth.settings.table_user = auth_table\n\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py", line 17\n Field(\'username\', length=128, default="),\n ^\nSyntaxError: EOL while scanning string literal\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-06.21-38-29.747e8df8-2355-4719-a6e2-550a47e1a4b0 b/errors/127.0.0.1.2010-07-06.21-38-29.747e8df8-2355-4719-a6e2-550a47e1a4b0
new file mode 100644
index 0000000..d4069b1
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-06.21-38-29.747e8df8-2355-4719-a6e2-550a47e1a4b0
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py'
+p4
+sS'code'
+p5
+S'if request.env.web2py_runtime_gae:\n db = DAL(\'gae\')\n session.connect(request,response,db=db)\nelse:db = DAL("sqlite://storage.db")\n\ndb.define_table(\'comment\',\n Field(\'file\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension=\'ta\', error_message="Must be a Turtle Art file")]),\n Field(\'title\', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, \'comment.title\', error_message="Title is already taken")]),\n Field(\'image_id\'),\n Field(\'creator\', requires=IS_NOT_EMPTY(error_message="You must include your name")),\n Field(\'description\', \'text\'),\n Field(\'newimage\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a image to upload"), IS_UPLOAD_FILENAME(extension=\'png\', error_message="Must be a PNG image")]))\nfrom gluon.tools import Auth\nauth = Auth(globals(),db)\nauth_table = db.define_table(\n auth.settings.table_user_name,\n Field(\'username\', length=128, default=""),\n Field(\'email\', length=128, default="", unique=True),\n Field(\'password\', \'password\', length=256,\n readable=False, label=\'Password\'),\n Field(\'registration_key\', length=128, default= "",\n writable=False, readable=False))\n\n\nauth_table.username.requires = IS_NOT_IN_DB(db, auth_table.username)\nauth_table.password.requires = [IS_STRONG(), CRYPT()]\nauth_table.email.requires = [\n IS_EMAIL(error_message=auth.messages.invalid_email),\n IS_NOT_IN_DB(db, auth_table.email)]\nauth.settings.table_user = auth_table\n\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py", line 22, in <module>\n writable=False, readable=False))\n File "/home/jboisture/Desktop/web2py/gluon/sql.py", line 1309, in define_table\n t._create(migrate=migrate, fake_migrate=fake_migrate)\n File "/home/jboisture/Desktop/web2py/gluon/sql.py", line 1730, in _create\n self._db._execute(query)\n File "/home/jboisture/Desktop/web2py/gluon/sql.py", line 899, in <lambda>\n self._execute = lambda *a, **b: self._cursor.execute(*a, **b)\nOperationalError: table auth_user already exists\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-06.21-39-15.34d2f46b-1647-4259-89e5-77c71e49db35 b/errors/127.0.0.1.2010-07-06.21-39-15.34d2f46b-1647-4259-89e5-77c71e49db35
new file mode 100644
index 0000000..2462794
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-06.21-39-15.34d2f46b-1647-4259-89e5-77c71e49db35
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py'
+p4
+sS'code'
+p5
+S'if request.env.web2py_runtime_gae:\n db = DAL(\'gae\')\n session.connect(request,response,db=db)\nelse:db = DAL("sqlite://storage.db")\n\ndb.define_table(\'comment\',\n Field(\'file\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension=\'ta\', error_message="Must be a Turtle Art file")]),\n Field(\'title\', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, \'comment.title\', error_message="Title is already taken")]),\n Field(\'image_id\'),\n Field(\'creator\', requires=IS_NOT_EMPTY(error_message="You must include your name")),\n Field(\'description\', \'text\'),\n Field(\'newimage\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a image to upload"), IS_UPLOAD_FILENAME(extension=\'png\', error_message="Must be a PNG image")]))\nfrom gluon.tools import Auth\nauth = Auth(globals(),db)\nauth_table = db.define_table(\n auth.settings.table_user_name,\n Field(\'username\', length=128, default=""),\n Field(\'email\', length=128, default="", unique=True),\n Field(\'password\', \'password\', length=256,\n readable=False, label=\'Password\'),\n Field(\'registration_key\', length=128, default= "",\n writable=False, readable=False))\n\n\nauth_table.username.requires = IS_NOT_IN_DB(db, auth_table.username)\nauth_table.password.requires = [IS_STRONG(), CRYPT()]\nauth_table.email.requires = [\n IS_EMAIL(error_message=auth.messages.invalid_email),\n IS_NOT_IN_DB(db, auth_table.email)]\nauth.settings.table_user = auth_table\nauth.define_tables()\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py", line 22, in <module>\n writable=False, readable=False))\n File "/home/jboisture/Desktop/web2py/gluon/sql.py", line 1309, in define_table\n t._create(migrate=migrate, fake_migrate=fake_migrate)\n File "/home/jboisture/Desktop/web2py/gluon/sql.py", line 1730, in _create\n self._db._execute(query)\n File "/home/jboisture/Desktop/web2py/gluon/sql.py", line 899, in <lambda>\n self._execute = lambda *a, **b: self._cursor.execute(*a, **b)\nOperationalError: table auth_user already exists\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-06.21-39-31.754b17ce-a8b7-40a2-a3f0-5e32802de9a5 b/errors/127.0.0.1.2010-07-06.21-39-31.754b17ce-a8b7-40a2-a3f0-5e32802de9a5
new file mode 100644
index 0000000..42e6674
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-06.21-39-31.754b17ce-a8b7-40a2-a3f0-5e32802de9a5
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py'
+p4
+sS'code'
+p5
+S'if request.env.web2py_runtime_gae:\n db = DAL(\'gae\')\n session.connect(request,response,db=db)\nelse:db = DAL("sqlite://storage.db")\n\ndb.define_table(\'comment\',\n Field(\'file\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension=\'ta\', error_message="Must be a Turtle Art file")]),\n Field(\'title\', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, \'comment.title\', error_message="Title is already taken")]),\n Field(\'image_id\'),\n Field(\'creator\', requires=IS_NOT_EMPTY(error_message="You must include your name")),\n Field(\'description\', \'text\'),\n Field(\'newimage\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a image to upload"), IS_UPLOAD_FILENAME(extension=\'png\', error_message="Must be a PNG image")]))\nfrom gluon.tools import Auth\nauth = Auth(globals(),db)\nauth.define_tables()\nauth_table = db.define_table(\n auth.settings.table_user_name,\n Field(\'username\', length=128, default=""),\n Field(\'email\', length=128, default="", unique=True),\n Field(\'password\', \'password\', length=256,\n readable=False, label=\'Password\'),\n Field(\'registration_key\', length=128, default= "",\n writable=False, readable=False))\n\n\nauth_table.username.requires = IS_NOT_IN_DB(db, auth_table.username)\nauth_table.password.requires = [IS_STRONG(), CRYPT()]\nauth_table.email.requires = [\n IS_EMAIL(error_message=auth.messages.invalid_email),\n IS_NOT_IN_DB(db, auth_table.email)]\nauth.settings.table_user = auth_table\n\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py", line 15, in <module>\n auth.define_tables()\n File "/home/jboisture/Desktop/web2py/gluon/tools.py", line 1059, in define_tables\n format=\'%(first_name)s %(last_name)s (%(id)s)\')\n File "/home/jboisture/Desktop/web2py/gluon/sql.py", line 1309, in define_table\n t._create(migrate=migrate, fake_migrate=fake_migrate)\n File "/home/jboisture/Desktop/web2py/gluon/sql.py", line 1730, in _create\n self._db._execute(query)\n File "/home/jboisture/Desktop/web2py/gluon/sql.py", line 899, in <lambda>\n self._execute = lambda *a, **b: self._cursor.execute(*a, **b)\nOperationalError: table auth_user already exists\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-06.21-42-17.0beaf7a6-4047-4601-b12e-0eb0f18217ee b/errors/127.0.0.1.2010-07-06.21-42-17.0beaf7a6-4047-4601-b12e-0eb0f18217ee
new file mode 100644
index 0000000..9286595
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-06.21-42-17.0beaf7a6-4047-4601-b12e-0eb0f18217ee
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py'
+p4
+sS'code'
+p5
+S'if request.env.web2py_runtime_gae:\n db = DAL(\'gae\')\n session.connect(request,response,db=db)\nelse:db = DAL("sqlite://storage.db")\n\ndb.define_table(\'comment\',\n Field(\'file\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension=\'ta\', error_message="Must be a Turtle Art file")]),\n Field(\'title\', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, \'comment.title\', error_message="Title is already taken")]),\n Field(\'image_id\'),\n Field(\'creator\', requires=IS_NOT_EMPTY(error_message="You must include your name")),\n Field(\'description\', \'text\'),\n Field(\'newimage\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a image to upload"), IS_UPLOAD_FILENAME(extension=\'png\', error_message="Must be a PNG image")]))\nfrom gluon.tools import Auth\nauth = Auth(globals(),db)\nauth_table = db.define_table(\n auth.settings.table_user_name,\n Field(\'username\', length=128, default="", unique = True),\n Field(\'email\', length=128, default="", unique=True),\n Field(\'password\', \'password\', length=256,\n readable=False, label=\'Password\'),\n Field(\'registration_key\', length=128, default= "",\n writable=False, readable=False))\n\n\nauth_table.username.requires = IS_NOT_IN_DB(db, auth_table.username)\nauth_table.password.requires = [IS_STRONG(), CRYPT()]\nauth_table.email.requires = [\n IS_EMAIL(error_message=auth.messages.invalid_email),\n IS_NOT_IN_DB(db, auth_table.email)]\nauth.settings.table_user = auth_table\nauth.define_tables()\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py", line 22, in <module>\n writable=False, readable=False))\n File "/home/jboisture/Desktop/web2py/gluon/sql.py", line 1309, in define_table\n t._create(migrate=migrate, fake_migrate=fake_migrate)\n File "/home/jboisture/Desktop/web2py/gluon/sql.py", line 1730, in _create\n self._db._execute(query)\n File "/home/jboisture/Desktop/web2py/gluon/sql.py", line 899, in <lambda>\n self._execute = lambda *a, **b: self._cursor.execute(*a, **b)\nOperationalError: table auth_user already exists\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-06.21-49-35.9f326f13-a1f9-4073-82ce-fe391cc9c5dd b/errors/127.0.0.1.2010-07-06.21-49-35.9f326f13-a1f9-4073-82ce-fe391cc9c5dd
new file mode 100644
index 0000000..565ea08
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-06.21-49-35.9f326f13-a1f9-4073-82ce-fe391cc9c5dd
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n table = []\n comments = db().select(db.comment.ALL)\n i = 0\n row = []\n for comment in comments:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n table.append(row)\n return dict(comments=table)\n\ndef upload():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'newimage\', \'creator\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n redirect(URL(r=request, f=\'imagelist\')) \n return dict(form=form)\n\n\ndef image():\n comment = db(db.comment.title==request.vars["title"]).select().first()\n return dict(comment = comment)\n \n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\ndef user(): \n import pdb\n pdb.set_trace()\n return dict(form=auth())\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(user)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 47, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 37, in user\n return dict(form=auth())\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 37, in user\n return dict(form=auth())\n File "/usr/lib/python2.6/bdb.py", line 46, in trace_dispatch\n return self.dispatch_line(frame)\n File "/usr/lib/python2.6/bdb.py", line 65, in dispatch_line\n if self.quitting: raise BdbQuit\nBdbQuit\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-06.21-50-11.44d39e34-37d3-4d88-ba83-774ac8f10eb7 b/errors/127.0.0.1.2010-07-06.21-50-11.44d39e34-37d3-4d88-ba83-774ac8f10eb7
new file mode 100644
index 0000000..cd66655
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-06.21-50-11.44d39e34-37d3-4d88-ba83-774ac8f10eb7
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n table = []\n comments = db().select(db.comment.ALL)\n i = 0\n row = []\n for comment in comments:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n table.append(row)\n return dict(comments=table)\n\ndef upload():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'newimage\', \'creator\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n redirect(URL(r=request, f=\'imagelist\')) \n return dict(form=form)\n\n\ndef image():\n comment = db(db.comment.title==request.vars["title"]).select().first()\n return dict(comment = comment)\n \n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\ndef user(): \n import pdb\n pdb.set_trace()\n return dict(form=auth())\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(user)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 47, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 37, in user\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 37, in user\n File "/usr/lib/python2.6/bdb.py", line 46, in trace_dispatch\n return self.dispatch_line(frame)\n File "/usr/lib/python2.6/bdb.py", line 65, in dispatch_line\n if self.quitting: raise BdbQuit\nBdbQuit\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-06.22-04-03.090862c3-e8a3-48e4-bbf9-01fdc1a0567f b/errors/127.0.0.1.2010-07-06.22-04-03.090862c3-e8a3-48e4-bbf9-01fdc1a0567f
new file mode 100644
index 0000000..44a13e2
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-06.22-04-03.090862c3-e8a3-48e4-bbf9-01fdc1a0567f
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/views/default/index.html'
+p4
+sS'code'
+p5
+S'response.write(\'<html>\\n <link rel="stylesheet" href="../static/glike.css" type="text/css" />\\n <head>\\n <title>Turtle Art Image Database</title>\\n </head>\\n <body>\\n <div id="header">\\n <h1><a href="index.html" >Home</a></h1>\\n <ul>\\n \',escape=False)\nif auth.is_logged_in()\nresponse.write(\'<li>\',escape=False)\nresponse.write(auth.user.username+": ")\nresponse.write(\'</li><li><a href="upload.html" >New Image</a></li><li><a href="adminpage.html" >Clear All</a></li>\\n \',escape=False)\nif not auth.is_logged_in()\nresponse.write(\'<li><a href="user.html">log in</a></li>\\n </ul>\\n </div>\\n <div id=\\\'bodycontent\\\'>\\n \\n<h1>Submissions</h1>\\n <table border = 20>\\n \',escape=False)\nfor row in comments:\n response.write(\'\\n <tr>\\n \',escape=False)\n for comment in row:\n response.write(\'<td><a href = \',escape=False)\n response.write("/turtlesite/default/image.html?title="+comment.title)\n response.write(\'><img width="250px" src="\',escape=False)\n response.write(URL(r=request, f=\'download\', args=comment.newimage))\n response.write(\'" onclick="ajax(\\\'ajaxwiki_onclick\\\',[\\\'text\\\'],\\\'html\\\')"/></a></td>\',escape=False)\n pass\n response.write(\'\\n </tr>\\n </table>\\n\\n </div>\\n </body>\\n </style>\\n</html>\\n\',escape=False)'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/views/default/index.html", line 2\n if auth.is_logged_in()\n ^\nSyntaxError: invalid syntax\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-06.22-04-03.0b487c87-1bb7-4a1d-b926-b72f5066229a b/errors/127.0.0.1.2010-07-06.22-04-03.0b487c87-1bb7-4a1d-b926-b72f5066229a
new file mode 100644
index 0000000..05d26b4
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-06.22-04-03.0b487c87-1bb7-4a1d-b926-b72f5066229a
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n table = []\n comments = db().select(db.comment.ALL)\n i = 0\n row = []\n for comment in comments:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n table.append(row)\n return dict(comments=table)\n\ndef upload():\n import pdb\n pdb.set_trace()\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'newimage\', \'creator\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n comment = db(db.comment.title==request.vars["title"]).select().first()\n return dict(comment = comment)\n \n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(upload)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 47, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 21, in upload\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'newimage\', \'creator\', \'description\'])\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 21, in upload\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'newimage\', \'creator\', \'description\'])\n File "/usr/lib/python2.6/bdb.py", line 46, in trace_dispatch\n return self.dispatch_line(frame)\n File "/usr/lib/python2.6/bdb.py", line 65, in dispatch_line\n if self.quitting: raise BdbQuit\nBdbQuit\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-06.22-04-03.c19ffad3-d858-4ba6-a628-374f9db0b6e8 b/errors/127.0.0.1.2010-07-06.22-04-03.c19ffad3-d858-4ba6-a628-374f9db0b6e8
new file mode 100644
index 0000000..44a13e2
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-06.22-04-03.c19ffad3-d858-4ba6-a628-374f9db0b6e8
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/views/default/index.html'
+p4
+sS'code'
+p5
+S'response.write(\'<html>\\n <link rel="stylesheet" href="../static/glike.css" type="text/css" />\\n <head>\\n <title>Turtle Art Image Database</title>\\n </head>\\n <body>\\n <div id="header">\\n <h1><a href="index.html" >Home</a></h1>\\n <ul>\\n \',escape=False)\nif auth.is_logged_in()\nresponse.write(\'<li>\',escape=False)\nresponse.write(auth.user.username+": ")\nresponse.write(\'</li><li><a href="upload.html" >New Image</a></li><li><a href="adminpage.html" >Clear All</a></li>\\n \',escape=False)\nif not auth.is_logged_in()\nresponse.write(\'<li><a href="user.html">log in</a></li>\\n </ul>\\n </div>\\n <div id=\\\'bodycontent\\\'>\\n \\n<h1>Submissions</h1>\\n <table border = 20>\\n \',escape=False)\nfor row in comments:\n response.write(\'\\n <tr>\\n \',escape=False)\n for comment in row:\n response.write(\'<td><a href = \',escape=False)\n response.write("/turtlesite/default/image.html?title="+comment.title)\n response.write(\'><img width="250px" src="\',escape=False)\n response.write(URL(r=request, f=\'download\', args=comment.newimage))\n response.write(\'" onclick="ajax(\\\'ajaxwiki_onclick\\\',[\\\'text\\\'],\\\'html\\\')"/></a></td>\',escape=False)\n pass\n response.write(\'\\n </tr>\\n </table>\\n\\n </div>\\n </body>\\n </style>\\n</html>\\n\',escape=False)'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/views/default/index.html", line 2\n if auth.is_logged_in()\n ^\nSyntaxError: invalid syntax\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-06.22-04-23.7bf1efca-9329-4593-9acb-1ad0264ddf40 b/errors/127.0.0.1.2010-07-06.22-04-23.7bf1efca-9329-4593-9acb-1ad0264ddf40
new file mode 100644
index 0000000..44a13e2
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-06.22-04-23.7bf1efca-9329-4593-9acb-1ad0264ddf40
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/views/default/index.html'
+p4
+sS'code'
+p5
+S'response.write(\'<html>\\n <link rel="stylesheet" href="../static/glike.css" type="text/css" />\\n <head>\\n <title>Turtle Art Image Database</title>\\n </head>\\n <body>\\n <div id="header">\\n <h1><a href="index.html" >Home</a></h1>\\n <ul>\\n \',escape=False)\nif auth.is_logged_in()\nresponse.write(\'<li>\',escape=False)\nresponse.write(auth.user.username+": ")\nresponse.write(\'</li><li><a href="upload.html" >New Image</a></li><li><a href="adminpage.html" >Clear All</a></li>\\n \',escape=False)\nif not auth.is_logged_in()\nresponse.write(\'<li><a href="user.html">log in</a></li>\\n </ul>\\n </div>\\n <div id=\\\'bodycontent\\\'>\\n \\n<h1>Submissions</h1>\\n <table border = 20>\\n \',escape=False)\nfor row in comments:\n response.write(\'\\n <tr>\\n \',escape=False)\n for comment in row:\n response.write(\'<td><a href = \',escape=False)\n response.write("/turtlesite/default/image.html?title="+comment.title)\n response.write(\'><img width="250px" src="\',escape=False)\n response.write(URL(r=request, f=\'download\', args=comment.newimage))\n response.write(\'" onclick="ajax(\\\'ajaxwiki_onclick\\\',[\\\'text\\\'],\\\'html\\\')"/></a></td>\',escape=False)\n pass\n response.write(\'\\n </tr>\\n </table>\\n\\n </div>\\n </body>\\n </style>\\n</html>\\n\',escape=False)'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/views/default/index.html", line 2\n if auth.is_logged_in()\n ^\nSyntaxError: invalid syntax\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-06.22-08-27.16d4e8f7-52a1-483c-bab6-28a7da00f034 b/errors/127.0.0.1.2010-07-06.22-08-27.16d4e8f7-52a1-483c-bab6-28a7da00f034
new file mode 100644
index 0000000..8341ac1
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-06.22-08-27.16d4e8f7-52a1-483c-bab6-28a7da00f034
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/views/default/image.html'
+p4
+sS'code'
+p5
+S'response.write(\'<html>\\n <link rel="stylesheet" href="../static/glike.css" type="text/css" />\\n <head>\\n <title>Turtle Art Image Database</title>\\n </head>\\n <body>\\n <div id="header">\\n <h1><a href="index.html" >Home</a></h1>\\n <ul>\\n \',escape=False)\nif auth.is_logged_in():\n response.write(\'<li>\',escape=False)\n response.write(auth.user.username+": ")\n response.write(\'</li><li><a href="upload.html" >New Image</a></li><li><a href="adminpage.html" >Clear All</a></li>\\n \',escape=False)\n if not auth.is_logged_in():\n response.write(\'<li><a href="user.html">log in</a></li>\',escape=False)\n pass\n response.write("\\n </ul>\\n </div>\\n <div id=\'bodycontent\'>\\n \\n<h1>",escape=False)\n response.write( comment.title)\n response.write(\'</h1>\\n<img width="1000px"src="\',escape=False)\n response.write(URL(r=request, f=\'download\', args=comment.newimage))\n response.write(\'">\\n<p>\',escape=False)\n response.write( "author: " + comment.creator)\n response.write(\'</p>\\n<a href="\',escape=False)\n response.write(URL(r=request, f=\'download\', args=comment.file))\n response.write(\'"> Download TA file</a>\\n<p>\',escape=False)\n response.write( "description: " + comment.description)\n response.write(\'</p>\\n\\n </div>\\n </body>\\n </style>\\n</html>\\n\',escape=False)'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/views/default/image.html", line 14, in <module>\nTypeError: cannot concatenate \'str\' and \'NoneType\' objects\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-06.22-11-35.1992b260-0fb2-44f8-830f-fa0b4c2e9214 b/errors/127.0.0.1.2010-07-06.22-11-35.1992b260-0fb2-44f8-830f-fa0b4c2e9214
new file mode 100644
index 0000000..8341ac1
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-06.22-11-35.1992b260-0fb2-44f8-830f-fa0b4c2e9214
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/views/default/image.html'
+p4
+sS'code'
+p5
+S'response.write(\'<html>\\n <link rel="stylesheet" href="../static/glike.css" type="text/css" />\\n <head>\\n <title>Turtle Art Image Database</title>\\n </head>\\n <body>\\n <div id="header">\\n <h1><a href="index.html" >Home</a></h1>\\n <ul>\\n \',escape=False)\nif auth.is_logged_in():\n response.write(\'<li>\',escape=False)\n response.write(auth.user.username+": ")\n response.write(\'</li><li><a href="upload.html" >New Image</a></li><li><a href="adminpage.html" >Clear All</a></li>\\n \',escape=False)\n if not auth.is_logged_in():\n response.write(\'<li><a href="user.html">log in</a></li>\',escape=False)\n pass\n response.write("\\n </ul>\\n </div>\\n <div id=\'bodycontent\'>\\n \\n<h1>",escape=False)\n response.write( comment.title)\n response.write(\'</h1>\\n<img width="1000px"src="\',escape=False)\n response.write(URL(r=request, f=\'download\', args=comment.newimage))\n response.write(\'">\\n<p>\',escape=False)\n response.write( "author: " + comment.creator)\n response.write(\'</p>\\n<a href="\',escape=False)\n response.write(URL(r=request, f=\'download\', args=comment.file))\n response.write(\'"> Download TA file</a>\\n<p>\',escape=False)\n response.write( "description: " + comment.description)\n response.write(\'</p>\\n\\n </div>\\n </body>\\n </style>\\n</html>\\n\',escape=False)'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/views/default/image.html", line 14, in <module>\nTypeError: cannot concatenate \'str\' and \'NoneType\' objects\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-06.22-12-07.a7fc9de5-6508-4100-9e21-694c7eeda5b3 b/errors/127.0.0.1.2010-07-06.22-12-07.a7fc9de5-6508-4100-9e21-694c7eeda5b3
new file mode 100644
index 0000000..8341ac1
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-06.22-12-07.a7fc9de5-6508-4100-9e21-694c7eeda5b3
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/views/default/image.html'
+p4
+sS'code'
+p5
+S'response.write(\'<html>\\n <link rel="stylesheet" href="../static/glike.css" type="text/css" />\\n <head>\\n <title>Turtle Art Image Database</title>\\n </head>\\n <body>\\n <div id="header">\\n <h1><a href="index.html" >Home</a></h1>\\n <ul>\\n \',escape=False)\nif auth.is_logged_in():\n response.write(\'<li>\',escape=False)\n response.write(auth.user.username+": ")\n response.write(\'</li><li><a href="upload.html" >New Image</a></li><li><a href="adminpage.html" >Clear All</a></li>\\n \',escape=False)\n if not auth.is_logged_in():\n response.write(\'<li><a href="user.html">log in</a></li>\',escape=False)\n pass\n response.write("\\n </ul>\\n </div>\\n <div id=\'bodycontent\'>\\n \\n<h1>",escape=False)\n response.write( comment.title)\n response.write(\'</h1>\\n<img width="1000px"src="\',escape=False)\n response.write(URL(r=request, f=\'download\', args=comment.newimage))\n response.write(\'">\\n<p>\',escape=False)\n response.write( "author: " + comment.creator)\n response.write(\'</p>\\n<a href="\',escape=False)\n response.write(URL(r=request, f=\'download\', args=comment.file))\n response.write(\'"> Download TA file</a>\\n<p>\',escape=False)\n response.write( "description: " + comment.description)\n response.write(\'</p>\\n\\n </div>\\n </body>\\n </style>\\n</html>\\n\',escape=False)'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/views/default/image.html", line 14, in <module>\nTypeError: cannot concatenate \'str\' and \'NoneType\' objects\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-06.22-13-12.38c2ad64-e6e0-440c-a410-089bbee1ead5 b/errors/127.0.0.1.2010-07-06.22-13-12.38c2ad64-e6e0-440c-a410-089bbee1ead5
new file mode 100644
index 0000000..8341ac1
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-06.22-13-12.38c2ad64-e6e0-440c-a410-089bbee1ead5
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/views/default/image.html'
+p4
+sS'code'
+p5
+S'response.write(\'<html>\\n <link rel="stylesheet" href="../static/glike.css" type="text/css" />\\n <head>\\n <title>Turtle Art Image Database</title>\\n </head>\\n <body>\\n <div id="header">\\n <h1><a href="index.html" >Home</a></h1>\\n <ul>\\n \',escape=False)\nif auth.is_logged_in():\n response.write(\'<li>\',escape=False)\n response.write(auth.user.username+": ")\n response.write(\'</li><li><a href="upload.html" >New Image</a></li><li><a href="adminpage.html" >Clear All</a></li>\\n \',escape=False)\n if not auth.is_logged_in():\n response.write(\'<li><a href="user.html">log in</a></li>\',escape=False)\n pass\n response.write("\\n </ul>\\n </div>\\n <div id=\'bodycontent\'>\\n \\n<h1>",escape=False)\n response.write( comment.title)\n response.write(\'</h1>\\n<img width="1000px"src="\',escape=False)\n response.write(URL(r=request, f=\'download\', args=comment.newimage))\n response.write(\'">\\n<p>\',escape=False)\n response.write( "author: " + comment.creator)\n response.write(\'</p>\\n<a href="\',escape=False)\n response.write(URL(r=request, f=\'download\', args=comment.file))\n response.write(\'"> Download TA file</a>\\n<p>\',escape=False)\n response.write( "description: " + comment.description)\n response.write(\'</p>\\n\\n </div>\\n </body>\\n </style>\\n</html>\\n\',escape=False)'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/views/default/image.html", line 14, in <module>\nTypeError: cannot concatenate \'str\' and \'NoneType\' objects\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.10-02-13.a42ee2c8-ad53-42b6-b15a-285e49cab96a b/errors/127.0.0.1.2010-07-07.10-02-13.a42ee2c8-ad53-42b6-b15a-285e49cab96a
new file mode 100644
index 0000000..3a44249
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.10-02-13.a42ee2c8-ad53-42b6-b15a-285e49cab96a
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/views/default/image.html'
+p4
+sS'code'
+p5
+S'response.write(\'<html>\\n <link rel="stylesheet" href="../static/glike.css" type="text/css" />\\n <head>\\n <title>Turtle Art Image Database</title>\\n </head>\\n <body>\\n <div id="header">\\n <h1><a href="index.html" >Home</a></h1>\\n <ul>\\n \',escape=False)\nif auth.is_logged_in():\n response.write(\'<li>\',escape=False)\n response.write(auth.user.username+": ")\n response.write(\'</li><li><a href="upload.html" >New Image</a></li><li><a href="adminpage.html" >Clear All</a></li>\',escape=False)\n pass\nresponse.write(\'\\n \',escape=False)\nif not auth.is_logged_in():\n response.write(\'<li><a href="user.html">log in</a></li>\',escape=False)\n pass\nresponse.write("\\n </ul>\\n </div>\\n <div id=\'bodycontent\'>\\n \\n<h1>",escape=False)\nresponse.write( comment.title)\nresponse.write(\'</h1>\\n<img width="1000px"src="\',escape=False)\nresponse.write(URL(r=request, f=\'download\', args=comment.newimage))\nresponse.write(\'">\\n<p>\',escape=False)\nresponse.write( "author: " + comment.creator)\nresponse.write(\'</p>\\n<a href="\',escape=False)\nresponse.write(URL(r=request, f=\'download\', args=comment.file))\nresponse.write(\'"> Download TA file</a>\\n<p>\',escape=False)\nresponse.write( "description: " + comment.description)\nresponse.write(\'</p>\\n\\n </div>\\n </body>\\n </style>\\n</html>\\n\',escape=False)'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/views/default/image.html", line 16, in <module>\nTypeError: cannot concatenate \'str\' and \'NoneType\' objects\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.10-02-19.036914e4-3143-4280-b5d5-e6196b9d5363 b/errors/127.0.0.1.2010-07-07.10-02-19.036914e4-3143-4280-b5d5-e6196b9d5363
new file mode 100644
index 0000000..3a44249
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.10-02-19.036914e4-3143-4280-b5d5-e6196b9d5363
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/views/default/image.html'
+p4
+sS'code'
+p5
+S'response.write(\'<html>\\n <link rel="stylesheet" href="../static/glike.css" type="text/css" />\\n <head>\\n <title>Turtle Art Image Database</title>\\n </head>\\n <body>\\n <div id="header">\\n <h1><a href="index.html" >Home</a></h1>\\n <ul>\\n \',escape=False)\nif auth.is_logged_in():\n response.write(\'<li>\',escape=False)\n response.write(auth.user.username+": ")\n response.write(\'</li><li><a href="upload.html" >New Image</a></li><li><a href="adminpage.html" >Clear All</a></li>\',escape=False)\n pass\nresponse.write(\'\\n \',escape=False)\nif not auth.is_logged_in():\n response.write(\'<li><a href="user.html">log in</a></li>\',escape=False)\n pass\nresponse.write("\\n </ul>\\n </div>\\n <div id=\'bodycontent\'>\\n \\n<h1>",escape=False)\nresponse.write( comment.title)\nresponse.write(\'</h1>\\n<img width="1000px"src="\',escape=False)\nresponse.write(URL(r=request, f=\'download\', args=comment.newimage))\nresponse.write(\'">\\n<p>\',escape=False)\nresponse.write( "author: " + comment.creator)\nresponse.write(\'</p>\\n<a href="\',escape=False)\nresponse.write(URL(r=request, f=\'download\', args=comment.file))\nresponse.write(\'"> Download TA file</a>\\n<p>\',escape=False)\nresponse.write( "description: " + comment.description)\nresponse.write(\'</p>\\n\\n </div>\\n </body>\\n </style>\\n</html>\\n\',escape=False)'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/views/default/image.html", line 16, in <module>\nTypeError: cannot concatenate \'str\' and \'NoneType\' objects\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.10-02-26.adfe0044-5526-4721-bfaf-6947db2dad72 b/errors/127.0.0.1.2010-07-07.10-02-26.adfe0044-5526-4721-bfaf-6947db2dad72
new file mode 100644
index 0000000..3a44249
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.10-02-26.adfe0044-5526-4721-bfaf-6947db2dad72
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/views/default/image.html'
+p4
+sS'code'
+p5
+S'response.write(\'<html>\\n <link rel="stylesheet" href="../static/glike.css" type="text/css" />\\n <head>\\n <title>Turtle Art Image Database</title>\\n </head>\\n <body>\\n <div id="header">\\n <h1><a href="index.html" >Home</a></h1>\\n <ul>\\n \',escape=False)\nif auth.is_logged_in():\n response.write(\'<li>\',escape=False)\n response.write(auth.user.username+": ")\n response.write(\'</li><li><a href="upload.html" >New Image</a></li><li><a href="adminpage.html" >Clear All</a></li>\',escape=False)\n pass\nresponse.write(\'\\n \',escape=False)\nif not auth.is_logged_in():\n response.write(\'<li><a href="user.html">log in</a></li>\',escape=False)\n pass\nresponse.write("\\n </ul>\\n </div>\\n <div id=\'bodycontent\'>\\n \\n<h1>",escape=False)\nresponse.write( comment.title)\nresponse.write(\'</h1>\\n<img width="1000px"src="\',escape=False)\nresponse.write(URL(r=request, f=\'download\', args=comment.newimage))\nresponse.write(\'">\\n<p>\',escape=False)\nresponse.write( "author: " + comment.creator)\nresponse.write(\'</p>\\n<a href="\',escape=False)\nresponse.write(URL(r=request, f=\'download\', args=comment.file))\nresponse.write(\'"> Download TA file</a>\\n<p>\',escape=False)\nresponse.write( "description: " + comment.description)\nresponse.write(\'</p>\\n\\n </div>\\n </body>\\n </style>\\n</html>\\n\',escape=False)'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/views/default/image.html", line 16, in <module>\nTypeError: cannot concatenate \'str\' and \'NoneType\' objects\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.10-27-50.3b1caa48-8a07-4c87-84f4-5de4fb6eb346 b/errors/127.0.0.1.2010-07-07.10-27-50.3b1caa48-8a07-4c87-84f4-5de4fb6eb346
new file mode 100644
index 0000000..9ab650d
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.10-27-50.3b1caa48-8a07-4c87-84f4-5de4fb6eb346
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/views/default/index.html'
+p4
+sS'code'
+p5
+S'response.write(\'<html>\\n <link rel="stylesheet" href="../static/glike.css" type="text/css" />\\n <head>\\n <title>Turtle Art Image Database</title>\\n </head>\\n <body>\\n <div id="header">\\n <h1><a href="index.html" >Home</a></h1>\\n <ul>\\n \',escape=False)\nif auth.is_logged_in():\n response.write(\'<li>\',escape=False)\n response.write(auth.user.username+": ")\n response.write(\'</li><li><a href="user/logout">Log Out</li><li><a href="upload.html" >New Image</a></li><li><a href="adminpage.html" >Clear All</a></li>\',escape=False)\n pass\nresponse.write(\'\\n \',escape=False)\nif not auth.is_logged_in():\n response.write(\'<li><a href="user.html">log in</a></li>\',escape=False)\n pass\nresponse.write("\\n </ul>\\n </div>\\n <div id=\'bodycontent\'>\\n \\n<h1>Submissions</h1>\\n ",escape=False)\nfor row in comments:\n response.write(\'\\n <table><tr>\\n \',escape=False)\n for comment in row:\n response.write(\'<td><a href = \',escape=False)\n response.write("/turtlesite/default/image.html?title="+comment.title)\n response.write(\'><img width="250px" src="\',escape=False)\n response.write(URL(r=request, f=\'download\', args=comment.newimage))\n response.write(\'" onclick="ajax(\\\'ajaxwiki_onclick\\\',[\\\'text\\\'],\\\'html\\\')"/></a></td>\',escape=False)\n pass\n response.write(\'\\n <center>\\n <ul>\\n \',escape=False)\n for count in range(pages)\n response.write(\'<li><a href = \',escape=False)\n response.write("index.html?page="+str(count+1)>{{=count+1)\n response.write(\'</li>\',escape=False)\n pass\nresponse.write(\'\\n </tr></table>\\n\\n </div>\\n </body>\\n </style>\\n</html>\\n\',escape=False)'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/views/default/index.html", line 22\n for count in range(pages)\n ^\nSyntaxError: invalid syntax\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.10-27-50.c7d6778c-c551-4178-9239-b4ee1f8f036c b/errors/127.0.0.1.2010-07-07.10-27-50.c7d6778c-c551-4178-9239-b4ee1f8f036c
new file mode 100644
index 0000000..1f378db
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.10-27-50.c7d6778c-c551-4178-9239-b4ee1f8f036c
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n import pdb\n pdb.set_trace()\n table = []\n comments = db().select(db.comment.ALL)\n i = 0\n row = []\n for comment in comments:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n table.append(row)\n return dict(comments=table)\n\ndef upload():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n print auth.user.username\n db(db.comment.title==session.new_image_title).update(creator = auth.user.username)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n comment = db(db.comment.title==request.vars["title"]).select().first()\n return dict(comment = comment)\n \n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 49, in <module>\n redirect(\'index.html\')\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 6, in index\n table = []\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 6, in index\n table = []\n File "/usr/lib/python2.6/bdb.py", line 46, in trace_dispatch\n return self.dispatch_line(frame)\n File "/usr/lib/python2.6/bdb.py", line 65, in dispatch_line\n if self.quitting: raise BdbQuit\nBdbQuit\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.10-28-13.70a61cbc-653e-40b1-a8b2-f649d5915194 b/errors/127.0.0.1.2010-07-07.10-28-13.70a61cbc-653e-40b1-a8b2-f649d5915194
new file mode 100644
index 0000000..9ab650d
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.10-28-13.70a61cbc-653e-40b1-a8b2-f649d5915194
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/views/default/index.html'
+p4
+sS'code'
+p5
+S'response.write(\'<html>\\n <link rel="stylesheet" href="../static/glike.css" type="text/css" />\\n <head>\\n <title>Turtle Art Image Database</title>\\n </head>\\n <body>\\n <div id="header">\\n <h1><a href="index.html" >Home</a></h1>\\n <ul>\\n \',escape=False)\nif auth.is_logged_in():\n response.write(\'<li>\',escape=False)\n response.write(auth.user.username+": ")\n response.write(\'</li><li><a href="user/logout">Log Out</li><li><a href="upload.html" >New Image</a></li><li><a href="adminpage.html" >Clear All</a></li>\',escape=False)\n pass\nresponse.write(\'\\n \',escape=False)\nif not auth.is_logged_in():\n response.write(\'<li><a href="user.html">log in</a></li>\',escape=False)\n pass\nresponse.write("\\n </ul>\\n </div>\\n <div id=\'bodycontent\'>\\n \\n<h1>Submissions</h1>\\n ",escape=False)\nfor row in comments:\n response.write(\'\\n <table><tr>\\n \',escape=False)\n for comment in row:\n response.write(\'<td><a href = \',escape=False)\n response.write("/turtlesite/default/image.html?title="+comment.title)\n response.write(\'><img width="250px" src="\',escape=False)\n response.write(URL(r=request, f=\'download\', args=comment.newimage))\n response.write(\'" onclick="ajax(\\\'ajaxwiki_onclick\\\',[\\\'text\\\'],\\\'html\\\')"/></a></td>\',escape=False)\n pass\n response.write(\'\\n <center>\\n <ul>\\n \',escape=False)\n for count in range(pages)\n response.write(\'<li><a href = \',escape=False)\n response.write("index.html?page="+str(count+1)>{{=count+1)\n response.write(\'</li>\',escape=False)\n pass\nresponse.write(\'\\n </tr></table>\\n\\n </div>\\n </body>\\n </style>\\n</html>\\n\',escape=False)'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/views/default/index.html", line 22\n for count in range(pages)\n ^\nSyntaxError: invalid syntax\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.10-28-34.26981abd-e292-4ae5-8570-1ca7d0427ebf b/errors/127.0.0.1.2010-07-07.10-28-34.26981abd-e292-4ae5-8570-1ca7d0427ebf
new file mode 100644
index 0000000..ebd7998
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.10-28-34.26981abd-e292-4ae5-8570-1ca7d0427ebf
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/views/default/index.html'
+p4
+sS'code'
+p5
+S'response.write(\'<html>\\n <link rel="stylesheet" href="../static/glike.css" type="text/css" />\\n <head>\\n <title>Turtle Art Image Database</title>\\n </head>\\n <body>\\n <div id="header">\\n <h1><a href="index.html" >Home</a></h1>\\n <ul>\\n \',escape=False)\nif auth.is_logged_in():\n response.write(\'<li>\',escape=False)\n response.write(auth.user.username+": ")\n response.write(\'</li><li><a href="user/logout">Log Out</li><li><a href="upload.html" >New Image</a></li><li><a href="adminpage.html" >Clear All</a></li>\',escape=False)\n pass\nresponse.write(\'\\n \',escape=False)\nif not auth.is_logged_in():\n response.write(\'<li><a href="user.html">log in</a></li>\',escape=False)\n pass\nresponse.write("\\n </ul>\\n </div>\\n <div id=\'bodycontent\'>\\n \\n<h1>Submissions</h1>\\n ",escape=False)\nfor row in comments:\n response.write(\'\\n <table><tr>\\n \',escape=False)\n for comment in row:\n response.write(\'<td><a href = \',escape=False)\n response.write("/turtlesite/default/image.html?title="+comment.title)\n response.write(\'><img width="250px" src="\',escape=False)\n response.write(URL(r=request, f=\'download\', args=comment.newimage))\n response.write(\'" onclick="ajax(\\\'ajaxwiki_onclick\\\',[\\\'text\\\'],\\\'html\\\')"/></a></td>\',escape=False)\n pass\n response.write(\'\\n <center>\\n <ul>\\n \',escape=False)\n for count in range(pages):\n response.write(\'<li><a href = \',escape=False)\n response.write("index.html?page="+str(count+1)>{{=count+1)\n response.write(\'</li>\',escape=False)\n pass\n response.write(\'\\n </tr></table>\\n\\n </div>\\n </body>\\n </style>\\n</html>\\n\',escape=False)'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/views/default/index.html", line 24\n response.write("index.html?page="+str(count+1)>{{=count+1)\n ^\nSyntaxError: invalid syntax\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.10-28-36.0d76f95e-af0c-4a12-ac25-2b8477ad8400 b/errors/127.0.0.1.2010-07-07.10-28-36.0d76f95e-af0c-4a12-ac25-2b8477ad8400
new file mode 100644
index 0000000..ebd7998
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.10-28-36.0d76f95e-af0c-4a12-ac25-2b8477ad8400
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/views/default/index.html'
+p4
+sS'code'
+p5
+S'response.write(\'<html>\\n <link rel="stylesheet" href="../static/glike.css" type="text/css" />\\n <head>\\n <title>Turtle Art Image Database</title>\\n </head>\\n <body>\\n <div id="header">\\n <h1><a href="index.html" >Home</a></h1>\\n <ul>\\n \',escape=False)\nif auth.is_logged_in():\n response.write(\'<li>\',escape=False)\n response.write(auth.user.username+": ")\n response.write(\'</li><li><a href="user/logout">Log Out</li><li><a href="upload.html" >New Image</a></li><li><a href="adminpage.html" >Clear All</a></li>\',escape=False)\n pass\nresponse.write(\'\\n \',escape=False)\nif not auth.is_logged_in():\n response.write(\'<li><a href="user.html">log in</a></li>\',escape=False)\n pass\nresponse.write("\\n </ul>\\n </div>\\n <div id=\'bodycontent\'>\\n \\n<h1>Submissions</h1>\\n ",escape=False)\nfor row in comments:\n response.write(\'\\n <table><tr>\\n \',escape=False)\n for comment in row:\n response.write(\'<td><a href = \',escape=False)\n response.write("/turtlesite/default/image.html?title="+comment.title)\n response.write(\'><img width="250px" src="\',escape=False)\n response.write(URL(r=request, f=\'download\', args=comment.newimage))\n response.write(\'" onclick="ajax(\\\'ajaxwiki_onclick\\\',[\\\'text\\\'],\\\'html\\\')"/></a></td>\',escape=False)\n pass\n response.write(\'\\n <center>\\n <ul>\\n \',escape=False)\n for count in range(pages):\n response.write(\'<li><a href = \',escape=False)\n response.write("index.html?page="+str(count+1)>{{=count+1)\n response.write(\'</li>\',escape=False)\n pass\n response.write(\'\\n </tr></table>\\n\\n </div>\\n </body>\\n </style>\\n</html>\\n\',escape=False)'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/views/default/index.html", line 24\n response.write("index.html?page="+str(count+1)>{{=count+1)\n ^\nSyntaxError: invalid syntax\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.10-29-11.1047f1e3-6f4e-4d34-81a0-da47047b333a b/errors/127.0.0.1.2010-07-07.10-29-11.1047f1e3-6f4e-4d34-81a0-da47047b333a
new file mode 100644
index 0000000..7888f63
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.10-29-11.1047f1e3-6f4e-4d34-81a0-da47047b333a
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/views/default/index.html'
+p4
+sS'code'
+p5
+S'response.write(\'<html>\\n <link rel="stylesheet" href="../static/glike.css" type="text/css" />\\n <head>\\n <title>Turtle Art Image Database</title>\\n </head>\\n <body>\\n <div id="header">\\n <h1><a href="index.html" >Home</a></h1>\\n <ul>\\n \',escape=False)\nif auth.is_logged_in():\n response.write(\'<li>\',escape=False)\n response.write(auth.user.username+": ")\n response.write(\'</li><li><a href="user/logout">Log Out</li><li><a href="upload.html" >New Image</a></li><li><a href="adminpage.html" >Clear All</a></li>\',escape=False)\n pass\nresponse.write(\'\\n \',escape=False)\nif not auth.is_logged_in():\n response.write(\'<li><a href="user.html">log in</a></li>\',escape=False)\n pass\nresponse.write("\\n </ul>\\n </div>\\n <div id=\'bodycontent\'>\\n \\n<h1>Submissions</h1>\\n ",escape=False)\nfor row in comments:\n response.write(\'\\n <table><tr>\\n \',escape=False)\n for comment in row:\n response.write(\'<td><a href = \',escape=False)\n response.write("/turtlesite/default/image.html?title="+comment.title)\n response.write(\'><img width="250px" src="\',escape=False)\n response.write(URL(r=request, f=\'download\', args=comment.newimage))\n response.write(\'" onclick="ajax(\\\'ajaxwiki_onclick\\\',[\\\'text\\\'],\\\'html\\\')"/></a></td>\',escape=False)\n pass\n response.write(\'\\n <center>\\n <ul>\\n \',escape=False)\n for count in range(pages):\n response.write(\'<li><a href = \',escape=False)\n response.write("index.html?page="+str(count+1)>{{=str(count+1))\n response.write(\'</li>\',escape=False)\n pass\n response.write(\'\\n </tr></table>\\n\\n </div>\\n </body>\\n </style>\\n</html>\\n\',escape=False)'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/views/default/index.html", line 24\n response.write("index.html?page="+str(count+1)>{{=str(count+1))\n ^\nSyntaxError: invalid syntax\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.10-29-47.b16a2a3e-b801-4b29-870c-98f926533de7 b/errors/127.0.0.1.2010-07-07.10-29-47.b16a2a3e-b801-4b29-870c-98f926533de7
new file mode 100644
index 0000000..b51f8ac
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.10-29-47.b16a2a3e-b801-4b29-870c-98f926533de7
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/views/default/index.html'
+p4
+sS'code'
+p5
+S'response.write(\'<html>\\n <link rel="stylesheet" href="../static/glike.css" type="text/css" />\\n <head>\\n <title>Turtle Art Image Database</title>\\n </head>\\n <body>\\n <div id="header">\\n <h1><a href="index.html" >Home</a></h1>\\n <ul>\\n \',escape=False)\nif auth.is_logged_in():\n response.write(\'<li>\',escape=False)\n response.write(auth.user.username+": ")\n response.write(\'</li><li><a href="user/logout">Log Out</li><li><a href="upload.html" >New Image</a></li><li><a href="adminpage.html" >Clear All</a></li>\',escape=False)\n pass\nresponse.write(\'\\n \',escape=False)\nif not auth.is_logged_in():\n response.write(\'<li><a href="user.html">log in</a></li>\',escape=False)\n pass\nresponse.write("\\n </ul>\\n </div>\\n <div id=\'bodycontent\'>\\n \\n<h1>Submissions</h1>\\n ",escape=False)\nfor row in comments:\n response.write(\'\\n <table><tr>\\n \',escape=False)\n for comment in row:\n response.write(\'<td><a href = \',escape=False)\n response.write("/turtlesite/default/image.html?title="+comment.title)\n response.write(\'><img width="250px" src="\',escape=False)\n response.write(URL(r=request, f=\'download\', args=comment.newimage))\n response.write(\'" onclick="ajax(\\\'ajaxwiki_onclick\\\',[\\\'text\\\'],\\\'html\\\')"/></a></td>\',escape=False)\n pass\n response.write(\'\\n <center>\\n <ul>\\n \',escape=False)\n for count in range(pages):\n response.write(\'<li><a href = \',escape=False)\n response.write("index.html?page="+str(count+1)>{{=str(count+1))\n response.write(\'</a></li>\',escape=False)\n pass\n response.write(\'\\n </tr></table>\\n\\n </div>\\n </body>\\n </style>\\n</html>\\n\',escape=False)'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/views/default/index.html", line 24\n response.write("index.html?page="+str(count+1)>{{=str(count+1))\n ^\nSyntaxError: invalid syntax\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.10-52-48.c6777db8-fa4b-4f55-bb6c-0d919ab01028 b/errors/127.0.0.1.2010-07-07.10-52-48.c6777db8-fa4b-4f55-bb6c-0d919ab01028
new file mode 100644
index 0000000..bc7dbf4
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.10-52-48.c6777db8-fa4b-4f55-bb6c-0d919ab01028
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/views/default/index.html'
+p4
+sS'code'
+p5
+S'response.write(\'<html>\\n <link rel="stylesheet" href="../static/glike.css" type="text/css" />\\n <head>\\n <title>Turtle Art Image Database</title>\\n </head>\\n <body>\\n <div id="header">\\n <h1><a href="index.html" >Home</a></h1>\\n <ul>\\n \',escape=False)\nif auth.is_logged_in():\n response.write(\'\\n <li>\',escape=False)\n response.write(auth.user.username+": ")\n response.write(\'</li>\\n <li><a href="user/logout">Log Out</li>\\n <li><a href="upload.html" >New Image</a></li>\\n <li><a href="adminpage.html" >Clear All</a></li>\\n \',escape=False)\n pass\nresponse.write(\'\\n \',escape=False)\nif not auth.is_logged_in():\n response.write(\'\\n <li><a href="user.html">log in</a></li>\\n \',escape=False)\n pass\nresponse.write("\\n </ul>\\n </div>\\n <div id=\'bodycontent\'>\\n \\n<h1>Submissions</h1>\\n ",escape=False)\nfor row in comments:\n response.write(\'\\n <table><tr>\\n \',escape=False)\n for comment in row:\n response.write(\'\\n <td><a href = \',escape=False)\n response.write("/turtlesite/default/image.html?title="+comment.title)\n response.write(\'>\\n <img width="250px" src="\',escape=False)\n response.write(URL(r=request, f=\'download\', args=comment.newimage))\n response.write(\'" \\n onclick="ajax(\\\'ajaxwiki_onclick\\\',[\\\'text\\\'],\\\'html\\\')"/></a></td>\\n \',escape=False)\n pass\n response.write(\'\\n </tr></table>\\n \',escape=False)\n pass\nresponse.write(\'\\n<center>\\n<ul id="navlist">\\n\',escape=False)\nfor count in range(pages):\n response.write(\'\\n \',escape=False)\n if count != page:\n response.write(\'\\n <li><a href = \',escape=False)\n response.write("index.html?page="+str(count+1))\n response.write(\'>\',escape=False)\n response.write( str(count+1))\n response.write(\'</a></li>\\n \',escape=False)\n pass\n response.write(\'\\n \',escape=False)\nelse:\n response.write(\'\\n <li>\',escape=False)\n response.write(string(count +1))\n response.write(\'</li>\\n \',escape=False)\n pass\nresponse.write(\'\\n \',escape=False)\npass\nresponse.write(\'\\n</ul>\\n</center>\\n\\n </div>\\n </body>\\n </style>\\n</html>\\n\',escape=False)'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/views/default/index.html", line 36, in <module>\nNameError: name \'string\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.11-18-06.99442e70-a895-43d7-9f55-c8e1faa59202 b/errors/127.0.0.1.2010-07-07.11-18-06.99442e70-a895-43d7-9f55-c8e1faa59202
new file mode 100644
index 0000000..b8de772
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.11-18-06.99442e70-a895-43d7-9f55-c8e1faa59202
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if len(request.vars)==0: page = 0\n else: page = int(request.vars["page"]) - 1\n table = []\n comments = db().select(db.comment.ALL)\n i = 0\n row = []\n count = 0\n for comment in comments:\n if count > page * 12 and page*12+13 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(comments=table, pages=pages, page=page)\n\ndef profile():\n import pdb\n pdb.set_trace()\n user = request.vars["user"]\n if len(request.vars)==1: page = 0\n else: page = int(request.vars["page"]) - 1\n table = []\n comments = db().select(db.comment.ALL)\n i = 0\n row = []\n count = 0\n for comment in comments:\n if count > page * 12 and page*12+13 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(comments=table, pages=pages, page=page)\n\ndef upload():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n print auth.user.username\n db(db.comment.title==session.new_image_title).update(creator = auth.user.username)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n comment = db(db.comment.title==request.vars["title"]).select().first()\n return dict(comment = comment)\n \n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(profile)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 81, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 29, in profile\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 29, in profile\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n File "/usr/lib/python2.6/bdb.py", line 46, in trace_dispatch\n return self.dispatch_line(frame)\n File "/usr/lib/python2.6/bdb.py", line 65, in dispatch_line\n if self.quitting: raise BdbQuit\nBdbQuit\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.11-24-37.0cac9768-5458-4dd7-947f-db23a93abe91 b/errors/127.0.0.1.2010-07-07.11-24-37.0cac9768-5458-4dd7-947f-db23a93abe91
new file mode 100644
index 0000000..e94dfd5
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.11-24-37.0cac9768-5458-4dd7-947f-db23a93abe91
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n comments = db().select(db.comment.ALL)\n i = 0\n row = []\n count = 0\n for comment in comments:\n if count > page * 12 and page*12+13 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(comments=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n comments = db().select(db.comment.ALL)\n for comment in comments:\n if comment.creator != user: comments.remove(comment)\n i = 0\n row = []\n count = 0\n for comment in comments:\n if count > page * 12 and page*12+13 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(comments=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n print auth.user.username\n db(db.comment.title==session.new_image_title).update(creator = auth.user.username)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n comment = db(db.comment.title==request.vars["title"]).select().first()\n return dict(comment = comment)\n \n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(profile)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 82, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 34, in profile\n if comment.creator != user: comments.remove(comment)\nAttributeError: \'Rows\' object has no attribute \'remove\'\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.12-18-08.67650de4-5e42-4735-aa94-1571627cca46 b/errors/127.0.0.1.2010-07-07.12-18-08.67650de4-5e42-4735-aa94-1571627cca46
new file mode 100644
index 0000000..fc2e643
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.12-18-08.67650de4-5e42-4735-aa94-1571627cca46
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n comments = db().select(db.comment.ALL)\n i = 0\n row = []\n count = 0\n for comment in comments:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(comments=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n comments = db().select(db.comment.ALL)\n for comment in comments:\n if comment.creator == user: user_pics.append(comment)\n i = 0\n row = []\n count = 0\n print page\n for comment in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n print table\n return dict(comments=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n print auth.user.username\n db(db.comment.title==session.new_image_title).update(creator = auth.user.username)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n comment = db(db.comment.title==request.vars["title"]).select().first()\n import pdb\n pdb.set_trace()\n return dict(comment = comment)\n \n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(image)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 87, in <module>\n return response.download(request, db)\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 70, in image\n import pdb\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 70, in image\n import pdb\n File "/usr/lib/python2.6/bdb.py", line 46, in trace_dispatch\n return self.dispatch_line(frame)\n File "/usr/lib/python2.6/bdb.py", line 65, in dispatch_line\n if self.quitting: raise BdbQuit\nBdbQuit\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.12-26-40.e5e0f713-b02a-46c8-8963-1efefad1615c b/errors/127.0.0.1.2010-07-07.12-26-40.e5e0f713-b02a-46c8-8963-1efefad1615c
new file mode 100644
index 0000000..de64ee0
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.12-26-40.e5e0f713-b02a-46c8-8963-1efefad1615c
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n comments = db().select(db.comment.ALL)\n i = 0\n row = []\n count = 0\n for comment in comments:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(comments=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n comments = db().select(db.comment.ALL)\n for comment in comments:\n if comment.creator == user:\n print user, comment.creator\n user_pics.append(comment)\n i = 0\n row = []\n count = 0\n print page\n for comment in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n print table\n return dict(comments=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n print auth.user.username\n db(db.comment.title==session.new_image_title).update(creator = auth.user.username)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n comments = db().select(db.comment.ALL)\n print request.vars["title"]\n for comment in comments:\n if comment.title == request.vars["title"].replace(\'&\',\' \'):\n real_comment = comment\n return dict(comment = real_comment)\n \n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(image)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 91, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 74, in image\n return dict(comment = real_comment)\nUnboundLocalError: local variable \'real_comment\' referenced before assignment\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.12-52-08.7e40688f-6dd8-42f3-8c57-6560c5947759 b/errors/127.0.0.1.2010-07-07.12-52-08.7e40688f-6dd8-42f3-8c57-6560c5947759
new file mode 100644
index 0000000..d9a6dc5
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.12-52-08.7e40688f-6dd8-42f3-8c57-6560c5947759
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n comments = db().select(db.comment.ALL)\n i = 0\n row = []\n count = 0\n for comment in comments:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(comments=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n comments = db().select(db.comment.ALL)\n for comment in comments:\n if comment.creator == user:\n print user, comment.creator\n user_pics.append(comment)\n i = 0\n row = []\n count = 0\n print page\n for comment in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n print table\n return dict(comments=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n print auth.user.username\n db(db.comment.title==session.new_image_title).update(creator = auth.user.username)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n comments = db().select(db.comment.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n print title\n for comment in comments:\n if comment.title == title:\n real_comment = comment\n return dict(comment = real_comment)\n \n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(user)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 92, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 82, in user\n return dict(form=auth())\n File "/home/jboisture/Desktop/web2py/gluon/tools.py", line 966, in __call__\n return self.register()\n File "/home/jboisture/Desktop/web2py/gluon/tools.py", line 1502, in register\n onvalidation=onvalidation):\n File "/home/jboisture/Desktop/web2py/gluon/sqlhtml.py", line 876, in accepts\n onvalidation,\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 1452, in accepts\n status = self._traverse(status)\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 487, in _traverse\n newstatus = self._validate()\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 1245, in _validate\n (value, errors) = validator(value)\n File "/home/jboisture/Desktop/web2py/gluon/validators.py", line 156, in __call__\n exec \'__ret__=\' + self.expression in environment\n File "<string>", line 1, in <module>\nNameError: name \'auth_table\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.13-13-30.54f64633-170e-4584-adb7-c1045c5d54e8 b/errors/127.0.0.1.2010-07-07.13-13-30.54f64633-170e-4584-adb7-c1045c5d54e8
new file mode 100644
index 0000000..8d14436
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.13-13-30.54f64633-170e-4584-adb7-c1045c5d54e8
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py'
+p4
+sS'code'
+p5
+S'if request.env.web2py_runtime_gae:\n db = DAL(\'gae\')\n session.connect(request,response,db=db)\nelse:db = DAL("sqlite://storage.db")\n\ndb.define_table(\'comment\',\n Field(\'file\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension=\'ta\', error_message="Must be a Turtle Art file")]),\n Field(\'title\', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, \'comment.title\', error_message="Title is already taken")]),\n Field(\'image_id\'),\n Field(\'creator\', requires=IS_NOT_EMPTY(error_message="You must include your name")),\n Field(\'description\', \'text\'),\n Field(\'newimage\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a image to upload"), IS_UPLOAD_FILENAME(extension=\'png\', error_message="Must be a PNG image")]))\nfrom gluon.tools import Auth\nauth = Auth(globals(),db)\nauth_table = db.define_table(\n auth.settings.table_user_name,\n Field(\'username\', length=128, default="", unique = True),\n Field(\'email\', length=128, default="", unique=True),\n Field(\'password\', \'password\', length=256,\n readable=False, label=\'Password\'),\n Field(\'registration_key\', length=128, default= "",\n writable=False, readable=False))\n\n\nauth_table.username.requires = [IS_EXPR(auth_table.username.count(\' \') == 0, error_message="Username must be on word"), IS_NOT_IN_DB(db, auth_table.username)]\nauth_table.password.requires = [IS_STRONG(), CRYPT()]\nauth_table.email.requires = [\n IS_EMAIL(error_message=auth.messages.invalid_email),\n IS_NOT_IN_DB(db, auth_table.email)]\nauth.settings.table_user = auth_table\nauth.define_tables()\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py", line 25, in <module>\n auth_table.username.requires = [IS_EXPR(auth_table.username.count(\' \') == 0, error_message="Username must be on word"), IS_NOT_IN_DB(db, auth_table.username)]\nTypeError: count() takes exactly 1 argument (2 given)\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.13-13-31.af234347-345f-4be2-9a75-b44a29d2c731 b/errors/127.0.0.1.2010-07-07.13-13-31.af234347-345f-4be2-9a75-b44a29d2c731
new file mode 100644
index 0000000..8d14436
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.13-13-31.af234347-345f-4be2-9a75-b44a29d2c731
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py'
+p4
+sS'code'
+p5
+S'if request.env.web2py_runtime_gae:\n db = DAL(\'gae\')\n session.connect(request,response,db=db)\nelse:db = DAL("sqlite://storage.db")\n\ndb.define_table(\'comment\',\n Field(\'file\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension=\'ta\', error_message="Must be a Turtle Art file")]),\n Field(\'title\', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, \'comment.title\', error_message="Title is already taken")]),\n Field(\'image_id\'),\n Field(\'creator\', requires=IS_NOT_EMPTY(error_message="You must include your name")),\n Field(\'description\', \'text\'),\n Field(\'newimage\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a image to upload"), IS_UPLOAD_FILENAME(extension=\'png\', error_message="Must be a PNG image")]))\nfrom gluon.tools import Auth\nauth = Auth(globals(),db)\nauth_table = db.define_table(\n auth.settings.table_user_name,\n Field(\'username\', length=128, default="", unique = True),\n Field(\'email\', length=128, default="", unique=True),\n Field(\'password\', \'password\', length=256,\n readable=False, label=\'Password\'),\n Field(\'registration_key\', length=128, default= "",\n writable=False, readable=False))\n\n\nauth_table.username.requires = [IS_EXPR(auth_table.username.count(\' \') == 0, error_message="Username must be on word"), IS_NOT_IN_DB(db, auth_table.username)]\nauth_table.password.requires = [IS_STRONG(), CRYPT()]\nauth_table.email.requires = [\n IS_EMAIL(error_message=auth.messages.invalid_email),\n IS_NOT_IN_DB(db, auth_table.email)]\nauth.settings.table_user = auth_table\nauth.define_tables()\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py", line 25, in <module>\n auth_table.username.requires = [IS_EXPR(auth_table.username.count(\' \') == 0, error_message="Username must be on word"), IS_NOT_IN_DB(db, auth_table.username)]\nTypeError: count() takes exactly 1 argument (2 given)\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.13-13-33.1817152c-4167-4003-97c8-f262f2418d4a b/errors/127.0.0.1.2010-07-07.13-13-33.1817152c-4167-4003-97c8-f262f2418d4a
new file mode 100644
index 0000000..8d14436
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.13-13-33.1817152c-4167-4003-97c8-f262f2418d4a
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py'
+p4
+sS'code'
+p5
+S'if request.env.web2py_runtime_gae:\n db = DAL(\'gae\')\n session.connect(request,response,db=db)\nelse:db = DAL("sqlite://storage.db")\n\ndb.define_table(\'comment\',\n Field(\'file\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension=\'ta\', error_message="Must be a Turtle Art file")]),\n Field(\'title\', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, \'comment.title\', error_message="Title is already taken")]),\n Field(\'image_id\'),\n Field(\'creator\', requires=IS_NOT_EMPTY(error_message="You must include your name")),\n Field(\'description\', \'text\'),\n Field(\'newimage\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a image to upload"), IS_UPLOAD_FILENAME(extension=\'png\', error_message="Must be a PNG image")]))\nfrom gluon.tools import Auth\nauth = Auth(globals(),db)\nauth_table = db.define_table(\n auth.settings.table_user_name,\n Field(\'username\', length=128, default="", unique = True),\n Field(\'email\', length=128, default="", unique=True),\n Field(\'password\', \'password\', length=256,\n readable=False, label=\'Password\'),\n Field(\'registration_key\', length=128, default= "",\n writable=False, readable=False))\n\n\nauth_table.username.requires = [IS_EXPR(auth_table.username.count(\' \') == 0, error_message="Username must be on word"), IS_NOT_IN_DB(db, auth_table.username)]\nauth_table.password.requires = [IS_STRONG(), CRYPT()]\nauth_table.email.requires = [\n IS_EMAIL(error_message=auth.messages.invalid_email),\n IS_NOT_IN_DB(db, auth_table.email)]\nauth.settings.table_user = auth_table\nauth.define_tables()\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py", line 25, in <module>\n auth_table.username.requires = [IS_EXPR(auth_table.username.count(\' \') == 0, error_message="Username must be on word"), IS_NOT_IN_DB(db, auth_table.username)]\nTypeError: count() takes exactly 1 argument (2 given)\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.13-14-11.def093d0-74fd-47fc-8b61-4e97b8c7c8ad b/errors/127.0.0.1.2010-07-07.13-14-11.def093d0-74fd-47fc-8b61-4e97b8c7c8ad
new file mode 100644
index 0000000..8d14436
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.13-14-11.def093d0-74fd-47fc-8b61-4e97b8c7c8ad
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py'
+p4
+sS'code'
+p5
+S'if request.env.web2py_runtime_gae:\n db = DAL(\'gae\')\n session.connect(request,response,db=db)\nelse:db = DAL("sqlite://storage.db")\n\ndb.define_table(\'comment\',\n Field(\'file\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension=\'ta\', error_message="Must be a Turtle Art file")]),\n Field(\'title\', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, \'comment.title\', error_message="Title is already taken")]),\n Field(\'image_id\'),\n Field(\'creator\', requires=IS_NOT_EMPTY(error_message="You must include your name")),\n Field(\'description\', \'text\'),\n Field(\'newimage\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a image to upload"), IS_UPLOAD_FILENAME(extension=\'png\', error_message="Must be a PNG image")]))\nfrom gluon.tools import Auth\nauth = Auth(globals(),db)\nauth_table = db.define_table(\n auth.settings.table_user_name,\n Field(\'username\', length=128, default="", unique = True),\n Field(\'email\', length=128, default="", unique=True),\n Field(\'password\', \'password\', length=256,\n readable=False, label=\'Password\'),\n Field(\'registration_key\', length=128, default= "",\n writable=False, readable=False))\n\n\nauth_table.username.requires = [IS_EXPR(auth_table.username.count(\' \') == 0, error_message="Username must be on word"), IS_NOT_IN_DB(db, auth_table.username)]\nauth_table.password.requires = [IS_STRONG(), CRYPT()]\nauth_table.email.requires = [\n IS_EMAIL(error_message=auth.messages.invalid_email),\n IS_NOT_IN_DB(db, auth_table.email)]\nauth.settings.table_user = auth_table\nauth.define_tables()\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py", line 25, in <module>\n auth_table.username.requires = [IS_EXPR(auth_table.username.count(\' \') == 0, error_message="Username must be on word"), IS_NOT_IN_DB(db, auth_table.username)]\nTypeError: count() takes exactly 1 argument (2 given)\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.13-14-12.13c743f7-bea2-4207-8e07-f4e8e1e63ed5 b/errors/127.0.0.1.2010-07-07.13-14-12.13c743f7-bea2-4207-8e07-f4e8e1e63ed5
new file mode 100644
index 0000000..8d14436
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.13-14-12.13c743f7-bea2-4207-8e07-f4e8e1e63ed5
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py'
+p4
+sS'code'
+p5
+S'if request.env.web2py_runtime_gae:\n db = DAL(\'gae\')\n session.connect(request,response,db=db)\nelse:db = DAL("sqlite://storage.db")\n\ndb.define_table(\'comment\',\n Field(\'file\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension=\'ta\', error_message="Must be a Turtle Art file")]),\n Field(\'title\', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, \'comment.title\', error_message="Title is already taken")]),\n Field(\'image_id\'),\n Field(\'creator\', requires=IS_NOT_EMPTY(error_message="You must include your name")),\n Field(\'description\', \'text\'),\n Field(\'newimage\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a image to upload"), IS_UPLOAD_FILENAME(extension=\'png\', error_message="Must be a PNG image")]))\nfrom gluon.tools import Auth\nauth = Auth(globals(),db)\nauth_table = db.define_table(\n auth.settings.table_user_name,\n Field(\'username\', length=128, default="", unique = True),\n Field(\'email\', length=128, default="", unique=True),\n Field(\'password\', \'password\', length=256,\n readable=False, label=\'Password\'),\n Field(\'registration_key\', length=128, default= "",\n writable=False, readable=False))\n\n\nauth_table.username.requires = [IS_EXPR(auth_table.username.count(\' \') == 0, error_message="Username must be on word"), IS_NOT_IN_DB(db, auth_table.username)]\nauth_table.password.requires = [IS_STRONG(), CRYPT()]\nauth_table.email.requires = [\n IS_EMAIL(error_message=auth.messages.invalid_email),\n IS_NOT_IN_DB(db, auth_table.email)]\nauth.settings.table_user = auth_table\nauth.define_tables()\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py", line 25, in <module>\n auth_table.username.requires = [IS_EXPR(auth_table.username.count(\' \') == 0, error_message="Username must be on word"), IS_NOT_IN_DB(db, auth_table.username)]\nTypeError: count() takes exactly 1 argument (2 given)\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.13-14-14.9c5968a9-752f-46f4-93d5-50656ee3b161 b/errors/127.0.0.1.2010-07-07.13-14-14.9c5968a9-752f-46f4-93d5-50656ee3b161
new file mode 100644
index 0000000..8d14436
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.13-14-14.9c5968a9-752f-46f4-93d5-50656ee3b161
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py'
+p4
+sS'code'
+p5
+S'if request.env.web2py_runtime_gae:\n db = DAL(\'gae\')\n session.connect(request,response,db=db)\nelse:db = DAL("sqlite://storage.db")\n\ndb.define_table(\'comment\',\n Field(\'file\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension=\'ta\', error_message="Must be a Turtle Art file")]),\n Field(\'title\', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, \'comment.title\', error_message="Title is already taken")]),\n Field(\'image_id\'),\n Field(\'creator\', requires=IS_NOT_EMPTY(error_message="You must include your name")),\n Field(\'description\', \'text\'),\n Field(\'newimage\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a image to upload"), IS_UPLOAD_FILENAME(extension=\'png\', error_message="Must be a PNG image")]))\nfrom gluon.tools import Auth\nauth = Auth(globals(),db)\nauth_table = db.define_table(\n auth.settings.table_user_name,\n Field(\'username\', length=128, default="", unique = True),\n Field(\'email\', length=128, default="", unique=True),\n Field(\'password\', \'password\', length=256,\n readable=False, label=\'Password\'),\n Field(\'registration_key\', length=128, default= "",\n writable=False, readable=False))\n\n\nauth_table.username.requires = [IS_EXPR(auth_table.username.count(\' \') == 0, error_message="Username must be on word"), IS_NOT_IN_DB(db, auth_table.username)]\nauth_table.password.requires = [IS_STRONG(), CRYPT()]\nauth_table.email.requires = [\n IS_EMAIL(error_message=auth.messages.invalid_email),\n IS_NOT_IN_DB(db, auth_table.email)]\nauth.settings.table_user = auth_table\nauth.define_tables()\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py", line 25, in <module>\n auth_table.username.requires = [IS_EXPR(auth_table.username.count(\' \') == 0, error_message="Username must be on word"), IS_NOT_IN_DB(db, auth_table.username)]\nTypeError: count() takes exactly 1 argument (2 given)\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.13-15-41.0d7ba954-21a4-4a16-90d1-b78a855f77f7 b/errors/127.0.0.1.2010-07-07.13-15-41.0d7ba954-21a4-4a16-90d1-b78a855f77f7
new file mode 100644
index 0000000..f1d378d
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.13-15-41.0d7ba954-21a4-4a16-90d1-b78a855f77f7
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py'
+p4
+sS'code'
+p5
+S'if request.env.web2py_runtime_gae:\n db = DAL(\'gae\')\n session.connect(request,response,db=db)\nelse:db = DAL("sqlite://storage.db")\n\ndb.define_table(\'comment\',\n Field(\'file\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension=\'ta\', error_message="Must be a Turtle Art file")]),\n Field(\'title\', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, \'comment.title\', error_message="Title is already taken")]),\n Field(\'image_id\'),\n Field(\'creator\', requires=IS_NOT_EMPTY(error_message="You must include your name")),\n Field(\'description\', \'text\'),\n Field(\'newimage\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a image to upload"), IS_UPLOAD_FILENAME(extension=\'png\', error_message="Must be a PNG image")]))\nfrom gluon.tools import Auth\nauth = Auth(globals(),db)\nauth_table = db.define_table(\n auth.settings.table_user_name,\n Field(\'username\', length=128, default="", unique = True),\n Field(\'email\', length=128, default="", unique=True),\n Field(\'password\', \'password\', length=256,\n readable=False, label=\'Password\'),\n Field(\'registration_key\', length=128, default= "",\n writable=False, readable=False))\n\n\nauth_table.username.requires = [IS_EXPR(auth_table.username.count(\'\') == 0, error_message="Username must be on word"), IS_NOT_IN_DB(db, auth_table.username)]\nauth_table.password.requires = [IS_STRONG(), CRYPT()]\nauth_table.email.requires = [\n IS_EMAIL(error_message=auth.messages.invalid_email),\n IS_NOT_IN_DB(db, auth_table.email)]\nauth.settings.table_user = auth_table\nauth.define_tables()\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py", line 25, in <module>\n auth_table.username.requires = [IS_EXPR(auth_table.username.count(\'\') == 0, error_message="Username must be on word"), IS_NOT_IN_DB(db, auth_table.username)]\nTypeError: count() takes exactly 1 argument (2 given)\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.13-17-26.107ff8c1-0237-4e17-be9e-5164ce5c084a b/errors/127.0.0.1.2010-07-07.13-17-26.107ff8c1-0237-4e17-be9e-5164ce5c084a
new file mode 100644
index 0000000..d9a6dc5
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.13-17-26.107ff8c1-0237-4e17-be9e-5164ce5c084a
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n comments = db().select(db.comment.ALL)\n i = 0\n row = []\n count = 0\n for comment in comments:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(comments=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n comments = db().select(db.comment.ALL)\n for comment in comments:\n if comment.creator == user:\n print user, comment.creator\n user_pics.append(comment)\n i = 0\n row = []\n count = 0\n print page\n for comment in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n print table\n return dict(comments=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n print auth.user.username\n db(db.comment.title==session.new_image_title).update(creator = auth.user.username)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n comments = db().select(db.comment.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n print title\n for comment in comments:\n if comment.title == title:\n real_comment = comment\n return dict(comment = real_comment)\n \n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(user)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 92, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 82, in user\n return dict(form=auth())\n File "/home/jboisture/Desktop/web2py/gluon/tools.py", line 966, in __call__\n return self.register()\n File "/home/jboisture/Desktop/web2py/gluon/tools.py", line 1502, in register\n onvalidation=onvalidation):\n File "/home/jboisture/Desktop/web2py/gluon/sqlhtml.py", line 876, in accepts\n onvalidation,\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 1452, in accepts\n status = self._traverse(status)\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 487, in _traverse\n newstatus = self._validate()\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 1245, in _validate\n (value, errors) = validator(value)\n File "/home/jboisture/Desktop/web2py/gluon/validators.py", line 156, in __call__\n exec \'__ret__=\' + self.expression in environment\n File "<string>", line 1, in <module>\nNameError: name \'auth_table\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.13-20-18.131fe760-052a-4d22-b751-acd5488237e8 b/errors/127.0.0.1.2010-07-07.13-20-18.131fe760-052a-4d22-b751-acd5488237e8
new file mode 100644
index 0000000..d9a6dc5
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.13-20-18.131fe760-052a-4d22-b751-acd5488237e8
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n comments = db().select(db.comment.ALL)\n i = 0\n row = []\n count = 0\n for comment in comments:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(comments=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n comments = db().select(db.comment.ALL)\n for comment in comments:\n if comment.creator == user:\n print user, comment.creator\n user_pics.append(comment)\n i = 0\n row = []\n count = 0\n print page\n for comment in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n print table\n return dict(comments=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n print auth.user.username\n db(db.comment.title==session.new_image_title).update(creator = auth.user.username)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n comments = db().select(db.comment.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n print title\n for comment in comments:\n if comment.title == title:\n real_comment = comment\n return dict(comment = real_comment)\n \n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(user)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 92, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 82, in user\n return dict(form=auth())\n File "/home/jboisture/Desktop/web2py/gluon/tools.py", line 966, in __call__\n return self.register()\n File "/home/jboisture/Desktop/web2py/gluon/tools.py", line 1502, in register\n onvalidation=onvalidation):\n File "/home/jboisture/Desktop/web2py/gluon/sqlhtml.py", line 876, in accepts\n onvalidation,\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 1452, in accepts\n status = self._traverse(status)\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 487, in _traverse\n newstatus = self._validate()\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 1245, in _validate\n (value, errors) = validator(value)\n File "/home/jboisture/Desktop/web2py/gluon/validators.py", line 156, in __call__\n exec \'__ret__=\' + self.expression in environment\n File "<string>", line 1, in <module>\nNameError: name \'auth_table\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.13-28-49.6a29edd5-5891-468d-a3b1-70c27a9c80f8 b/errors/127.0.0.1.2010-07-07.13-28-49.6a29edd5-5891-468d-a3b1-70c27a9c80f8
new file mode 100644
index 0000000..d55cab5
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.13-28-49.6a29edd5-5891-468d-a3b1-70c27a9c80f8
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n import pdb\n pdb.set_trace()\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n comments = db().select(db.comment.ALL)\n i = 0\n row = []\n count = 0\n for comment in comments:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(comments=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n comments = db().select(db.comment.ALL)\n for comment in comments:\n if comment.creator == user:\n print user, comment.creator\n user_pics.append(comment)\n i = 0\n row = []\n count = 0\n print page\n for comment in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n print table\n return dict(comments=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n print auth.user.username\n db(db.comment.title==session.new_image_title).update(creator = auth.user.username)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n comments = db().select(db.comment.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n print title\n for comment in comments:\n if comment.title == title:\n real_comment = comment\n return dict(comment = real_comment)\n \n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 94, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 6, in index\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 6, in index\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n File "/usr/lib/python2.6/bdb.py", line 46, in trace_dispatch\n return self.dispatch_line(frame)\n File "/usr/lib/python2.6/bdb.py", line 65, in dispatch_line\n if self.quitting: raise BdbQuit\nBdbQuit\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.13-28-54.73c37622-8507-4202-9e0d-ea4646a2508e b/errors/127.0.0.1.2010-07-07.13-28-54.73c37622-8507-4202-9e0d-ea4646a2508e
new file mode 100644
index 0000000..d55cab5
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.13-28-54.73c37622-8507-4202-9e0d-ea4646a2508e
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n import pdb\n pdb.set_trace()\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n comments = db().select(db.comment.ALL)\n i = 0\n row = []\n count = 0\n for comment in comments:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(comments=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n comments = db().select(db.comment.ALL)\n for comment in comments:\n if comment.creator == user:\n print user, comment.creator\n user_pics.append(comment)\n i = 0\n row = []\n count = 0\n print page\n for comment in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n print table\n return dict(comments=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n print auth.user.username\n db(db.comment.title==session.new_image_title).update(creator = auth.user.username)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n comments = db().select(db.comment.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n print title\n for comment in comments:\n if comment.title == title:\n real_comment = comment\n return dict(comment = real_comment)\n \n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 94, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 6, in index\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 6, in index\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n File "/usr/lib/python2.6/bdb.py", line 46, in trace_dispatch\n return self.dispatch_line(frame)\n File "/usr/lib/python2.6/bdb.py", line 65, in dispatch_line\n if self.quitting: raise BdbQuit\nBdbQuit\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.13-28-54.887bf6bc-2703-4d2c-bb0c-1fa8c4cc9657 b/errors/127.0.0.1.2010-07-07.13-28-54.887bf6bc-2703-4d2c-bb0c-1fa8c4cc9657
new file mode 100644
index 0000000..545b93c
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.13-28-54.887bf6bc-2703-4d2c-bb0c-1fa8c4cc9657
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n import pdb\n pdb.set_trace()\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n comments = db().select(db.comment.ALL)\n i = 0\n row = []\n count = 0\n for comment in comments:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(comments=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n comments = db().select(db.comment.ALL)\n for comment in comments:\n if comment.creator == user:\n print user, comment.creator\n user_pics.append(comment)\n i = 0\n row = []\n count = 0\n print page\n for comment in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n print table\n return dict(comments=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n print auth.user.username\n db(db.comment.title==session.new_image_title).update(creator = auth.user.username)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n comments = db().select(db.comment.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n print title\n for comment in comments:\n if comment.title == title:\n real_comment = comment\n return dict(comment = real_comment)\n \n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(user)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 94, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 84, in user\n return dict(form=auth())\n File "/home/jboisture/Desktop/web2py/gluon/tools.py", line 966, in __call__\n return self.register()\n File "/home/jboisture/Desktop/web2py/gluon/tools.py", line 1502, in register\n onvalidation=onvalidation):\n File "/home/jboisture/Desktop/web2py/gluon/sqlhtml.py", line 876, in accepts\n onvalidation,\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 1452, in accepts\n status = self._traverse(status)\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 487, in _traverse\n newstatus = self._validate()\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 1245, in _validate\n (value, errors) = validator(value)\n File "/home/jboisture/Desktop/web2py/gluon/validators.py", line 156, in __call__\n exec \'__ret__=\' + self.expression in environment\n File "<string>", line 1, in <module>\nNameError: name \'auth_table\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.13-28-55.5616978c-ffbf-4d6d-a5ed-7a3c471b9546 b/errors/127.0.0.1.2010-07-07.13-28-55.5616978c-ffbf-4d6d-a5ed-7a3c471b9546
new file mode 100644
index 0000000..d55cab5
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.13-28-55.5616978c-ffbf-4d6d-a5ed-7a3c471b9546
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n import pdb\n pdb.set_trace()\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n comments = db().select(db.comment.ALL)\n i = 0\n row = []\n count = 0\n for comment in comments:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(comments=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n comments = db().select(db.comment.ALL)\n for comment in comments:\n if comment.creator == user:\n print user, comment.creator\n user_pics.append(comment)\n i = 0\n row = []\n count = 0\n print page\n for comment in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n print table\n return dict(comments=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n print auth.user.username\n db(db.comment.title==session.new_image_title).update(creator = auth.user.username)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n comments = db().select(db.comment.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n print title\n for comment in comments:\n if comment.title == title:\n real_comment = comment\n return dict(comment = real_comment)\n \n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 94, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 6, in index\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 6, in index\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n File "/usr/lib/python2.6/bdb.py", line 46, in trace_dispatch\n return self.dispatch_line(frame)\n File "/usr/lib/python2.6/bdb.py", line 65, in dispatch_line\n if self.quitting: raise BdbQuit\nBdbQuit\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.13-31-37.4fe38a35-2189-45a4-9523-2c6109aac885 b/errors/127.0.0.1.2010-07-07.13-31-37.4fe38a35-2189-45a4-9523-2c6109aac885
new file mode 100644
index 0000000..d9a6dc5
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.13-31-37.4fe38a35-2189-45a4-9523-2c6109aac885
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n comments = db().select(db.comment.ALL)\n i = 0\n row = []\n count = 0\n for comment in comments:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(comments=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n comments = db().select(db.comment.ALL)\n for comment in comments:\n if comment.creator == user:\n print user, comment.creator\n user_pics.append(comment)\n i = 0\n row = []\n count = 0\n print page\n for comment in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n print table\n return dict(comments=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n print auth.user.username\n db(db.comment.title==session.new_image_title).update(creator = auth.user.username)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n comments = db().select(db.comment.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n print title\n for comment in comments:\n if comment.title == title:\n real_comment = comment\n return dict(comment = real_comment)\n \n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(user)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 92, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 82, in user\n return dict(form=auth())\n File "/home/jboisture/Desktop/web2py/gluon/tools.py", line 966, in __call__\n return self.register()\n File "/home/jboisture/Desktop/web2py/gluon/tools.py", line 1502, in register\n onvalidation=onvalidation):\n File "/home/jboisture/Desktop/web2py/gluon/sqlhtml.py", line 876, in accepts\n onvalidation,\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 1452, in accepts\n status = self._traverse(status)\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 487, in _traverse\n newstatus = self._validate()\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 1245, in _validate\n (value, errors) = validator(value)\n File "/home/jboisture/Desktop/web2py/gluon/validators.py", line 156, in __call__\n exec \'__ret__=\' + self.expression in environment\n File "<string>", line 1, in <module>\nNameError: name \'auth_table\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.13-36-30.9b84432b-9342-4d75-bcc7-240878242c2c b/errors/127.0.0.1.2010-07-07.13-36-30.9b84432b-9342-4d75-bcc7-240878242c2c
new file mode 100644
index 0000000..fdb8ab2
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.13-36-30.9b84432b-9342-4d75-bcc7-240878242c2c
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n comments = db().select(db.comment.ALL)\n i = 0\n row = []\n count = 0\n for comment in comments:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(comments=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n comments = db().select(db.comment.ALL)\n for comment in comments:\n if comment.creator == user:\n print user, comment.creator\n user_pics.append(comment)\n i = 0\n row = []\n count = 0\n print page\n for comment in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n print table\n return dict(comments=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n print auth.user.username\n db(db.comment.title==session.new_image_title).update(creator = auth.user.username)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n comments = db().select(db.comment.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n print title\n for comment in comments:\n if comment.title == title:\n real_comment = comment\n return dict(comment = real_comment)\n \n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(user)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 92, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 82, in user\n return dict(form=auth())\n File "/home/jboisture/Desktop/web2py/gluon/tools.py", line 966, in __call__\n return self.register()\n File "/home/jboisture/Desktop/web2py/gluon/tools.py", line 1502, in register\n onvalidation=onvalidation):\n File "/home/jboisture/Desktop/web2py/gluon/sqlhtml.py", line 876, in accepts\n onvalidation,\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 1452, in accepts\n status = self._traverse(status)\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 487, in _traverse\n newstatus = self._validate()\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 1245, in _validate\n (value, errors) = validator(value)\n File "/home/jboisture/Desktop/web2py/gluon/validators.py", line 156, in __call__\n exec \'__ret__=\' + self.expression in environment\n File "<string>", line 1\nSyntaxError: can\'t assign to function call (<string>, line 1)\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.13-37-11.ff337428-c630-4010-8da5-cd2309e00e3c b/errors/127.0.0.1.2010-07-07.13-37-11.ff337428-c630-4010-8da5-cd2309e00e3c
new file mode 100644
index 0000000..5988bd1
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.13-37-11.ff337428-c630-4010-8da5-cd2309e00e3c
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py'
+p4
+sS'code'
+p5
+S'if request.env.web2py_runtime_gae:\n db = DAL(\'gae\')\n session.connect(request,response,db=db)\nelse:db = DAL("sqlite://storage.db")\n\ndb.define_table(\'comment\',\n Field(\'file\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension=\'ta\', error_message="Must be a Turtle Art file")]),\n Field(\'title\', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, \'comment.title\', error_message="Title is already taken")]),\n Field(\'image_id\'),\n Field(\'creator\', requires=IS_NOT_EMPTY(error_message="You must include your name")),\n Field(\'description\', \'text\'),\n Field(\'newimage\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a image to upload"), IS_UPLOAD_FILENAME(extension=\'png\', error_message="Must be a PNG image")]))\nfrom gluon.tools import Auth\nauth = Auth(globals(),db)\nauth_table = db.define_table(\n auth.settings.table_user_name,\n Field(\'username\', length=128, default="", unique = True),\n Field(\'email\', length=128, default="", unique=True),\n Field(\'password\', \'password\', length=256,\n readable=False, label=\'Password\'),\n Field(\'registration_key\', length=128, default= "",\n writable=False, readable=False))\n\n\nauth_table.username.requires = [IS_EXPR(auth_table.username.count(\' \') == 0, error_message=\'username must be one word\'), IS_NOT_IN_DB(db, auth_table.username)]\nauth_table.password.requires = [IS_STRONG(), CRYPT()]\nauth_table.email.requires = [\n IS_EMAIL(error_message=auth.messages.invalid_email),\n IS_NOT_IN_DB(db, auth_table.email)]\nauth.settings.table_user = auth_table\nauth.define_tables()\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py", line 25, in <module>\n auth_table.username.requires = [IS_EXPR(auth_table.username.count(\' \') == 0, error_message=\'username must be one word\'), IS_NOT_IN_DB(db, auth_table.username)]\nTypeError: count() takes exactly 1 argument (2 given)\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.13-37-47.a78bfd0e-5201-4158-8e77-ca03ab24ccc1 b/errors/127.0.0.1.2010-07-07.13-37-47.a78bfd0e-5201-4158-8e77-ca03ab24ccc1
new file mode 100644
index 0000000..cfb432d
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.13-37-47.a78bfd0e-5201-4158-8e77-ca03ab24ccc1
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n comments = db().select(db.comment.ALL)\n i = 0\n row = []\n count = 0\n for comment in comments:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(comments=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n comments = db().select(db.comment.ALL)\n for comment in comments:\n if comment.creator == user:\n print user, comment.creator\n user_pics.append(comment)\n i = 0\n row = []\n count = 0\n print page\n for comment in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n print table\n return dict(comments=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n print auth.user.username\n db(db.comment.title==session.new_image_title).update(creator = auth.user.username)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n comments = db().select(db.comment.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n print title\n for comment in comments:\n if comment.title == title:\n real_comment = comment\n return dict(comment = real_comment)\n \n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(user)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 92, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 82, in user\n return dict(form=auth())\n File "/home/jboisture/Desktop/web2py/gluon/tools.py", line 966, in __call__\n return self.register()\n File "/home/jboisture/Desktop/web2py/gluon/tools.py", line 1502, in register\n onvalidation=onvalidation):\n File "/home/jboisture/Desktop/web2py/gluon/sqlhtml.py", line 876, in accepts\n onvalidation,\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 1452, in accepts\n status = self._traverse(status)\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 487, in _traverse\n newstatus = self._validate()\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 1245, in _validate\n (value, errors) = validator(value)\n File "/home/jboisture/Desktop/web2py/gluon/validators.py", line 156, in __call__\n exec \'__ret__=\' + self.expression in environment\nTypeError: cannot concatenate \'str\' and \'bool\' objects\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.13-38-28.50cd70b4-e7fc-4094-82e1-6032a6141703 b/errors/127.0.0.1.2010-07-07.13-38-28.50cd70b4-e7fc-4094-82e1-6032a6141703
new file mode 100644
index 0000000..d9a6dc5
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.13-38-28.50cd70b4-e7fc-4094-82e1-6032a6141703
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n comments = db().select(db.comment.ALL)\n i = 0\n row = []\n count = 0\n for comment in comments:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(comments=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n comments = db().select(db.comment.ALL)\n for comment in comments:\n if comment.creator == user:\n print user, comment.creator\n user_pics.append(comment)\n i = 0\n row = []\n count = 0\n print page\n for comment in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n print table\n return dict(comments=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n print auth.user.username\n db(db.comment.title==session.new_image_title).update(creator = auth.user.username)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n comments = db().select(db.comment.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n print title\n for comment in comments:\n if comment.title == title:\n real_comment = comment\n return dict(comment = real_comment)\n \n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(user)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 92, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 82, in user\n return dict(form=auth())\n File "/home/jboisture/Desktop/web2py/gluon/tools.py", line 966, in __call__\n return self.register()\n File "/home/jboisture/Desktop/web2py/gluon/tools.py", line 1502, in register\n onvalidation=onvalidation):\n File "/home/jboisture/Desktop/web2py/gluon/sqlhtml.py", line 876, in accepts\n onvalidation,\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 1452, in accepts\n status = self._traverse(status)\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 487, in _traverse\n newstatus = self._validate()\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 1245, in _validate\n (value, errors) = validator(value)\n File "/home/jboisture/Desktop/web2py/gluon/validators.py", line 156, in __call__\n exec \'__ret__=\' + self.expression in environment\n File "<string>", line 1, in <module>\nNameError: name \'auth_table\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.13-40-20.6ffe0d95-5460-4e2c-93e2-86ead95e02cb b/errors/127.0.0.1.2010-07-07.13-40-20.6ffe0d95-5460-4e2c-93e2-86ead95e02cb
new file mode 100644
index 0000000..d9a6dc5
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.13-40-20.6ffe0d95-5460-4e2c-93e2-86ead95e02cb
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n comments = db().select(db.comment.ALL)\n i = 0\n row = []\n count = 0\n for comment in comments:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(comments=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n comments = db().select(db.comment.ALL)\n for comment in comments:\n if comment.creator == user:\n print user, comment.creator\n user_pics.append(comment)\n i = 0\n row = []\n count = 0\n print page\n for comment in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n print table\n return dict(comments=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n print auth.user.username\n db(db.comment.title==session.new_image_title).update(creator = auth.user.username)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n comments = db().select(db.comment.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n print title\n for comment in comments:\n if comment.title == title:\n real_comment = comment\n return dict(comment = real_comment)\n \n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(user)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 92, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 82, in user\n return dict(form=auth())\n File "/home/jboisture/Desktop/web2py/gluon/tools.py", line 966, in __call__\n return self.register()\n File "/home/jboisture/Desktop/web2py/gluon/tools.py", line 1502, in register\n onvalidation=onvalidation):\n File "/home/jboisture/Desktop/web2py/gluon/sqlhtml.py", line 876, in accepts\n onvalidation,\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 1452, in accepts\n status = self._traverse(status)\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 487, in _traverse\n newstatus = self._validate()\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 1245, in _validate\n (value, errors) = validator(value)\n File "/home/jboisture/Desktop/web2py/gluon/validators.py", line 156, in __call__\n exec \'__ret__=\' + self.expression in environment\n File "<string>", line 1, in <module>\nNameError: name \'auth_table\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.13-42-38.3ddb898c-d832-494c-bc25-79e75640fdbc b/errors/127.0.0.1.2010-07-07.13-42-38.3ddb898c-d832-494c-bc25-79e75640fdbc
new file mode 100644
index 0000000..d9a6dc5
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.13-42-38.3ddb898c-d832-494c-bc25-79e75640fdbc
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n comments = db().select(db.comment.ALL)\n i = 0\n row = []\n count = 0\n for comment in comments:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(comments=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n comments = db().select(db.comment.ALL)\n for comment in comments:\n if comment.creator == user:\n print user, comment.creator\n user_pics.append(comment)\n i = 0\n row = []\n count = 0\n print page\n for comment in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n print table\n return dict(comments=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n print auth.user.username\n db(db.comment.title==session.new_image_title).update(creator = auth.user.username)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n comments = db().select(db.comment.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n print title\n for comment in comments:\n if comment.title == title:\n real_comment = comment\n return dict(comment = real_comment)\n \n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(user)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 92, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 82, in user\n return dict(form=auth())\n File "/home/jboisture/Desktop/web2py/gluon/tools.py", line 966, in __call__\n return self.register()\n File "/home/jboisture/Desktop/web2py/gluon/tools.py", line 1502, in register\n onvalidation=onvalidation):\n File "/home/jboisture/Desktop/web2py/gluon/sqlhtml.py", line 876, in accepts\n onvalidation,\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 1452, in accepts\n status = self._traverse(status)\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 487, in _traverse\n newstatus = self._validate()\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 1245, in _validate\n (value, errors) = validator(value)\n File "/home/jboisture/Desktop/web2py/gluon/validators.py", line 156, in __call__\n exec \'__ret__=\' + self.expression in environment\n File "<string>", line 1, in <module>\nNameError: name \'auth_table\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.13-43-36.dccbc715-7c4d-4e1a-8d63-13f904ad30f0 b/errors/127.0.0.1.2010-07-07.13-43-36.dccbc715-7c4d-4e1a-8d63-13f904ad30f0
new file mode 100644
index 0000000..501ee72
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.13-43-36.dccbc715-7c4d-4e1a-8d63-13f904ad30f0
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n comments = db().select(db.comment.ALL)\n i = 0\n row = []\n count = 0\n for comment in comments:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(comments=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n comments = db().select(db.comment.ALL)\n for comment in comments:\n if comment.creator == user:\n print user, comment.creator\n user_pics.append(comment)\n i = 0\n row = []\n count = 0\n print page\n for comment in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n print table\n return dict(comments=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n print auth.user.username\n db(db.comment.title==session.new_image_title).update(creator = auth.user.username)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n comments = db().select(db.comment.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n print title\n for comment in comments:\n if comment.title == title:\n real_comment = comment\n return dict(comment = real_comment)\n \n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(user)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 92, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 82, in user\n return dict(form=auth())\n File "/home/jboisture/Desktop/web2py/gluon/tools.py", line 966, in __call__\n return self.register()\n File "/home/jboisture/Desktop/web2py/gluon/tools.py", line 1502, in register\n onvalidation=onvalidation):\n File "/home/jboisture/Desktop/web2py/gluon/sqlhtml.py", line 876, in accepts\n onvalidation,\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 1452, in accepts\n status = self._traverse(status)\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 487, in _traverse\n newstatus = self._validate()\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 1245, in _validate\n (value, errors) = validator(value)\n File "/home/jboisture/Desktop/web2py/gluon/validators.py", line 156, in __call__\n exec \'__ret__=\' + self.expression in environment\n File "<string>", line 1, in <module>\nTypeError: count() takes at least 1 argument (0 given)\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.13-44-40.c1e96f3e-1124-4b21-b3b8-ac9dea6f23a7 b/errors/127.0.0.1.2010-07-07.13-44-40.c1e96f3e-1124-4b21-b3b8-ac9dea6f23a7
new file mode 100644
index 0000000..4028e43
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.13-44-40.c1e96f3e-1124-4b21-b3b8-ac9dea6f23a7
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n comments = db().select(db.comment.ALL)\n i = 0\n row = []\n count = 0\n for comment in comments:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(comments=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n comments = db().select(db.comment.ALL)\n for comment in comments:\n if comment.creator == user:\n print user, comment.creator\n user_pics.append(comment)\n i = 0\n row = []\n count = 0\n print page\n for comment in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n print table\n return dict(comments=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n print auth.user.username\n db(db.comment.title==session.new_image_title).update(creator = auth.user.username)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n comments = db().select(db.comment.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n print title\n for comment in comments:\n if comment.title == title:\n real_comment = comment\n return dict(comment = real_comment)\n \n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(user)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 92, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 82, in user\n return dict(form=auth())\n File "/home/jboisture/Desktop/web2py/gluon/tools.py", line 966, in __call__\n return self.register()\n File "/home/jboisture/Desktop/web2py/gluon/tools.py", line 1502, in register\n onvalidation=onvalidation):\n File "/home/jboisture/Desktop/web2py/gluon/sqlhtml.py", line 876, in accepts\n onvalidation,\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 1452, in accepts\n status = self._traverse(status)\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 487, in _traverse\n newstatus = self._validate()\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 1245, in _validate\n (value, errors) = validator(value)\n File "/home/jboisture/Desktop/web2py/gluon/validators.py", line 156, in __call__\n exec \'__ret__=\' + self.expression in environment\n File "<string>", line 1\n __ret__=str(value).count(,) == 0\n ^\nSyntaxError: invalid syntax\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.13-44-52.3d13b8c8-4331-45e0-bfa0-b5959ab29875 b/errors/127.0.0.1.2010-07-07.13-44-52.3d13b8c8-4331-45e0-bfa0-b5959ab29875
new file mode 100644
index 0000000..501ee72
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.13-44-52.3d13b8c8-4331-45e0-bfa0-b5959ab29875
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n comments = db().select(db.comment.ALL)\n i = 0\n row = []\n count = 0\n for comment in comments:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(comments=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n comments = db().select(db.comment.ALL)\n for comment in comments:\n if comment.creator == user:\n print user, comment.creator\n user_pics.append(comment)\n i = 0\n row = []\n count = 0\n print page\n for comment in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n print table\n return dict(comments=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n print auth.user.username\n db(db.comment.title==session.new_image_title).update(creator = auth.user.username)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n comments = db().select(db.comment.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n print title\n for comment in comments:\n if comment.title == title:\n real_comment = comment\n return dict(comment = real_comment)\n \n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(user)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 92, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 82, in user\n return dict(form=auth())\n File "/home/jboisture/Desktop/web2py/gluon/tools.py", line 966, in __call__\n return self.register()\n File "/home/jboisture/Desktop/web2py/gluon/tools.py", line 1502, in register\n onvalidation=onvalidation):\n File "/home/jboisture/Desktop/web2py/gluon/sqlhtml.py", line 876, in accepts\n onvalidation,\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 1452, in accepts\n status = self._traverse(status)\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 480, in _traverse\n newstatus = c._traverse(status) and newstatus\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 487, in _traverse\n newstatus = self._validate()\n File "/home/jboisture/Desktop/web2py/gluon/html.py", line 1245, in _validate\n (value, errors) = validator(value)\n File "/home/jboisture/Desktop/web2py/gluon/validators.py", line 156, in __call__\n exec \'__ret__=\' + self.expression in environment\n File "<string>", line 1, in <module>\nTypeError: count() takes at least 1 argument (0 given)\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.14-14-10.108e3849-d19a-4979-bb8f-170e1788b88e b/errors/127.0.0.1.2010-07-07.14-14-10.108e3849-d19a-4979-bb8f-170e1788b88e
new file mode 100644
index 0000000..9ccb051
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.14-14-10.108e3849-d19a-4979-bb8f-170e1788b88e
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n comments = db().select(db.comment.ALL)\n i = 0\n row = []\n count = 0\n for comment in comments:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(comments=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n comments = db().select(db.comment.ALL)\n for comment in comments:\n if comment.creator == user:\n print user, comment.creator\n user_pics.append(comment)\n i = 0\n row = []\n count = 0\n print page\n for comment in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n print table\n return dict(comments=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'new Image\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n print auth.user.username\n db(db.comment.title==session.new_image_title).update(creator = auth.user.username)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n comments = db().select(db.comment.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n print title\n for comment in comments:\n if comment.title == title:\n real_comment = comment\n return dict(comment = real_comment)\n \n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\t\n\ndef adminpage():\n db.comment.truncate()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(upload)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 92, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 59, in upload\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'new Image\', \'description\'])\n File "/home/jboisture/Desktop/web2py/gluon/sqlhtml.py", line 617, in __init__\n field = self.table[fieldname]\n File "/home/jboisture/Desktop/web2py/gluon/sql.py", line 1592, in __getitem__\n return dict.__getitem__(self, str(key))\nKeyError: \'new Image\'\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.14-19-31.2b679cfa-147e-44f5-bb2c-c000d4faec5a b/errors/127.0.0.1.2010-07-07.14-19-31.2b679cfa-147e-44f5-bb2c-c000d4faec5a
new file mode 100644
index 0000000..5162b8d
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.14-19-31.2b679cfa-147e-44f5-bb2c-c000d4faec5a
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n comments = db().select(db.comment.ALL)\n i = 0\n row = []\n count = 0\n for comment in comments:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(comments=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n comments = db().select(db.comment.ALL)\n for comment in comments:\n if comment.creator == user:\n print user, comment.creator\n user_pics.append(comment)\n i = 0\n row = []\n count = 0\n print page\n for comment in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n print table\n return dict(comments=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n print auth.user.username\n db(db.comment.title==session.new_image_title).update(creator = auth.user.username)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n comments = db().select(db.comment.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n print title\n for comment in comments:\n if comment.title == title:\n real_comment = comment\n return dict(comment = real_comment)\n \n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\t\n\ndef adminpage():\n import pdb\n pdb.set_trace()\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(adminpage)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 93, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 88, in adminpage\n redirect(\'index.html\')\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 88, in adminpage\n redirect(\'index.html\')\n File "/usr/lib/python2.6/bdb.py", line 46, in trace_dispatch\n return self.dispatch_line(frame)\n File "/usr/lib/python2.6/bdb.py", line 65, in dispatch_line\n if self.quitting: raise BdbQuit\nBdbQuit\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.16-29-29.4e5b9f63-8d7c-431d-a58d-33ab2b0b203a b/errors/127.0.0.1.2010-07-07.16-29-29.4e5b9f63-8d7c-431d-a58d-33ab2b0b203a
new file mode 100644
index 0000000..03654d0
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.16-29-29.4e5b9f63-8d7c-431d-a58d-33ab2b0b203a
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/views/default/image.html'
+p4
+sS'code'
+p5
+S'response.write(\'<html>\\n <link rel="stylesheet" href="../static/glike.css" type="text/css" />\\n <head>\\n <title>Turtle Art Image Database</title>\\n </head>\\n <body>\\n <div id="header">\\n <h1><a href="index.html" >Home</a></h1>\\n <ul>\\n \',escape=False)\nif auth.is_logged_in():\n response.write(\'\\n <li>\',escape=False)\n response.write(auth.user.username+": ")\n response.write(\'</li>\\n <li><a href="user/logout">Log Out</li>\\n <li><a href="upload.html" >New Image</a></li>\\n <li><a href="adminpage.html" >Clear All</a></li>\\n \',escape=False)\n pass\nresponse.write(\'\\n \',escape=False)\nif not auth.is_logged_in():\n response.write(\'\\n <li><a href="user.html">log in</a></li>\\n \',escape=False)\n pass\nresponse.write("\\n </ul>\\n </div>\\n <div id=\'bodycontent\'>\\n \\n<h1>",escape=False)\nresponse.write( comment.title)\nresponse.write(\'</h1>\\n<img width="1000px"src="\',escape=False)\nresponse.write(URL(r=request, f=\'download\', args=comment.newimage))\nresponse.write(\'">\\n\',escape=False)\nif comment.creator == auth.user.username:\n response.write(\'<a href=\',escape=False)\n response.write("delete?title="+str(comment.title).replace(\' \',\'*\'))\n response.write(\'>delete image</a>\\n<p>\',escape=False)\n response.write( "author: ")\n response.write(\'<a href=\',escape=False)\n response.write( "profile?user=" +comment.creator)\n response.write(\'>\',escape=False)\n response.write(comment.creator)\n response.write(\' </a></p>\\n<a href="\',escape=False)\n response.write(URL(r=request, f=\'download\', args=comment.file))\n response.write(\'"> Download TA file</a>\\n<p>\',escape=False)\n response.write( "description: " + comment.description)\n response.write(\'</p>\\n\\n </div>\\n </body>\\n </style>\\n</html>\\n\',escape=False)'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/views/default/image.html", line 16, in <module>\nAttributeError: \'NoneType\' object has no attribute \'username\'\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.16-32-50.81a49f98-1a5f-4ca8-a41e-693855f5138b b/errors/127.0.0.1.2010-07-07.16-32-50.81a49f98-1a5f-4ca8-a41e-693855f5138b
new file mode 100644
index 0000000..3e2e5f7
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.16-32-50.81a49f98-1a5f-4ca8-a41e-693855f5138b
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n comments = db().select(db.comment.ALL)\n i = 0\n row = []\n count = 0\n for comment in comments:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(comments=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n comments = db().select(db.comment.ALL)\n for comment in comments:\n if comment.creator == user:\n print user, comment.creator\n user_pics.append(comment)\n i = 0\n row = []\n count = 0\n print page\n for comment in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(comments=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n print auth.user.username\n db(db.comment.title==session.new_image_title).update(creator = auth.user.username)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n import pdb\n pdb.set_trace()\n comments = db().select(db.comment.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n print title\n for comment in comments:\n if comment.title == title:\n real_comment = comment\n return dict(comment = real_comment)\n \n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\t\n\ndef adminpage():\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(image)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 92, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 70, in image\n print title\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 70, in image\n print title\n File "/usr/lib/python2.6/bdb.py", line 46, in trace_dispatch\n return self.dispatch_line(frame)\n File "/usr/lib/python2.6/bdb.py", line 65, in dispatch_line\n if self.quitting: raise BdbQuit\nBdbQuit\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.16-32-50.97d2cef2-71eb-448d-83b7-90194b6973f3 b/errors/127.0.0.1.2010-07-07.16-32-50.97d2cef2-71eb-448d-83b7-90194b6973f3
new file mode 100644
index 0000000..3bb3bd4
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.16-32-50.97d2cef2-71eb-448d-83b7-90194b6973f3
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/views/default/image.html'
+p4
+sS'code'
+p5
+S'response.write(\'<html>\\n <link rel="stylesheet" href="../static/glike.css" type="text/css" />\\n <head>\\n <title>Turtle Art Image Database</title>\\n </head>\\n <body>\\n <div id="header">\\n <h1><a href="index.html" >Home</a></h1>\\n <ul>\\n \',escape=False)\nif auth.is_logged_in():\n response.write(\'\\n <li>\',escape=False)\n response.write(auth.user.username+": ")\n response.write(\'</li>\\n <li><a href="user/logout">Log Out</li>\\n <li><a href="upload.html" >New Image</a></li>\\n <li><a href="adminpage.html" >Clear All</a></li>\\n \',escape=False)\n pass\nresponse.write(\'\\n \',escape=False)\nif not auth.is_logged_in():\n response.write(\'\\n <li><a href="user.html">log in</a></li>\\n \',escape=False)\n pass\nresponse.write("\\n </ul>\\n </div>\\n <div id=\'bodycontent\'>\\n \\n<h1>",escape=False)\nresponse.write( comment.title)\nresponse.write(\'</h1>\\n<img width="1000px"src="\',escape=False)\nresponse.write(URL(r=request, f=\'download\', args=comment.newimage))\nresponse.write(\'">\\n\',escape=False)\nif auth.is_logged_in:\n response.write(\'\\n \',escape=False)\n if comment.creator == auth.user.username:\n response.write(\'\\n <a href=\',escape=False)\n response.write("delete?title="+str(comment.title).replace(\' \',\'*\'))\n response.write(\'>delete image</a>\\n \',escape=False)\n pass\n response.write(\'\\n \',escape=False)\n pass\nresponse.write(\'\\n<p>\',escape=False)\nresponse.write( "author: ")\nresponse.write(\'<a href=\',escape=False)\nresponse.write( "profile?user=" +comment.creator)\nresponse.write(\'>\',escape=False)\nresponse.write(comment.creator)\nresponse.write(\' </a></p>\\n<a href="\',escape=False)\nresponse.write(URL(r=request, f=\'download\', args=comment.file))\nresponse.write(\'"> Download TA file</a>\\n<p>\',escape=False)\nresponse.write( "description: " + comment.description)\nresponse.write(\'</p>\\n\\n </div>\\n </body>\\n </style>\\n</html>\\n\',escape=False)'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/views/default/image.html", line 18, in <module>\nAttributeError: \'NoneType\' object has no attribute \'username\'\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.16-32-54.31cc3ee7-07f6-44cb-9720-b478c11bf60f b/errors/127.0.0.1.2010-07-07.16-32-54.31cc3ee7-07f6-44cb-9720-b478c11bf60f
new file mode 100644
index 0000000..3bb3bd4
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.16-32-54.31cc3ee7-07f6-44cb-9720-b478c11bf60f
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/views/default/image.html'
+p4
+sS'code'
+p5
+S'response.write(\'<html>\\n <link rel="stylesheet" href="../static/glike.css" type="text/css" />\\n <head>\\n <title>Turtle Art Image Database</title>\\n </head>\\n <body>\\n <div id="header">\\n <h1><a href="index.html" >Home</a></h1>\\n <ul>\\n \',escape=False)\nif auth.is_logged_in():\n response.write(\'\\n <li>\',escape=False)\n response.write(auth.user.username+": ")\n response.write(\'</li>\\n <li><a href="user/logout">Log Out</li>\\n <li><a href="upload.html" >New Image</a></li>\\n <li><a href="adminpage.html" >Clear All</a></li>\\n \',escape=False)\n pass\nresponse.write(\'\\n \',escape=False)\nif not auth.is_logged_in():\n response.write(\'\\n <li><a href="user.html">log in</a></li>\\n \',escape=False)\n pass\nresponse.write("\\n </ul>\\n </div>\\n <div id=\'bodycontent\'>\\n \\n<h1>",escape=False)\nresponse.write( comment.title)\nresponse.write(\'</h1>\\n<img width="1000px"src="\',escape=False)\nresponse.write(URL(r=request, f=\'download\', args=comment.newimage))\nresponse.write(\'">\\n\',escape=False)\nif auth.is_logged_in:\n response.write(\'\\n \',escape=False)\n if comment.creator == auth.user.username:\n response.write(\'\\n <a href=\',escape=False)\n response.write("delete?title="+str(comment.title).replace(\' \',\'*\'))\n response.write(\'>delete image</a>\\n \',escape=False)\n pass\n response.write(\'\\n \',escape=False)\n pass\nresponse.write(\'\\n<p>\',escape=False)\nresponse.write( "author: ")\nresponse.write(\'<a href=\',escape=False)\nresponse.write( "profile?user=" +comment.creator)\nresponse.write(\'>\',escape=False)\nresponse.write(comment.creator)\nresponse.write(\' </a></p>\\n<a href="\',escape=False)\nresponse.write(URL(r=request, f=\'download\', args=comment.file))\nresponse.write(\'"> Download TA file</a>\\n<p>\',escape=False)\nresponse.write( "description: " + comment.description)\nresponse.write(\'</p>\\n\\n </div>\\n </body>\\n </style>\\n</html>\\n\',escape=False)'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/views/default/image.html", line 18, in <module>\nAttributeError: \'NoneType\' object has no attribute \'username\'\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.16-39-27.9cdc3ed8-c90f-48a5-9340-d476134c444f b/errors/127.0.0.1.2010-07-07.16-39-27.9cdc3ed8-c90f-48a5-9340-d476134c444f
new file mode 100644
index 0000000..e56bafc
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.16-39-27.9cdc3ed8-c90f-48a5-9340-d476134c444f
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n comments = db().select(db.comment.ALL)\n i = 0\n row = []\n count = 0\n for comment in comments:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(comments=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n comments = db().select(db.comment.ALL)\n for comment in comments:\n if comment.creator == user:\n print user, comment.creator\n user_pics.append(comment)\n i = 0\n row = []\n count = 0\n print page\n for comment in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(comments=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n db(db.comment.title==session.new_image_title).update(creator = auth.user.username)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n comments = db().select(db.comment.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for comment in comments:\n if comment.title == title:\n real_comment = comment\n return dict(comment = real_comment)\n \n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\ndef delete():\n comments = db().select(db.comment.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for comment in comments:\n if comment.title == title:\n real_comment = comment\n if auth.is_logged_in():\n if auth.user.username == real_comment.creator:\n db(real_comment).delete()\n redirect(URL(r=request, f=\'index\')) \n \n\t\n\ndef adminpage():\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(delete)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 100, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 89, in delete\n db(real_comment).delete()\n File "/home/jboisture/Desktop/web2py/gluon/sql.py", line 3253, in delete\n query = self._delete()\n File "/home/jboisture/Desktop/web2py/gluon/sql.py", line 3244, in _delete\n \'Set: unable to determine what to delete\'\nSyntaxError: Set: unable to determine what to delete\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.16-42-49.21f22d8c-b870-4d72-b35f-6be8c9caaeb4 b/errors/127.0.0.1.2010-07-07.16-42-49.21f22d8c-b870-4d72-b35f-6be8c9caaeb4
new file mode 100644
index 0000000..7c93995
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.16-42-49.21f22d8c-b870-4d72-b35f-6be8c9caaeb4
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n comments = db().select(db.comment.ALL)\n i = 0\n row = []\n count = 0\n for comment in comments:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(comments=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n comments = db().select(db.comment.ALL)\n for comment in comments:\n if comment.creator == user:\n print user, comment.creator\n user_pics.append(comment)\n i = 0\n row = []\n count = 0\n print page\n for comment in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(comments=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n db(db.comment.title==session.new_image_title).update(creator = auth.user.username)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n comments = db().select(db.comment.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for comment in comments:\n if comment.title == title:\n real_comment = comment\n return dict(comment = real_comment)\n \n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\ndef delete():\n comments = db().select(db.comment.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for comment in comments:\n if comment.title == title:\n real_comment = comment\n import pdb\n pdb.set_trace()\n #if auth.is_logged_in():\n #if auth.user.username == real_comment.creator:\n #query=(db.comment.key=id)\n #db(real_comment).delete()\n redirect(URL(r=request, f=\'index\')) \n \n\t\n\ndef adminpage():\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(delete)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 103, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 93, in delete\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 93, in delete\n File "/usr/lib/python2.6/bdb.py", line 46, in trace_dispatch\n return self.dispatch_line(frame)\n File "/usr/lib/python2.6/bdb.py", line 65, in dispatch_line\n if self.quitting: raise BdbQuit\nBdbQuit\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.16-42-49.5500a16a-fe80-4d2b-a2df-b94c99a58dfd b/errors/127.0.0.1.2010-07-07.16-42-49.5500a16a-fe80-4d2b-a2df-b94c99a58dfd
new file mode 100644
index 0000000..7ce36f5
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.16-42-49.5500a16a-fe80-4d2b-a2df-b94c99a58dfd
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n comments = db().select(db.comment.ALL)\n i = 0\n row = []\n count = 0\n for comment in comments:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(comments=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n comments = db().select(db.comment.ALL)\n for comment in comments:\n if comment.creator == user:\n print user, comment.creator\n user_pics.append(comment)\n i = 0\n row = []\n count = 0\n print page\n for comment in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(comments=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n db(db.comment.title==session.new_image_title).update(creator = auth.user.username)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n comments = db().select(db.comment.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for comment in comments:\n if comment.title == title:\n real_comment = comment\n return dict(comment = real_comment)\n \n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\ndef delete():\n comments = db().select(db.comment.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for comment in comments:\n if comment.title == title:\n real_comment = comment\n if auth.is_logged_in():\n if auth.user.username == real_comment.creator:\n query=(db.comment.id=real_comment.id)\n db(query).delete()\n redirect(URL(r=request, f=\'index\')) \n \n\t\n\ndef adminpage():\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(image)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 89\n query=(db.comment.id=real_comment.id)\n ^\nSyntaxError: invalid syntax\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.16-42-49.741b571e-4ded-49e0-9cf2-14a0b3f8e4ce b/errors/127.0.0.1.2010-07-07.16-42-49.741b571e-4ded-49e0-9cf2-14a0b3f8e4ce
new file mode 100644
index 0000000..e358c61
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.16-42-49.741b571e-4ded-49e0-9cf2-14a0b3f8e4ce
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n comments = db().select(db.comment.ALL)\n i = 0\n row = []\n count = 0\n for comment in comments:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(comments=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n comments = db().select(db.comment.ALL)\n for comment in comments:\n if comment.creator == user:\n print user, comment.creator\n user_pics.append(comment)\n i = 0\n row = []\n count = 0\n print page\n for comment in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(comments=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n db(db.comment.title==session.new_image_title).update(creator = auth.user.username)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n comments = db().select(db.comment.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for comment in comments:\n if comment.title == title:\n real_comment = comment\n return dict(comment = real_comment)\n \n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\ndef delete():\n comments = db().select(db.comment.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for comment in comments:\n if comment.title == title:\n real_comment = comment\n if auth.is_logged_in():\n if auth.user.username == real_comment.creator:\n query=(db.comment.id=real_comment.id)\n db(query).delete()\n redirect(URL(r=request, f=\'index\')) \n \n\t\n\ndef adminpage():\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(delete)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 89\n query=(db.comment.id=real_comment.id)\n ^\nSyntaxError: invalid syntax\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.16-42-51.27384b3c-0d23-4255-b7a5-94878177932a b/errors/127.0.0.1.2010-07-07.16-42-51.27384b3c-0d23-4255-b7a5-94878177932a
new file mode 100644
index 0000000..7ce36f5
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.16-42-51.27384b3c-0d23-4255-b7a5-94878177932a
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n comments = db().select(db.comment.ALL)\n i = 0\n row = []\n count = 0\n for comment in comments:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(comments=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n comments = db().select(db.comment.ALL)\n for comment in comments:\n if comment.creator == user:\n print user, comment.creator\n user_pics.append(comment)\n i = 0\n row = []\n count = 0\n print page\n for comment in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(comments=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n db(db.comment.title==session.new_image_title).update(creator = auth.user.username)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n comments = db().select(db.comment.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for comment in comments:\n if comment.title == title:\n real_comment = comment\n return dict(comment = real_comment)\n \n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\ndef delete():\n comments = db().select(db.comment.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for comment in comments:\n if comment.title == title:\n real_comment = comment\n if auth.is_logged_in():\n if auth.user.username == real_comment.creator:\n query=(db.comment.id=real_comment.id)\n db(query).delete()\n redirect(URL(r=request, f=\'index\')) \n \n\t\n\ndef adminpage():\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(image)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 89\n query=(db.comment.id=real_comment.id)\n ^\nSyntaxError: invalid syntax\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-07.16-42-52.cbb2f140-acf8-454d-8233-26a716b375cf b/errors/127.0.0.1.2010-07-07.16-42-52.cbb2f140-acf8-454d-8233-26a716b375cf
new file mode 100644
index 0000000..bc9b4c7
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-07.16-42-52.cbb2f140-acf8-454d-8233-26a716b375cf
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n comments = db().select(db.comment.ALL)\n i = 0\n row = []\n count = 0\n for comment in comments:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(comments=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n comments = db().select(db.comment.ALL)\n for comment in comments:\n if comment.creator == user:\n print user, comment.creator\n user_pics.append(comment)\n i = 0\n row = []\n count = 0\n print page\n for comment in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(comment)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(comments=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.comment, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n db(db.comment.title==session.new_image_title).update(creator = auth.user.username)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n comments = db().select(db.comment.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for comment in comments:\n if comment.title == title:\n real_comment = comment\n return dict(comment = real_comment)\n \n \ndef testimage():\n\treturn db(db.comment.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\ndef delete():\n comments = db().select(db.comment.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for comment in comments:\n if comment.title == title:\n real_comment = comment\n if auth.is_logged_in():\n if auth.user.username == real_comment.creator:\n query=(db.comment.id=real_comment.id)\n db(query).delete()\n redirect(URL(r=request, f=\'index\')) \n \n\t\n\ndef adminpage():\n redirect(\'index.html\')\n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 89\n query=(db.comment.id=real_comment.id)\n ^\nSyntaxError: invalid syntax\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-08.15-07-46.fde1a7c2-e75d-4a3e-b5b3-12637cc93288 b/errors/127.0.0.1.2010-07-08.15-07-46.fde1a7c2-e75d-4a3e-b5b3-12637cc93288
new file mode 100644
index 0000000..c9c8b6e
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-08.15-07-46.fde1a7c2-e75d-4a3e-b5b3-12637cc93288
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n images = db().select(db.image.ALL)\n i = 0\n row = []\n count = 0\n for image in images:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n images = db().select(db.image.ALL)\n for image in images:\n if image.creator == user:\n print user, image.creator\n user_pics.append(image)\n i = 0\n row = []\n count = 0\n print page\n for image in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.image, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n db(db.image.title==session.new_image_title).update(creator = auth.user.username)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if auth.is_logged_in():\n form = SQLFORM(db.image, fields = [\'comment\'])\n if form.accepts(request.vars, session):\n session.image_id = real_image.image_id\n\n return dict(image = real_image, form= form)\n \n \ndef testimage():\n\treturn db(db.image.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\ndef delete():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if auth.is_logged_in():\n if auth.user.username == real_image.creator:\n query=(db.image.id==real_image.id)\n db(query).delete()\n redirect(URL(r=request, f=\'index\')) \n \n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(image)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 102, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 73, in image\n form = SQLFORM(db.image, fields = [\'comment\'])\n File "/home/jboisture/Desktop/web2py/gluon/sqlhtml.py", line 617, in __init__\n field = self.table[fieldname]\n File "/home/jboisture/Desktop/web2py/gluon/sql.py", line 1592, in __getitem__\n return dict.__getitem__(self, str(key))\nKeyError: \'comment\'\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-08.15-14-06.7b0ddfb6-a1e1-452d-94f3-8d62c337b7eb b/errors/127.0.0.1.2010-07-08.15-14-06.7b0ddfb6-a1e1-452d-94f3-8d62c337b7eb
new file mode 100644
index 0000000..7b3c72e
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-08.15-14-06.7b0ddfb6-a1e1-452d-94f3-8d62c337b7eb
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py'
+p4
+sS'code'
+p5
+S'if request.env.web2py_runtime_gae:\n db = DAL(\'gae\')\n session.connect(request,response,db=db)\nelse:db = DAL("sqlite://storage.db")\n\ndb.define_table(\'image\',\n Field(\'file\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension=\'ta\', error_message="Must be a Turtle Art file")]),\n Field(\'title\', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, \'image.title\', error_message="Title is already taken"),IS_EXPR(\'str(value).count("*") == 0\', error_message="Title can not contain \'*\'")]),\n Field(\'image_id\'),\n Field(\'creator\', requires=IS_NOT_EMPTY(error_message="You must include your name")),\n Field(\'description\', \'text\'),\n Field(\'newimage\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a image to upload"), IS_UPLOAD_FILENAME(extension=\'png\', error_message="Must be a PNG image")]))\n\ndb.define_table(\'comment\',\n Field(\'image_id\', db.image),\n Field(\'comment_id\')\n Field(\'author\'),\n Field(\'body\', \'text\'))\n\nfrom gluon.tools import Auth\nauth = Auth(globals(),db)\nauth_table = db.define_table(\n auth.settings.table_user_name,\n Field(\'username\', length=128, default="", unique = True),\n Field(\'email\', length=128, default="", unique=True),\n Field(\'password\', \'password\', length=256,\n readable=False, label=\'Password\'),\n Field(\'registration_key\', length=128, default= "",\n writable=False, readable=False))\n\ndb.comment.image_id.requires = IS_IN_DB(db, db.image.image_id, \'%(title)s\')\ndb.comment.author.requires = IS_NOT_EMPTY()\ndb.comment.body.requires = IS_NOT_EMPTY()\n\nauth_table.username.requires = [IS_EXPR(\'str(value).count(" ") == 0\', error_message=\'Username must be one word\'), IS_NOT_IN_DB(db, auth_table.username)]\nauth_table.password.requires = [IS_STRONG(), CRYPT()]\nauth_table.email.requires = [\n IS_EMAIL(error_message=auth.messages.invalid_email),\n IS_NOT_IN_DB(db, auth_table.email)]\nauth.settings.table_user = auth_table\nauth.define_tables()\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py", line 17\n Field(\'author\'),\n ^\nSyntaxError: invalid syntax\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-08.15-14-07.3795a611-89e5-4715-a7c6-2b21e64b3cd4 b/errors/127.0.0.1.2010-07-08.15-14-07.3795a611-89e5-4715-a7c6-2b21e64b3cd4
new file mode 100644
index 0000000..7b3c72e
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-08.15-14-07.3795a611-89e5-4715-a7c6-2b21e64b3cd4
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py'
+p4
+sS'code'
+p5
+S'if request.env.web2py_runtime_gae:\n db = DAL(\'gae\')\n session.connect(request,response,db=db)\nelse:db = DAL("sqlite://storage.db")\n\ndb.define_table(\'image\',\n Field(\'file\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension=\'ta\', error_message="Must be a Turtle Art file")]),\n Field(\'title\', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, \'image.title\', error_message="Title is already taken"),IS_EXPR(\'str(value).count("*") == 0\', error_message="Title can not contain \'*\'")]),\n Field(\'image_id\'),\n Field(\'creator\', requires=IS_NOT_EMPTY(error_message="You must include your name")),\n Field(\'description\', \'text\'),\n Field(\'newimage\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a image to upload"), IS_UPLOAD_FILENAME(extension=\'png\', error_message="Must be a PNG image")]))\n\ndb.define_table(\'comment\',\n Field(\'image_id\', db.image),\n Field(\'comment_id\')\n Field(\'author\'),\n Field(\'body\', \'text\'))\n\nfrom gluon.tools import Auth\nauth = Auth(globals(),db)\nauth_table = db.define_table(\n auth.settings.table_user_name,\n Field(\'username\', length=128, default="", unique = True),\n Field(\'email\', length=128, default="", unique=True),\n Field(\'password\', \'password\', length=256,\n readable=False, label=\'Password\'),\n Field(\'registration_key\', length=128, default= "",\n writable=False, readable=False))\n\ndb.comment.image_id.requires = IS_IN_DB(db, db.image.image_id, \'%(title)s\')\ndb.comment.author.requires = IS_NOT_EMPTY()\ndb.comment.body.requires = IS_NOT_EMPTY()\n\nauth_table.username.requires = [IS_EXPR(\'str(value).count(" ") == 0\', error_message=\'Username must be one word\'), IS_NOT_IN_DB(db, auth_table.username)]\nauth_table.password.requires = [IS_STRONG(), CRYPT()]\nauth_table.email.requires = [\n IS_EMAIL(error_message=auth.messages.invalid_email),\n IS_NOT_IN_DB(db, auth_table.email)]\nauth.settings.table_user = auth_table\nauth.define_tables()\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py", line 17\n Field(\'author\'),\n ^\nSyntaxError: invalid syntax\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-08.15-14-29.1e5f4dc2-43ef-4b5c-9b5c-b7af6561aee8 b/errors/127.0.0.1.2010-07-08.15-14-29.1e5f4dc2-43ef-4b5c-9b5c-b7af6561aee8
new file mode 100644
index 0000000..550cda3
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-08.15-14-29.1e5f4dc2-43ef-4b5c-9b5c-b7af6561aee8
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n images = db().select(db.image.ALL)\n i = 0\n row = []\n count = 0\n for image in images:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n images = db().select(db.image.ALL)\n for image in images:\n if image.creator == user:\n print user, image.creator\n user_pics.append(image)\n i = 0\n row = []\n count = 0\n print page\n for image in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.image, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n db(db.image.title==session.new_image_title).update(creator = auth.user.username)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if auth.is_logged_in():\n form = SQLFORM(db.image, fields = [\'body\'])\n if form.accepts(request.vars, session):\n import pdb\n pdb.set_trace()\n db(db.comment.==session.new_image_title).update(creator = auth.user.username)\n session.image_id = real_image.image_id\n\n return dict(image = real_image, form= form)\n \n \ndef testimage():\n\treturn db(db.image.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\ndef delete():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if auth.is_logged_in():\n if auth.user.username == real_image.creator:\n query=(db.image.id==real_image.id)\n db(query).delete()\n redirect(URL(r=request, f=\'index\')) \n \n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 77\n db(db.comment.==session.new_image_title).update(creator = auth.user.username)\n ^\nSyntaxError: invalid syntax\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-08.15-14-55.47d15630-09c6-484b-be13-70f862f8f005 b/errors/127.0.0.1.2010-07-08.15-14-55.47d15630-09c6-484b-be13-70f862f8f005
new file mode 100644
index 0000000..c57b550
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-08.15-14-55.47d15630-09c6-484b-be13-70f862f8f005
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n images = db().select(db.image.ALL)\n i = 0\n row = []\n count = 0\n for image in images:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n images = db().select(db.image.ALL)\n for image in images:\n if image.creator == user:\n print user, image.creator\n user_pics.append(image)\n i = 0\n row = []\n count = 0\n print page\n for image in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.image, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n db(db.image.title==session.new_image_title).update(creator = auth.user.username)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if auth.is_logged_in():\n form = SQLFORM(db.image, fields = [\'body\'])\n if form.accepts(request.vars, session):\n import pdb\n pdb.set_trace()\n db(db.comment.comment_id==session.new_image_title).update(creator = auth.user.username)\n session.image_id = real_image.image_id\n\n return dict(image = real_image, form= form)\n \n \ndef testimage():\n\treturn db(db.image.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\ndef delete():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if auth.is_logged_in():\n if auth.user.username == real_image.creator:\n query=(db.image.id==real_image.id)\n db(query).delete()\n redirect(URL(r=request, f=\'index\')) \n \n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(image)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 105, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 73, in image\n form = SQLFORM(db.image, fields = [\'body\'])\n File "/home/jboisture/Desktop/web2py/gluon/sqlhtml.py", line 617, in __init__\n field = self.table[fieldname]\n File "/home/jboisture/Desktop/web2py/gluon/sql.py", line 1592, in __getitem__\n return dict.__getitem__(self, str(key))\nKeyError: \'body\'\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-08.15-20-04.c1fba562-e378-41c4-92df-d633a3e37b90 b/errors/127.0.0.1.2010-07-08.15-20-04.c1fba562-e378-41c4-92df-d633a3e37b90
new file mode 100644
index 0000000..060a1d9
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-08.15-20-04.c1fba562-e378-41c4-92df-d633a3e37b90
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n images = db().select(db.image.ALL)\n i = 0\n row = []\n count = 0\n for image in images:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n images = db().select(db.image.ALL)\n for image in images:\n if image.creator == user:\n print user, image.creator\n user_pics.append(image)\n i = 0\n row = []\n count = 0\n print page\n for image in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.image, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n db(db.image.title==session.new_image_title).update(creator = auth.user.username)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if auth.is_logged_in():\n form = SQLFORM(db.comment, fields = [\'body\'])\n if form.accepts(request.vars, session):\n import pdb\n pdb.set_trace()\n db(db.comment.comment_id==session.new_image_title).update(creator = auth.user.username)\n session.image_id = real_image.image_id\n\n return dict(image = real_image, form= form)\n \n \ndef testimage():\n\treturn db(db.image.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\ndef delete():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if auth.is_logged_in():\n if auth.user.username == real_image.creator:\n query=(db.image.id==real_image.id)\n db(query).delete()\n redirect(URL(r=request, f=\'index\')) \n \n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(image)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 105, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 77, in image\n db(db.comment.comment_id==session.new_image_title).update(creator = auth.user.username)\n File "/home/jboisture/Desktop/web2py/gluon/sql.py", line 3302, in update\n query = self._update(**update_fields)\n File "/home/jboisture/Desktop/web2py/gluon/sql.py", line 3294, in _update\n update_fields.items()])\n File "/home/jboisture/Desktop/web2py/gluon/sql.py", line 1592, in __getitem__\n return dict.__getitem__(self, str(key))\nKeyError: \'creator\'\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-08.15-25-24.de4d5065-f593-4432-b000-2684ae1aa3ed b/errors/127.0.0.1.2010-07-08.15-25-24.de4d5065-f593-4432-b000-2684ae1aa3ed
new file mode 100644
index 0000000..ccb6a77
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-08.15-25-24.de4d5065-f593-4432-b000-2684ae1aa3ed
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/views/default/image.html'
+p4
+sS'code'
+p5
+S'response.write(\'<html>\\n <link rel="stylesheet" href="../static/glike.css" type="text/css" />\\n <head>\\n <title>Turtle Art Image Database</title>\\n </head>\\n <body>\\n <div id="header">\\n <h1><a href="index.html" >Home</a></h1>\\n <ul>\\n \',escape=False)\nif auth.is_logged_in():\n response.write(\'\\n <li><a href=\',escape=False)\n response.write("profile?user="+auth.user.username)\n response.write(\'>\',escape=False)\n response.write(auth.user.username)\n response.write(\'</a>: </li>\\n <li><a href="user/logout">Log Out</li>\\n <li><a href="upload.html" >New Image</a></li>\\n \',escape=False)\n pass\nresponse.write(\'\\n \',escape=False)\nif not auth.is_logged_in():\n response.write(\'\\n <li><a href="user.html">log in</a></li>\\n \',escape=False)\n pass\nresponse.write("\\n </ul>\\n </div>\\n <div id=\'bodycontent\'>\\n \\n<h1>",escape=False)\nresponse.write( image.title)\nresponse.write(\'</h1>\\n<img width="1000px"src="\',escape=False)\nresponse.write(URL(r=request, f=\'download\', args=image.newimage))\nresponse.write(\'">\\n<br>\\n\',escape=False)\nif auth.is_logged_in():\n response.write(\'\\n \',escape=False)\n if image.creator == auth.user.username:\n response.write(\'\\n <a href=\',escape=False)\n response.write("delete?title="+str(image.title).replace(\' \',\'*\'))\n response.write(\'>delete image</a>\\n \',escape=False)\n pass\n response.write(\'\\n \',escape=False)\n pass\nresponse.write(\'\\n<p>\',escape=False)\nresponse.write( "author: ")\nresponse.write(\'<a href=\',escape=False)\nresponse.write( "profile?user=" +image.creator)\nresponse.write(\'>\',escape=False)\nresponse.write(image.creator)\nresponse.write(\' </a></p>\\n<a href="\',escape=False)\nresponse.write(URL(r=request, f=\'download\', args=image.file))\nresponse.write(\'"> Download TA file</a>\\n<p>\',escape=False)\nresponse.write( "description: " + image.description)\nresponse.write(\'</p>\\n\',escape=False)\nfor comment in comments:\n response.write(\'\\n \',escape=False)\n response.write(comment.author + ": " + comment.body)\n response.write(\'\\n \',escape=False)\n pass\nresponse.write(\'\\n\',escape=False)\nresponse.write(form)\nresponse.write(\'\\n\\n </div>\\n </body>\\n </style>\\n</html>\\n\',escape=False)'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/views/default/image.html", line 40, in <module>\nTypeError: unsupported operand type(s) for +: \'NoneType\' and \'str\'\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-08.15-27-15.de25781c-0d1f-461e-b017-7e1cc7364149 b/errors/127.0.0.1.2010-07-08.15-27-15.de25781c-0d1f-461e-b017-7e1cc7364149
new file mode 100644
index 0000000..15c308b
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-08.15-27-15.de25781c-0d1f-461e-b017-7e1cc7364149
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n images = db().select(db.image.ALL)\n i = 0\n row = []\n count = 0\n for image in images:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n images = db().select(db.image.ALL)\n for image in images:\n if image.creator == user:\n print user, image.creator\n user_pics.append(image)\n i = 0\n row = []\n count = 0\n print page\n for image in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.image, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n db(db.image.title==session.new_image_title).update(creator = auth.user.username)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if auth.is_logged_in():\n form = SQLFORM(db.comment, fields = [\'body\'])\n if form.accepts(request.vars, session):\n db(db.comment.comment_id==form.vars.id).update(author = auth.user.username)\n db(db.comment.comment_id==form.vars.id).update(image_id = real_image.image_id)\n comments=db().select(db.comment.ALL)\n image_comments = []\n for comment in comments:\n if comment.image_id == real_image.image_id:\n image_comments.append(comment)\n import pdb\n pdb.set_trace()\n return dict(image = real_image, form= form,comments=image_comments)\n \n \ndef testimage():\n\treturn db(db.image.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\ndef delete():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if auth.is_logged_in():\n if auth.user.username == real_image.creator:\n query=(db.image.id==real_image.id)\n db(query).delete()\n redirect(URL(r=request, f=\'index\')) \n \n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(image)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 109, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 84, in image\n return dict(image = real_image, form= form,comments=image_comments)\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 84, in image\n return dict(image = real_image, form= form,comments=image_comments)\n File "/usr/lib/python2.6/bdb.py", line 46, in trace_dispatch\n return self.dispatch_line(frame)\n File "/usr/lib/python2.6/bdb.py", line 65, in dispatch_line\n if self.quitting: raise BdbQuit\nBdbQuit\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-08.15-27-15.f2377554-51ca-4b7b-bca0-2fe90a07ee10 b/errors/127.0.0.1.2010-07-08.15-27-15.f2377554-51ca-4b7b-bca0-2fe90a07ee10
new file mode 100644
index 0000000..2ea7c9e
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-08.15-27-15.f2377554-51ca-4b7b-bca0-2fe90a07ee10
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py'
+p4
+sS'code'
+p5
+S'if request.env.web2py_runtime_gae:\n db = DAL(\'gae\')\n session.connect(request,response,db=db)\nelse:db = DAL("sqlite://storage.db")\n\ndb.define_table(\'image\',\n Field(\'file\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension=\'ta\', error_message="Must be a Turtle Art file")]),\n Field(\'title\', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, \'image.title\', error_message="Title is already taken"),IS_EXPR(\'str(value).count("*") == 0\', error_message="Title can not contain \'*\'")]),\n Field(\'image_id\'),\n Field(\'creator\', requires=IS_NOT_EMPTY(error_message="You must include your name")),\n Field(\'description\', \'text\'),\n Field(\'newimage\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a image to upload"), IS_UPLOAD_FILENAME(extension=\'png\', error_message="Must be a PNG image")]))\n\ndb.define_table(\'comment\',\n Field(\'image_id\', db.image),\n Field(\'comment_id\'),\n Field(\'author\'),\n Field(\'body\', \'text\'))\n\nfrom gluon.tools import Auth\nauth = Auth(globals(),db)\nauth_table = db.define_table(\n auth.settings.table_user_name,\n Field(\'username\', length=128, default="", unique = True),\n Field(\'email\', length=128, default="", unique=True),\n Field(\'password\', \'password\', length=256,\n readable=False, label=\'Password\'),\n Field(\'registration_key\', length=128, default= "",\n writable=False, readable=False))\n\ndb.comment.image_id.requires = IS_IN_DB(db, db.image.image_id, \'%(title)s\')\ndb.comment.author.requires = IS_NOT_EMPTY()\ndb.comment.body.requires = IS_NOT_EMPTY()\n\nauth_table.username.requires = [IS_EXPR(\'str(value).count(" ") == 0\', error_message=\'Username must be one word\'), IS_NOT_IN_DB(db, auth_table.username)]\nauth_table.password.requires = [IS_STRONG(), CRYPT()]\nauth_table.email.requires = [\n IS_EMAIL(error_message=auth.messages.invalid_email),\n IS_NOT_IN_DB(db, auth_table.email)]\nauth.settings.table_user = auth_table\nauth.define_tables()\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py", line 18, in <module>\n Field(\'body\', \'text\'))\n File "/home/jboisture/Desktop/web2py/gluon/sql.py", line 1309, in define_table\n t._create(migrate=migrate, fake_migrate=fake_migrate)\n File "/home/jboisture/Desktop/web2py/gluon/sql.py", line 1730, in _create\n self._db._execute(query)\n File "/home/jboisture/Desktop/web2py/gluon/sql.py", line 899, in <lambda>\n self._execute = lambda *a, **b: self._cursor.execute(*a, **b)\nOperationalError: table comment already exists\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-08.15-27-28.3cfa76ce-558d-4e94-a577-5f6e506570b0 b/errors/127.0.0.1.2010-07-08.15-27-28.3cfa76ce-558d-4e94-a577-5f6e506570b0
new file mode 100644
index 0000000..2ea7c9e
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-08.15-27-28.3cfa76ce-558d-4e94-a577-5f6e506570b0
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py'
+p4
+sS'code'
+p5
+S'if request.env.web2py_runtime_gae:\n db = DAL(\'gae\')\n session.connect(request,response,db=db)\nelse:db = DAL("sqlite://storage.db")\n\ndb.define_table(\'image\',\n Field(\'file\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension=\'ta\', error_message="Must be a Turtle Art file")]),\n Field(\'title\', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, \'image.title\', error_message="Title is already taken"),IS_EXPR(\'str(value).count("*") == 0\', error_message="Title can not contain \'*\'")]),\n Field(\'image_id\'),\n Field(\'creator\', requires=IS_NOT_EMPTY(error_message="You must include your name")),\n Field(\'description\', \'text\'),\n Field(\'newimage\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a image to upload"), IS_UPLOAD_FILENAME(extension=\'png\', error_message="Must be a PNG image")]))\n\ndb.define_table(\'comment\',\n Field(\'image_id\', db.image),\n Field(\'comment_id\'),\n Field(\'author\'),\n Field(\'body\', \'text\'))\n\nfrom gluon.tools import Auth\nauth = Auth(globals(),db)\nauth_table = db.define_table(\n auth.settings.table_user_name,\n Field(\'username\', length=128, default="", unique = True),\n Field(\'email\', length=128, default="", unique=True),\n Field(\'password\', \'password\', length=256,\n readable=False, label=\'Password\'),\n Field(\'registration_key\', length=128, default= "",\n writable=False, readable=False))\n\ndb.comment.image_id.requires = IS_IN_DB(db, db.image.image_id, \'%(title)s\')\ndb.comment.author.requires = IS_NOT_EMPTY()\ndb.comment.body.requires = IS_NOT_EMPTY()\n\nauth_table.username.requires = [IS_EXPR(\'str(value).count(" ") == 0\', error_message=\'Username must be one word\'), IS_NOT_IN_DB(db, auth_table.username)]\nauth_table.password.requires = [IS_STRONG(), CRYPT()]\nauth_table.email.requires = [\n IS_EMAIL(error_message=auth.messages.invalid_email),\n IS_NOT_IN_DB(db, auth_table.email)]\nauth.settings.table_user = auth_table\nauth.define_tables()\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py", line 18, in <module>\n Field(\'body\', \'text\'))\n File "/home/jboisture/Desktop/web2py/gluon/sql.py", line 1309, in define_table\n t._create(migrate=migrate, fake_migrate=fake_migrate)\n File "/home/jboisture/Desktop/web2py/gluon/sql.py", line 1730, in _create\n self._db._execute(query)\n File "/home/jboisture/Desktop/web2py/gluon/sql.py", line 899, in <lambda>\n self._execute = lambda *a, **b: self._cursor.execute(*a, **b)\nOperationalError: table comment already exists\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-08.15-27-34.cfed5abe-608e-4b91-959d-fc7f05fec5bd b/errors/127.0.0.1.2010-07-08.15-27-34.cfed5abe-608e-4b91-959d-fc7f05fec5bd
new file mode 100644
index 0000000..2ea7c9e
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-08.15-27-34.cfed5abe-608e-4b91-959d-fc7f05fec5bd
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py'
+p4
+sS'code'
+p5
+S'if request.env.web2py_runtime_gae:\n db = DAL(\'gae\')\n session.connect(request,response,db=db)\nelse:db = DAL("sqlite://storage.db")\n\ndb.define_table(\'image\',\n Field(\'file\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension=\'ta\', error_message="Must be a Turtle Art file")]),\n Field(\'title\', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, \'image.title\', error_message="Title is already taken"),IS_EXPR(\'str(value).count("*") == 0\', error_message="Title can not contain \'*\'")]),\n Field(\'image_id\'),\n Field(\'creator\', requires=IS_NOT_EMPTY(error_message="You must include your name")),\n Field(\'description\', \'text\'),\n Field(\'newimage\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a image to upload"), IS_UPLOAD_FILENAME(extension=\'png\', error_message="Must be a PNG image")]))\n\ndb.define_table(\'comment\',\n Field(\'image_id\', db.image),\n Field(\'comment_id\'),\n Field(\'author\'),\n Field(\'body\', \'text\'))\n\nfrom gluon.tools import Auth\nauth = Auth(globals(),db)\nauth_table = db.define_table(\n auth.settings.table_user_name,\n Field(\'username\', length=128, default="", unique = True),\n Field(\'email\', length=128, default="", unique=True),\n Field(\'password\', \'password\', length=256,\n readable=False, label=\'Password\'),\n Field(\'registration_key\', length=128, default= "",\n writable=False, readable=False))\n\ndb.comment.image_id.requires = IS_IN_DB(db, db.image.image_id, \'%(title)s\')\ndb.comment.author.requires = IS_NOT_EMPTY()\ndb.comment.body.requires = IS_NOT_EMPTY()\n\nauth_table.username.requires = [IS_EXPR(\'str(value).count(" ") == 0\', error_message=\'Username must be one word\'), IS_NOT_IN_DB(db, auth_table.username)]\nauth_table.password.requires = [IS_STRONG(), CRYPT()]\nauth_table.email.requires = [\n IS_EMAIL(error_message=auth.messages.invalid_email),\n IS_NOT_IN_DB(db, auth_table.email)]\nauth.settings.table_user = auth_table\nauth.define_tables()\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py", line 18, in <module>\n Field(\'body\', \'text\'))\n File "/home/jboisture/Desktop/web2py/gluon/sql.py", line 1309, in define_table\n t._create(migrate=migrate, fake_migrate=fake_migrate)\n File "/home/jboisture/Desktop/web2py/gluon/sql.py", line 1730, in _create\n self._db._execute(query)\n File "/home/jboisture/Desktop/web2py/gluon/sql.py", line 899, in <lambda>\n self._execute = lambda *a, **b: self._cursor.execute(*a, **b)\nOperationalError: table comment already exists\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-08.15-28-47.91eb3c05-1b3c-4528-832a-e08c2a9768e9 b/errors/127.0.0.1.2010-07-08.15-28-47.91eb3c05-1b3c-4528-832a-e08c2a9768e9
new file mode 100644
index 0000000..2ea7c9e
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-08.15-28-47.91eb3c05-1b3c-4528-832a-e08c2a9768e9
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py'
+p4
+sS'code'
+p5
+S'if request.env.web2py_runtime_gae:\n db = DAL(\'gae\')\n session.connect(request,response,db=db)\nelse:db = DAL("sqlite://storage.db")\n\ndb.define_table(\'image\',\n Field(\'file\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension=\'ta\', error_message="Must be a Turtle Art file")]),\n Field(\'title\', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, \'image.title\', error_message="Title is already taken"),IS_EXPR(\'str(value).count("*") == 0\', error_message="Title can not contain \'*\'")]),\n Field(\'image_id\'),\n Field(\'creator\', requires=IS_NOT_EMPTY(error_message="You must include your name")),\n Field(\'description\', \'text\'),\n Field(\'newimage\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a image to upload"), IS_UPLOAD_FILENAME(extension=\'png\', error_message="Must be a PNG image")]))\n\ndb.define_table(\'comment\',\n Field(\'image_id\', db.image),\n Field(\'comment_id\'),\n Field(\'author\'),\n Field(\'body\', \'text\'))\n\nfrom gluon.tools import Auth\nauth = Auth(globals(),db)\nauth_table = db.define_table(\n auth.settings.table_user_name,\n Field(\'username\', length=128, default="", unique = True),\n Field(\'email\', length=128, default="", unique=True),\n Field(\'password\', \'password\', length=256,\n readable=False, label=\'Password\'),\n Field(\'registration_key\', length=128, default= "",\n writable=False, readable=False))\n\ndb.comment.image_id.requires = IS_IN_DB(db, db.image.image_id, \'%(title)s\')\ndb.comment.author.requires = IS_NOT_EMPTY()\ndb.comment.body.requires = IS_NOT_EMPTY()\n\nauth_table.username.requires = [IS_EXPR(\'str(value).count(" ") == 0\', error_message=\'Username must be one word\'), IS_NOT_IN_DB(db, auth_table.username)]\nauth_table.password.requires = [IS_STRONG(), CRYPT()]\nauth_table.email.requires = [\n IS_EMAIL(error_message=auth.messages.invalid_email),\n IS_NOT_IN_DB(db, auth_table.email)]\nauth.settings.table_user = auth_table\nauth.define_tables()\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py", line 18, in <module>\n Field(\'body\', \'text\'))\n File "/home/jboisture/Desktop/web2py/gluon/sql.py", line 1309, in define_table\n t._create(migrate=migrate, fake_migrate=fake_migrate)\n File "/home/jboisture/Desktop/web2py/gluon/sql.py", line 1730, in _create\n self._db._execute(query)\n File "/home/jboisture/Desktop/web2py/gluon/sql.py", line 899, in <lambda>\n self._execute = lambda *a, **b: self._cursor.execute(*a, **b)\nOperationalError: table comment already exists\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-08.15-28-52.37aa57a6-e815-457f-a164-1a9e898de742 b/errors/127.0.0.1.2010-07-08.15-28-52.37aa57a6-e815-457f-a164-1a9e898de742
new file mode 100644
index 0000000..2ea7c9e
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-08.15-28-52.37aa57a6-e815-457f-a164-1a9e898de742
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py'
+p4
+sS'code'
+p5
+S'if request.env.web2py_runtime_gae:\n db = DAL(\'gae\')\n session.connect(request,response,db=db)\nelse:db = DAL("sqlite://storage.db")\n\ndb.define_table(\'image\',\n Field(\'file\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension=\'ta\', error_message="Must be a Turtle Art file")]),\n Field(\'title\', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, \'image.title\', error_message="Title is already taken"),IS_EXPR(\'str(value).count("*") == 0\', error_message="Title can not contain \'*\'")]),\n Field(\'image_id\'),\n Field(\'creator\', requires=IS_NOT_EMPTY(error_message="You must include your name")),\n Field(\'description\', \'text\'),\n Field(\'newimage\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a image to upload"), IS_UPLOAD_FILENAME(extension=\'png\', error_message="Must be a PNG image")]))\n\ndb.define_table(\'comment\',\n Field(\'image_id\', db.image),\n Field(\'comment_id\'),\n Field(\'author\'),\n Field(\'body\', \'text\'))\n\nfrom gluon.tools import Auth\nauth = Auth(globals(),db)\nauth_table = db.define_table(\n auth.settings.table_user_name,\n Field(\'username\', length=128, default="", unique = True),\n Field(\'email\', length=128, default="", unique=True),\n Field(\'password\', \'password\', length=256,\n readable=False, label=\'Password\'),\n Field(\'registration_key\', length=128, default= "",\n writable=False, readable=False))\n\ndb.comment.image_id.requires = IS_IN_DB(db, db.image.image_id, \'%(title)s\')\ndb.comment.author.requires = IS_NOT_EMPTY()\ndb.comment.body.requires = IS_NOT_EMPTY()\n\nauth_table.username.requires = [IS_EXPR(\'str(value).count(" ") == 0\', error_message=\'Username must be one word\'), IS_NOT_IN_DB(db, auth_table.username)]\nauth_table.password.requires = [IS_STRONG(), CRYPT()]\nauth_table.email.requires = [\n IS_EMAIL(error_message=auth.messages.invalid_email),\n IS_NOT_IN_DB(db, auth_table.email)]\nauth.settings.table_user = auth_table\nauth.define_tables()\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py", line 18, in <module>\n Field(\'body\', \'text\'))\n File "/home/jboisture/Desktop/web2py/gluon/sql.py", line 1309, in define_table\n t._create(migrate=migrate, fake_migrate=fake_migrate)\n File "/home/jboisture/Desktop/web2py/gluon/sql.py", line 1730, in _create\n self._db._execute(query)\n File "/home/jboisture/Desktop/web2py/gluon/sql.py", line 899, in <lambda>\n self._execute = lambda *a, **b: self._cursor.execute(*a, **b)\nOperationalError: table comment already exists\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-08.15-28-53.87980077-8c27-4be8-8954-2da579e109fb b/errors/127.0.0.1.2010-07-08.15-28-53.87980077-8c27-4be8-8954-2da579e109fb
new file mode 100644
index 0000000..2ea7c9e
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-08.15-28-53.87980077-8c27-4be8-8954-2da579e109fb
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py'
+p4
+sS'code'
+p5
+S'if request.env.web2py_runtime_gae:\n db = DAL(\'gae\')\n session.connect(request,response,db=db)\nelse:db = DAL("sqlite://storage.db")\n\ndb.define_table(\'image\',\n Field(\'file\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension=\'ta\', error_message="Must be a Turtle Art file")]),\n Field(\'title\', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, \'image.title\', error_message="Title is already taken"),IS_EXPR(\'str(value).count("*") == 0\', error_message="Title can not contain \'*\'")]),\n Field(\'image_id\'),\n Field(\'creator\', requires=IS_NOT_EMPTY(error_message="You must include your name")),\n Field(\'description\', \'text\'),\n Field(\'newimage\', \'upload\', requires=[IS_NOT_EMPTY(error_message="Please select a image to upload"), IS_UPLOAD_FILENAME(extension=\'png\', error_message="Must be a PNG image")]))\n\ndb.define_table(\'comment\',\n Field(\'image_id\', db.image),\n Field(\'comment_id\'),\n Field(\'author\'),\n Field(\'body\', \'text\'))\n\nfrom gluon.tools import Auth\nauth = Auth(globals(),db)\nauth_table = db.define_table(\n auth.settings.table_user_name,\n Field(\'username\', length=128, default="", unique = True),\n Field(\'email\', length=128, default="", unique=True),\n Field(\'password\', \'password\', length=256,\n readable=False, label=\'Password\'),\n Field(\'registration_key\', length=128, default= "",\n writable=False, readable=False))\n\ndb.comment.image_id.requires = IS_IN_DB(db, db.image.image_id, \'%(title)s\')\ndb.comment.author.requires = IS_NOT_EMPTY()\ndb.comment.body.requires = IS_NOT_EMPTY()\n\nauth_table.username.requires = [IS_EXPR(\'str(value).count(" ") == 0\', error_message=\'Username must be one word\'), IS_NOT_IN_DB(db, auth_table.username)]\nauth_table.password.requires = [IS_STRONG(), CRYPT()]\nauth_table.email.requires = [\n IS_EMAIL(error_message=auth.messages.invalid_email),\n IS_NOT_IN_DB(db, auth_table.email)]\nauth.settings.table_user = auth_table\nauth.define_tables()\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/models/db.py", line 18, in <module>\n Field(\'body\', \'text\'))\n File "/home/jboisture/Desktop/web2py/gluon/sql.py", line 1309, in define_table\n t._create(migrate=migrate, fake_migrate=fake_migrate)\n File "/home/jboisture/Desktop/web2py/gluon/sql.py", line 1730, in _create\n self._db._execute(query)\n File "/home/jboisture/Desktop/web2py/gluon/sql.py", line 899, in <lambda>\n self._execute = lambda *a, **b: self._cursor.execute(*a, **b)\nOperationalError: table comment already exists\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-08.15-30-36.5919daf3-9557-456e-9af5-b9bf12a1e94d b/errors/127.0.0.1.2010-07-08.15-30-36.5919daf3-9557-456e-9af5-b9bf12a1e94d
new file mode 100644
index 0000000..f9d051c
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-08.15-30-36.5919daf3-9557-456e-9af5-b9bf12a1e94d
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n images = db().select(db.image.ALL)\n i = 0\n row = []\n count = 0\n for image in images:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n images = db().select(db.image.ALL)\n for image in images:\n if image.creator == user:\n print user, image.creator\n user_pics.append(image)\n i = 0\n row = []\n count = 0\n print page\n for image in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.image, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n db(db.image.title==session.new_image_title).update(creator = auth.user.username)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if auth.is_logged_in():\n form = SQLFORM(db.comment, fields = [\'body\'])\n if form.accepts(request.vars, session):\n db(db.comment.comment_id==form.vars.id).update(author = auth.user.username)\n db(db.comment.comment_id==form.vars.id).update(image_id = real_image.image_id)\n comments=db().select(db.comment.ALL)\n image_comments = []\n for comment in comments:\n if comment.image_id == real_image.image_id:\n image_comments.append(comment)\n import pdb\n pdb.set_trace()\n return dict(image = real_image, form= form,comments=image_comments)\n \n \ndef testimage():\n\treturn db(db.image.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\ndef delete():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if auth.is_logged_in():\n if auth.user.username == real_image.creator:\n query=(db.image.id==real_image.id)\n db(query).delete()\n redirect(URL(r=request, f=\'index\')) \n \n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(image)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 109, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 84, in image\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 84, in image\n File "/usr/lib/python2.6/bdb.py", line 46, in trace_dispatch\n return self.dispatch_line(frame)\n File "/usr/lib/python2.6/bdb.py", line 65, in dispatch_line\n if self.quitting: raise BdbQuit\nBdbQuit\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-08.15-30-53.09f70acd-83e5-4c5d-af80-b0d8d0d53acd b/errors/127.0.0.1.2010-07-08.15-30-53.09f70acd-83e5-4c5d-af80-b0d8d0d53acd
new file mode 100644
index 0000000..ccb6a77
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-08.15-30-53.09f70acd-83e5-4c5d-af80-b0d8d0d53acd
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/views/default/image.html'
+p4
+sS'code'
+p5
+S'response.write(\'<html>\\n <link rel="stylesheet" href="../static/glike.css" type="text/css" />\\n <head>\\n <title>Turtle Art Image Database</title>\\n </head>\\n <body>\\n <div id="header">\\n <h1><a href="index.html" >Home</a></h1>\\n <ul>\\n \',escape=False)\nif auth.is_logged_in():\n response.write(\'\\n <li><a href=\',escape=False)\n response.write("profile?user="+auth.user.username)\n response.write(\'>\',escape=False)\n response.write(auth.user.username)\n response.write(\'</a>: </li>\\n <li><a href="user/logout">Log Out</li>\\n <li><a href="upload.html" >New Image</a></li>\\n \',escape=False)\n pass\nresponse.write(\'\\n \',escape=False)\nif not auth.is_logged_in():\n response.write(\'\\n <li><a href="user.html">log in</a></li>\\n \',escape=False)\n pass\nresponse.write("\\n </ul>\\n </div>\\n <div id=\'bodycontent\'>\\n \\n<h1>",escape=False)\nresponse.write( image.title)\nresponse.write(\'</h1>\\n<img width="1000px"src="\',escape=False)\nresponse.write(URL(r=request, f=\'download\', args=image.newimage))\nresponse.write(\'">\\n<br>\\n\',escape=False)\nif auth.is_logged_in():\n response.write(\'\\n \',escape=False)\n if image.creator == auth.user.username:\n response.write(\'\\n <a href=\',escape=False)\n response.write("delete?title="+str(image.title).replace(\' \',\'*\'))\n response.write(\'>delete image</a>\\n \',escape=False)\n pass\n response.write(\'\\n \',escape=False)\n pass\nresponse.write(\'\\n<p>\',escape=False)\nresponse.write( "author: ")\nresponse.write(\'<a href=\',escape=False)\nresponse.write( "profile?user=" +image.creator)\nresponse.write(\'>\',escape=False)\nresponse.write(image.creator)\nresponse.write(\' </a></p>\\n<a href="\',escape=False)\nresponse.write(URL(r=request, f=\'download\', args=image.file))\nresponse.write(\'"> Download TA file</a>\\n<p>\',escape=False)\nresponse.write( "description: " + image.description)\nresponse.write(\'</p>\\n\',escape=False)\nfor comment in comments:\n response.write(\'\\n \',escape=False)\n response.write(comment.author + ": " + comment.body)\n response.write(\'\\n \',escape=False)\n pass\nresponse.write(\'\\n\',escape=False)\nresponse.write(form)\nresponse.write(\'\\n\\n </div>\\n </body>\\n </style>\\n</html>\\n\',escape=False)'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/views/default/image.html", line 40, in <module>\nTypeError: unsupported operand type(s) for +: \'NoneType\' and \'str\'\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-08.15-35-45.6467e2f5-f182-4dcc-b8c0-8b4c7f6ee7d3 b/errors/127.0.0.1.2010-07-08.15-35-45.6467e2f5-f182-4dcc-b8c0-8b4c7f6ee7d3
new file mode 100644
index 0000000..f9d051c
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-08.15-35-45.6467e2f5-f182-4dcc-b8c0-8b4c7f6ee7d3
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n images = db().select(db.image.ALL)\n i = 0\n row = []\n count = 0\n for image in images:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n images = db().select(db.image.ALL)\n for image in images:\n if image.creator == user:\n print user, image.creator\n user_pics.append(image)\n i = 0\n row = []\n count = 0\n print page\n for image in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.image, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n db(db.image.title==session.new_image_title).update(creator = auth.user.username)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if auth.is_logged_in():\n form = SQLFORM(db.comment, fields = [\'body\'])\n if form.accepts(request.vars, session):\n db(db.comment.comment_id==form.vars.id).update(author = auth.user.username)\n db(db.comment.comment_id==form.vars.id).update(image_id = real_image.image_id)\n comments=db().select(db.comment.ALL)\n image_comments = []\n for comment in comments:\n if comment.image_id == real_image.image_id:\n image_comments.append(comment)\n import pdb\n pdb.set_trace()\n return dict(image = real_image, form= form,comments=image_comments)\n \n \ndef testimage():\n\treturn db(db.image.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\ndef delete():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if auth.is_logged_in():\n if auth.user.username == real_image.creator:\n query=(db.image.id==real_image.id)\n db(query).delete()\n redirect(URL(r=request, f=\'index\')) \n \n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(image)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 109, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 84, in image\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 84, in image\n File "/usr/lib/python2.6/bdb.py", line 46, in trace_dispatch\n return self.dispatch_line(frame)\n File "/usr/lib/python2.6/bdb.py", line 65, in dispatch_line\n if self.quitting: raise BdbQuit\nBdbQuit\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-08.15-39-18.b852155d-a09a-4eae-8418-31a0fc1a70fb b/errors/127.0.0.1.2010-07-08.15-39-18.b852155d-a09a-4eae-8418-31a0fc1a70fb
new file mode 100644
index 0000000..a949572
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-08.15-39-18.b852155d-a09a-4eae-8418-31a0fc1a70fb
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n images = db().select(db.image.ALL)\n i = 0\n row = []\n count = 0\n for image in images:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n images = db().select(db.image.ALL)\n for image in images:\n if image.creator == user:\n print user, image.creator\n user_pics.append(image)\n i = 0\n row = []\n count = 0\n print page\n for image in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.image, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n db(db.image.title==session.new_image_title).update(creator = auth.user.username)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if auth.is_logged_in():\n form = SQLFORM(db.comment, fields = [\'body\'])\n if form.accepts(request.vars, session):\n db(db.comment.id==form.vars.id).update(author = auth.user.username)\n db(db.comment.id==form.vars.id).update(image_id = real_image.image_id)\n comments=db().select(db.comment.ALL)\n image_comments = []\n for comment in comments:\n if comment.image_id == real_image.image_id:\n image_comments.append(comment)\n import pdb\n pdb.set_trace()\n return dict(image = real_image, form= form,comments=image_comments)\n \n \ndef testimage():\n\treturn db(db.image.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\ndef delete():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if auth.is_logged_in():\n if auth.user.username == real_image.creator:\n query=(db.image.id==real_image.id)\n db(query).delete()\n redirect(URL(r=request, f=\'index\')) \n \n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(image)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 109, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 84, in image\n return dict(image = real_image, form= form,comments=image_comments)\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 84, in image\n return dict(image = real_image, form= form,comments=image_comments)\n File "/usr/lib/python2.6/bdb.py", line 46, in trace_dispatch\n return self.dispatch_line(frame)\n File "/usr/lib/python2.6/bdb.py", line 65, in dispatch_line\n if self.quitting: raise BdbQuit\nBdbQuit\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-08.15-39-19.faf9b321-fb04-4c6c-9261-bde7c167db06 b/errors/127.0.0.1.2010-07-08.15-39-19.faf9b321-fb04-4c6c-9261-bde7c167db06
new file mode 100644
index 0000000..9603eab
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-08.15-39-19.faf9b321-fb04-4c6c-9261-bde7c167db06
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n images = db().select(db.image.ALL)\n i = 0\n row = []\n count = 0\n for image in images:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n images = db().select(db.image.ALL)\n for image in images:\n if image.creator == user:\n print user, image.creator\n user_pics.append(image)\n i = 0\n row = []\n count = 0\n print page\n for image in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.image, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n db(db.image.title==session.new_image_title).update(creator = auth.user.username)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if auth.is_logged_in():\n form = SQLFORM(db.comment, fields = [\'body\'])\n if form.accepts(request.vars, session):\n db(db.comment.id==form.vars.id).update(author = auth.user.username)\n db(db.comment.id==form.vars.id).update(image_id = real_image.id)\n comments=db().select(db.comment.ALL)\n image_comments = []\n for comment in comments:\n if comment.image_id == real_image.id:\n image_comments.append(comment)\n import pdb\n pdb.set_trace()\n return dict(image = real_image, form= form,comments=image_comments)\n \n \ndef testimage():\n\treturn db(db.image.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\ndef delete():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if auth.is_logged_in():\n if auth.user.username == real_image.creator:\n query=(db.image.id==real_image.id)\n db(query).delete()\n redirect(URL(r=request, f=\'index\')) \n \n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(image)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 109, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 84, in image\n return dict(image = real_image, form= form,comments=image_comments)\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 84, in image\n return dict(image = real_image, form= form,comments=image_comments)\n File "/usr/lib/python2.6/bdb.py", line 46, in trace_dispatch\n return self.dispatch_line(frame)\n File "/usr/lib/python2.6/bdb.py", line 65, in dispatch_line\n if self.quitting: raise BdbQuit\nBdbQuit\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-08.15-39-34.7fbe55a2-ee87-4644-8a81-b6e33e7b56e0 b/errors/127.0.0.1.2010-07-08.15-39-34.7fbe55a2-ee87-4644-8a81-b6e33e7b56e0
new file mode 100644
index 0000000..9603eab
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-08.15-39-34.7fbe55a2-ee87-4644-8a81-b6e33e7b56e0
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n images = db().select(db.image.ALL)\n i = 0\n row = []\n count = 0\n for image in images:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n images = db().select(db.image.ALL)\n for image in images:\n if image.creator == user:\n print user, image.creator\n user_pics.append(image)\n i = 0\n row = []\n count = 0\n print page\n for image in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.image, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n db(db.image.title==session.new_image_title).update(creator = auth.user.username)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if auth.is_logged_in():\n form = SQLFORM(db.comment, fields = [\'body\'])\n if form.accepts(request.vars, session):\n db(db.comment.id==form.vars.id).update(author = auth.user.username)\n db(db.comment.id==form.vars.id).update(image_id = real_image.id)\n comments=db().select(db.comment.ALL)\n image_comments = []\n for comment in comments:\n if comment.image_id == real_image.id:\n image_comments.append(comment)\n import pdb\n pdb.set_trace()\n return dict(image = real_image, form= form,comments=image_comments)\n \n \ndef testimage():\n\treturn db(db.image.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\ndef delete():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if auth.is_logged_in():\n if auth.user.username == real_image.creator:\n query=(db.image.id==real_image.id)\n db(query).delete()\n redirect(URL(r=request, f=\'index\')) \n \n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(image)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 109, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 84, in image\n return dict(image = real_image, form= form,comments=image_comments)\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 84, in image\n return dict(image = real_image, form= form,comments=image_comments)\n File "/usr/lib/python2.6/bdb.py", line 46, in trace_dispatch\n return self.dispatch_line(frame)\n File "/usr/lib/python2.6/bdb.py", line 65, in dispatch_line\n if self.quitting: raise BdbQuit\nBdbQuit\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-08.15-39-34.ac09ca25-c8df-4b40-b165-b24092d60e48 b/errors/127.0.0.1.2010-07-08.15-39-34.ac09ca25-c8df-4b40-b165-b24092d60e48
new file mode 100644
index 0000000..9603eab
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-08.15-39-34.ac09ca25-c8df-4b40-b165-b24092d60e48
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n images = db().select(db.image.ALL)\n i = 0\n row = []\n count = 0\n for image in images:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n images = db().select(db.image.ALL)\n for image in images:\n if image.creator == user:\n print user, image.creator\n user_pics.append(image)\n i = 0\n row = []\n count = 0\n print page\n for image in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.image, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n db(db.image.title==session.new_image_title).update(creator = auth.user.username)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if auth.is_logged_in():\n form = SQLFORM(db.comment, fields = [\'body\'])\n if form.accepts(request.vars, session):\n db(db.comment.id==form.vars.id).update(author = auth.user.username)\n db(db.comment.id==form.vars.id).update(image_id = real_image.id)\n comments=db().select(db.comment.ALL)\n image_comments = []\n for comment in comments:\n if comment.image_id == real_image.id:\n image_comments.append(comment)\n import pdb\n pdb.set_trace()\n return dict(image = real_image, form= form,comments=image_comments)\n \n \ndef testimage():\n\treturn db(db.image.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\ndef delete():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if auth.is_logged_in():\n if auth.user.username == real_image.creator:\n query=(db.image.id==real_image.id)\n db(query).delete()\n redirect(URL(r=request, f=\'index\')) \n \n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(image)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 109, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 84, in image\n return dict(image = real_image, form= form,comments=image_comments)\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 84, in image\n return dict(image = real_image, form= form,comments=image_comments)\n File "/usr/lib/python2.6/bdb.py", line 46, in trace_dispatch\n return self.dispatch_line(frame)\n File "/usr/lib/python2.6/bdb.py", line 65, in dispatch_line\n if self.quitting: raise BdbQuit\nBdbQuit\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-08.15-54-56.66078c59-2a91-4b18-bb3f-796a323f7062 b/errors/127.0.0.1.2010-07-08.15-54-56.66078c59-2a91-4b18-bb3f-796a323f7062
new file mode 100644
index 0000000..a9c2419
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-08.15-54-56.66078c59-2a91-4b18-bb3f-796a323f7062
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/views/default/index.html'
+p4
+sS'code'
+p5
+S'response.write(\'<html>\\n <link rel="stylesheet" href="../static/glike.css" type="text/css" />\\n <head>\\n <title>Turtle Art Image Database</title>\\n </head>\\n <body>\\n <div id="header">\\n <h1><a href="index.html" >Home</a></h1>\\n <ul>\\n \',escape=False)\nif auth.is_logged_in():\n response.write(\'\\n <li><a href=\',escape=False)\n response.write("profile?user="+auth.user.username)\n response.write(\'>\',escape=False)\n response.write(auth.user.username)\n response.write(\'</a>: </li>\\n <li><a href="user/logout">Log Out</li>\\n <li><a href="upload.html" >New Image</a></li>\\n \',escape=False)\n pass\nresponse.write(\'\\n \',escape=False)\nif not auth.is_logged_in():\n response.write(\'\\n <li><a href="user.html">log in</a></li>\\n \',escape=False)\n pass\nresponse.write("\\n </ul>\\n </div>\\n <div id=\'bodycontent\'>\\n \\n<h1>Submissions</h1>\\n ",escape=False)\nfor row in images:\n response.write(\'\\n <table><tr>\\n \',escape=False)\n for image in row:\n response.write(\'\\n <td><a href = \',escape=False)\n response.write("/turtlesite/default/image.html?id="+image.id)\n response.write(\'>\\n <img width="250px" src="\',escape=False)\n response.write(URL(r=request, f=\'download\', args=image.newimage))\n response.write(\'" \\n onclick="ajax(\\\'ajaxwiki_onclick\\\',[\\\'text\\\'],\\\'html\\\')"/>\\n <br><center>\',escape=False)\n response.write(image.title)\n response.write(\'</center></a></td>\\n \',escape=False)\n pass\n response.write(\'\\n </tr></table>\\n \',escape=False)\n pass\nresponse.write(\'\\n<center>\\n<ul id="navlist">\\n\',escape=False)\nfor count in range(pages):\n response.write(\'\\n \',escape=False)\n if count+1 == page:\n response.write(\'\\n <li>\',escape=False)\n response.write(str(page))\n response.write(\'</li>\\n \',escape=False)\n pass\n response.write(\'\\n \',escape=False)\n if count+1 != page:\n response.write(\'\\n <li><a href = \',escape=False)\n response.write("index.html?page="+str(count+1))\n response.write(\'>\',escape=False)\n response.write( str(count+1))\n response.write(\'</a></li>\\n \',escape=False)\n pass\n response.write(\'\\n \',escape=False)\n pass\nresponse.write(\'\\n</ul>\\n</center>\\n\\n </div>\\n </body>\\n </style>\\n</html>\\n\',escape=False)'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/views/default/index.html", line 18, in <module>\n {{pass}}\nTypeError: cannot concatenate \'str\' and \'int\' objects\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-08.15-57-53.5083a2b9-0669-47cc-8ca4-7de04feb4912 b/errors/127.0.0.1.2010-07-08.15-57-53.5083a2b9-0669-47cc-8ca4-7de04feb4912
new file mode 100644
index 0000000..037a31a
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-08.15-57-53.5083a2b9-0669-47cc-8ca4-7de04feb4912
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n images = db().select(db.image.ALL)\n i = 0\n row = []\n count = 0\n for image in images:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n images = db().select(db.image.ALL)\n for image in images:\n if image.creator == user:\n print user, image.creator\n user_pics.append(image)\n i = 0\n row = []\n count = 0\n print page\n for image in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.image, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n db(db.image.title==session.new_image_title).update(creator = auth.user.username)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n images = db().select(db.image.ALL)\n image_id = request.vars["id"]\n for image in images:\n if image.id == image_id:\n real_image = image\n if auth.is_logged_in():\n form = SQLFORM(db.comment, fields = [\'body\'])\n if form.accepts(request.vars, session):\n db(db.comment.id==form.vars.id).update(author = auth.user.username)\n db(db.comment.id==form.vars.id).update(image_id = real_image.id)\n comments=db().select(db.comment.ALL)\n image_comments = []\n for comment in comments:\n if comment.image_id == real_image.id:\n image_comments.append(comment)\n return dict(image = real_image, form= form,comments=image_comments)\n \n \ndef testimage():\n\treturn db(db.image.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\ndef delete():\n images = db().select(db.image.ALL)\n image_id = request.vars["id"]\n for image in images:\n if image.id == image_id:\n real_image = image\n if auth.is_logged_in():\n if auth.user.username == real_image.creator:\n query=(db.image.id==real_image.id)\n db(query).delete()\n redirect(URL(r=request, f=\'index\')) \n \n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(image)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 107, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 68, in image\n image_id = request.vars["id"]\nKeyError: \'id\'\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-08.15-58-08.6dbb33a4-8930-4bdf-9b3d-9c3d40ce731a b/errors/127.0.0.1.2010-07-08.15-58-08.6dbb33a4-8930-4bdf-9b3d-9c3d40ce731a
new file mode 100644
index 0000000..778d680
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-08.15-58-08.6dbb33a4-8930-4bdf-9b3d-9c3d40ce731a
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n images = db().select(db.image.ALL)\n i = 0\n row = []\n count = 0\n for image in images:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n images = db().select(db.image.ALL)\n for image in images:\n if image.creator == user:\n print user, image.creator\n user_pics.append(image)\n i = 0\n row = []\n count = 0\n print page\n for image in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.image, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n db(db.image.title==session.new_image_title).update(creator = auth.user.username)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n images = db().select(db.image.ALL)\n image_id = request.vars["id"]\n for image in images:\n if image.id == image_id:\n real_image = image\n if auth.is_logged_in():\n form = SQLFORM(db.comment, fields = [\'body\'])\n if form.accepts(request.vars, session):\n db(db.comment.id==form.vars.id).update(author = auth.user.username)\n db(db.comment.id==form.vars.id).update(image_id = real_image.id)\n comments=db().select(db.comment.ALL)\n image_comments = []\n for comment in comments:\n if comment.image_id == real_image.id:\n image_comments.append(comment)\n return dict(image = real_image, form= form,comments=image_comments)\n \n \ndef testimage():\n\treturn db(db.image.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\ndef delete():\n images = db().select(db.image.ALL)\n image_id = request.vars["id"]\n for image in images:\n if image.id == image_id:\n real_image = image\n if auth.is_logged_in():\n if auth.user.username == real_image.creator:\n query=(db.image.id==real_image.id)\n db(query).delete()\n redirect(URL(r=request, f=\'index\')) \n \n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(image)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 107, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 80, in image\n if comment.image_id == real_image.id:\nUnboundLocalError: local variable \'real_image\' referenced before assignment\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-08.15-59-46.31011882-0f6e-4209-934b-feed78e1ea35 b/errors/127.0.0.1.2010-07-08.15-59-46.31011882-0f6e-4209-934b-feed78e1ea35
new file mode 100644
index 0000000..e1c6a04
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-08.15-59-46.31011882-0f6e-4209-934b-feed78e1ea35
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n images = db().select(db.image.ALL)\n i = 0\n row = []\n count = 0\n for image in images:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n images = db().select(db.image.ALL)\n for image in images:\n if image.creator == user:\n print user, image.creator\n user_pics.append(image)\n i = 0\n row = []\n count = 0\n print page\n for image in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.image, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n db(db.image.title==session.new_image_title).update(creator = auth.user.username)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if auth.is_logged_in():\n form = SQLFORM(db.comment, fields = [\'body\'])\n if form.accepts(request.vars, session):\n db(db.comment.id==form.vars.id).update(author = auth.user.username)\n db(db.comment.id==form.vars.id).update(image_id = real_image.id)\n comments=db().select(db.comment.ALL)\n image_comments = []\n for comment in comments:\n if comment.image_id == real_image.id:\n image_comments.append(comment)\n return dict(image = real_image, form= form,comments=image_comments)\n \n \ndef testimage():\n\treturn db(db.image.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\ndef delete():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if auth.is_logged_in():\n if auth.user.username == real_image.creator:\n query=(db.image.id==real_image.id)\n db(query).delete()\n redirect(URL(r=request, f=\'index\')) \n \n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(image)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 107, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 68, in image\n title = request.vars["title"].replace(\'*\',\' \')\nKeyError: \'title\'\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-08.16-16-09.e265f352-0ac3-4bc3-9018-9a15dbcb03dd b/errors/127.0.0.1.2010-07-08.16-16-09.e265f352-0ac3-4bc3-9018-9a15dbcb03dd
new file mode 100644
index 0000000..52a2355
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-08.16-16-09.e265f352-0ac3-4bc3-9018-9a15dbcb03dd
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n images = db().select(db.image.ALL)\n i = 0\n row = []\n count = 0\n for image in images:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n images = db().select(db.image.ALL)\n for image in images:\n if image.creator == user:\n print user, image.creator\n user_pics.append(image)\n i = 0\n row = []\n count = 0\n print page\n for image in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.image, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n db(db.image.title==session.new_image_title).update(creator = auth.user.username)\n db(db.image.title==session.new_image_title).update(views = 0)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if real_image == None:\n redirect(URL(r=request, f=\'index\')) \n view = real_image.views + 1\n db(db.image.title==real_image.title).update(views = views)\n if auth.is_logged_in():\n form = SQLFORM(db.comment, fields = [\'body\'])\n if form.accepts(request.vars, session):\n db(db.comment.id==form.vars.id).update(author = auth.user.username)\n db(db.comment.id==form.vars.id).update(image_id = real_image.id)\n comments=db().select(db.comment.ALL)\n image_comments = []\n for comment in comments:\n if comment.image_id == real_image.id:\n image_comments.append(comment)\n return dict(image = real_image, form= form,comments=image_comments)\n \n \ndef testimage():\n\treturn db(db.image.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\ndef delete():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if auth.is_logged_in():\n if auth.user.username == real_image.creator:\n query=(db.image.id==real_image.id)\n db(query).delete()\n redirect(URL(r=request, f=\'index\')) \n \n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(image)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 76\n db(db.image.title==real_image.title).update(views = views)\n ^\nIndentationError: unexpected indent\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-08.16-18-37.b20c6157-e66e-40d7-bf3e-332e955a6c07 b/errors/127.0.0.1.2010-07-08.16-18-37.b20c6157-e66e-40d7-bf3e-332e955a6c07
new file mode 100644
index 0000000..aaabebe
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-08.16-18-37.b20c6157-e66e-40d7-bf3e-332e955a6c07
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n images = db().select(db.image.ALL)\n i = 0\n row = []\n count = 0\n for image in images:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n images = db().select(db.image.ALL)\n for image in images:\n if image.creator == user:\n print user, image.creator\n user_pics.append(image)\n i = 0\n row = []\n count = 0\n print page\n for image in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.image, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n db(db.image.title==session.new_image_title).update(creator = auth.user.username)\n db(db.image.title==session.new_image_title).update(views = 0)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if real_image == None:\n redirect(URL(r=request, f=\'index\')) \n view = real_image.views + 1\n db(db.image.title==real_image.title).update(views = views)\n if auth.is_logged_in():\n form = SQLFORM(db.comment, fields = [\'body\'])\n if form.accepts(request.vars, session):\n db(db.comment.id==form.vars.id).update(author = auth.user.username)\n db(db.comment.id==form.vars.id).update(image_id = real_image.id)\n comments=db().select(db.comment.ALL)\n image_comments = []\n for comment in comments:\n if comment.image_id == real_image.id:\n image_comments.append(comment)\n return dict(image = real_image, form= form,comments=image_comments)\n \n \ndef testimage():\n\treturn db(db.image.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\ndef delete():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if auth.is_logged_in():\n if auth.user.username == real_image.creator:\n query=(db.image.id==real_image.id)\n db(query).delete()\n redirect(URL(r=request, f=\'index\')) \n \n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(image)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 112, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 75, in image\n view = real_image.views + 1\nTypeError: cannot concatenate \'str\' and \'int\' objects\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-08.16-20-00.059fb706-4580-4b2d-9ed1-59512ec92137 b/errors/127.0.0.1.2010-07-08.16-20-00.059fb706-4580-4b2d-9ed1-59512ec92137
new file mode 100644
index 0000000..7699e16
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-08.16-20-00.059fb706-4580-4b2d-9ed1-59512ec92137
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n images = db().select(db.image.ALL)\n i = 0\n row = []\n count = 0\n for image in images:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n images = db().select(db.image.ALL)\n for image in images:\n if image.creator == user:\n print user, image.creator\n user_pics.append(image)\n i = 0\n row = []\n count = 0\n print page\n for image in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.image, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n db(db.image.title==session.new_image_title).update(creator = auth.user.username)\n db(db.image.title==session.new_image_title).update(views = 0)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if real_image == None:\n redirect(URL(r=request, f=\'index\')) \n import pdb\n pdb.set_trace()\n view = real_image.views + 1\n db(db.image.title==real_image.title).update(views = views)\n if auth.is_logged_in():\n form = SQLFORM(db.comment, fields = [\'body\'])\n if form.accepts(request.vars, session):\n db(db.comment.id==form.vars.id).update(author = auth.user.username)\n db(db.comment.id==form.vars.id).update(image_id = real_image.id)\n comments=db().select(db.comment.ALL)\n image_comments = []\n for comment in comments:\n if comment.image_id == real_image.id:\n image_comments.append(comment)\n return dict(image = real_image, form= form,comments=image_comments)\n \n \ndef testimage():\n\treturn db(db.image.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\ndef delete():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if auth.is_logged_in():\n if auth.user.username == real_image.creator:\n query=(db.image.id==real_image.id)\n db(query).delete()\n redirect(URL(r=request, f=\'index\')) \n \n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(image)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 114, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 77, in image\n if auth.is_logged_in():\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 77, in image\n if auth.is_logged_in():\n File "/usr/lib/python2.6/bdb.py", line 46, in trace_dispatch\n return self.dispatch_line(frame)\n File "/usr/lib/python2.6/bdb.py", line 65, in dispatch_line\n if self.quitting: raise BdbQuit\nBdbQuit\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-08.16-20-06.c259b3f8-552b-4e9e-b2cb-8f1d2420406c b/errors/127.0.0.1.2010-07-08.16-20-06.c259b3f8-552b-4e9e-b2cb-8f1d2420406c
new file mode 100644
index 0000000..2dc57fc
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-08.16-20-06.c259b3f8-552b-4e9e-b2cb-8f1d2420406c
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n images = db().select(db.image.ALL)\n i = 0\n row = []\n count = 0\n for image in images:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n images = db().select(db.image.ALL)\n for image in images:\n if image.creator == user:\n print user, image.creator\n user_pics.append(image)\n i = 0\n row = []\n count = 0\n print page\n for image in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.image, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n db(db.image.title==session.new_image_title).update(creator = auth.user.username)\n db(db.image.title==session.new_image_title).update(views = 0)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if real_image == None:\n redirect(URL(r=request, f=\'index\')) \n view = int(real_image.views) + 1\n db(db.image.title==real_image.title).update(views = views)\n if auth.is_logged_in():\n form = SQLFORM(db.comment, fields = [\'body\'])\n if form.accepts(request.vars, session):\n db(db.comment.id==form.vars.id).update(author = auth.user.username)\n db(db.comment.id==form.vars.id).update(image_id = real_image.id)\n comments=db().select(db.comment.ALL)\n image_comments = []\n for comment in comments:\n if comment.image_id == real_image.id:\n image_comments.append(comment)\n return dict(image = real_image, form= form,comments=image_comments)\n \n \ndef testimage():\n\treturn db(db.image.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\ndef delete():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if auth.is_logged_in():\n if auth.user.username == real_image.creator:\n query=(db.image.id==real_image.id)\n db(query).delete()\n redirect(URL(r=request, f=\'index\')) \n \n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(image)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 112, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 76, in image\n db(db.image.title==real_image.title).update(views = views)\nNameError: global name \'views\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-08.16-22-24.a5292d7b-4a24-4ab2-8e3d-9f4ccc2ee84b b/errors/127.0.0.1.2010-07-08.16-22-24.a5292d7b-4a24-4ab2-8e3d-9f4ccc2ee84b
new file mode 100644
index 0000000..f8eb32a
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-08.16-22-24.a5292d7b-4a24-4ab2-8e3d-9f4ccc2ee84b
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n images = db().select(db.image.ALL)\n i = 0\n row = []\n count = 0\n for image in images:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n images = db().select(db.image.ALL)\n for image in images:\n if image.creator == user:\n print user, image.creator\n user_pics.append(image)\n i = 0\n row = []\n count = 0\n print page\n for image in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.image, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n db(db.image.title==session.new_image_title).update(creator = auth.user.username)\n db(db.image.title==session.new_image_title).update(views = 0)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if real_image == None:\n redirect(URL(r=request, f=\'index\')) \n view = int(real_image.views) + 1\n import pdb\n pdb.set_trace()\n db(db.image.title==real_image.title).update(views = views)\n if auth.is_logged_in():\n form = SQLFORM(db.comment, fields = [\'body\'])\n if form.accepts(request.vars, session):\n db(db.comment.id==form.vars.id).update(author = auth.user.username)\n db(db.comment.id==form.vars.id).update(image_id = real_image.id)\n comments=db().select(db.comment.ALL)\n image_comments = []\n for comment in comments:\n if comment.image_id == real_image.id:\n image_comments.append(comment)\n return dict(image = real_image, form= form,comments=image_comments)\n \n \ndef testimage():\n\treturn db(db.image.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\ndef delete():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if auth.is_logged_in():\n if auth.user.username == real_image.creator:\n query=(db.image.id==real_image.id)\n db(query).delete()\n redirect(URL(r=request, f=\'index\')) \n \n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(image)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 114, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 78, in image\n form = SQLFORM(db.comment, fields = [\'body\'])\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 78, in image\n form = SQLFORM(db.comment, fields = [\'body\'])\n File "/usr/lib/python2.6/bdb.py", line 46, in trace_dispatch\n return self.dispatch_line(frame)\n File "/usr/lib/python2.6/bdb.py", line 65, in dispatch_line\n if self.quitting: raise BdbQuit\nBdbQuit\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-08.16-30-15.2704d38b-d3cc-4e30-88c0-f94a6b5cdc95 b/errors/127.0.0.1.2010-07-08.16-30-15.2704d38b-d3cc-4e30-88c0-f94a6b5cdc95
new file mode 100644
index 0000000..2c9e1d4
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-08.16-30-15.2704d38b-d3cc-4e30-88c0-f94a6b5cdc95
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n images = db().select(db.image.ALL)\n i = 0\n row = []\n count = 0\n for image in images:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n images = db().select(db.image.ALL)\n for image in images:\n if image.creator == user:\n print user, image.creator\n user_pics.append(image)\n i = 0\n row = []\n count = 0\n print page\n for image in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.image, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n db(db.image.title==session.new_image_title).update(creator = auth.user.username)\n db(db.image.title==session.new_image_title).update(views = 0)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if real_image == None:\n redirect(URL(r=request, f=\'index\'))\n if auth.is_logged_in():\n views = int(real_image.views) + 1\n db(db.image.title==real_image.title).update(views = views)\n form = SQLFORM(db.comment, fields = [\'body\'])\n if form.accepts(request.vars, session):\n db(db.comment.id==form.vars.id).update(author = auth.user.username)\n db(db.comment.id==form.vars.id).update(image_id = real_image.id)\n comments=db().select(db.comment.ALL)\n image_comments = []\n for comment in comments:\n if comment.image_id == real_image.id:\n image_comments.append(comment)\n return dict(image = real_image, form= form,comments=image_comments)\n \n \ndef testimage():\n\treturn db(db.image.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\ndef delete():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if auth.is_logged_in():\n if auth.user.username == real_image.creator:\n query=(db.image.id==real_image.id)\n db(query).delete()\n redirect(URL(r=request, f=\'index\')) \n \n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(image)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 112, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 87, in image\n return dict(image = real_image, form= form,comments=image_comments)\nUnboundLocalError: local variable \'form\' referenced before assignment\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-08.16-36-35.3758fc84-121f-4dba-b939-ba6a397aabe9 b/errors/127.0.0.1.2010-07-08.16-36-35.3758fc84-121f-4dba-b939-ba6a397aabe9
new file mode 100644
index 0000000..6979dbe
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-08.16-36-35.3758fc84-121f-4dba-b939-ba6a397aabe9
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n sort = None\n table = db().select(db.image.ALL)\n i = 0\n row = []\n count = 0\n images = []\n for image in row:\n images.append(image)\n import pdb\n pdb.set_trace()\n for image in images:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n images = db().select(db.image.ALL)\n for image in images:\n if image.creator == user:\n print user, image.creator\n user_pics.append(image)\n i = 0\n row = []\n count = 0\n print page\n for image in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.image, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n db(db.image.title==session.new_image_title).update(creator = auth.user.username)\n db(db.image.title==session.new_image_title).update(views = 0)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if real_image == None:\n redirect(URL(r=request, f=\'index\'))\n if auth.is_logged_in():\n views = int(real_image.views) + 1\n db(db.image.title==real_image.title).update(views = views)\n form = SQLFORM(db.comment, fields = [\'body\'])\n if form.accepts(request.vars, session):\n db(db.comment.id==form.vars.id).update(author = auth.user.username)\n db(db.comment.id==form.vars.id).update(image_id = real_image.id)\n comments=db().select(db.comment.ALL)\n image_comments = []\n for comment in comments:\n if comment.image_id == real_image.id:\n image_comments.append(comment)\n return dict(image = real_image, form= form,comments=image_comments)\n \n \ndef testimage():\n\treturn db(db.image.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\ndef delete():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if auth.is_logged_in():\n if auth.user.username == real_image.creator:\n query=(db.image.id==real_image.id)\n db(query).delete()\n redirect(URL(r=request, f=\'index\')) \n \n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 118, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 17, in index\n for image in images:\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 17, in index\n for image in images:\n File "/usr/lib/python2.6/bdb.py", line 46, in trace_dispatch\n return self.dispatch_line(frame)\n File "/usr/lib/python2.6/bdb.py", line 65, in dispatch_line\n if self.quitting: raise BdbQuit\nBdbQuit\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-08.16-37-01.77bb5933-5db4-446a-993b-609fc26e0623 b/errors/127.0.0.1.2010-07-08.16-37-01.77bb5933-5db4-446a-993b-609fc26e0623
new file mode 100644
index 0000000..d9b9f72
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-08.16-37-01.77bb5933-5db4-446a-993b-609fc26e0623
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n sort = None\n table = db().select(db.image.ALL)\n i = 0\n row = []\n count = 0\n images = []\n for image in table:\n images.append(image)\n import pdb\n pdb.set_trace()\n for image in images:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n images = db().select(db.image.ALL)\n for image in images:\n if image.creator == user:\n print user, image.creator\n user_pics.append(image)\n i = 0\n row = []\n count = 0\n print page\n for image in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.image, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n db(db.image.title==session.new_image_title).update(creator = auth.user.username)\n db(db.image.title==session.new_image_title).update(views = 0)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if real_image == None:\n redirect(URL(r=request, f=\'index\'))\n if auth.is_logged_in():\n views = int(real_image.views) + 1\n db(db.image.title==real_image.title).update(views = views)\n form = SQLFORM(db.comment, fields = [\'body\'])\n if form.accepts(request.vars, session):\n db(db.comment.id==form.vars.id).update(author = auth.user.username)\n db(db.comment.id==form.vars.id).update(image_id = real_image.id)\n comments=db().select(db.comment.ALL)\n image_comments = []\n for comment in comments:\n if comment.image_id == real_image.id:\n image_comments.append(comment)\n return dict(image = real_image, form= form,comments=image_comments)\n \n \ndef testimage():\n\treturn db(db.image.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\ndef delete():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if auth.is_logged_in():\n if auth.user.username == real_image.creator:\n query=(db.image.id==real_image.id)\n db(query).delete()\n redirect(URL(r=request, f=\'index\')) \n \n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 118, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 17, in index\n for image in images:\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 17, in index\n for image in images:\n File "/usr/lib/python2.6/bdb.py", line 46, in trace_dispatch\n return self.dispatch_line(frame)\n File "/usr/lib/python2.6/bdb.py", line 65, in dispatch_line\n if self.quitting: raise BdbQuit\nBdbQuit\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-08.16-37-19.747f91b5-f072-4d32-a3de-f3d0a0a0782e b/errors/127.0.0.1.2010-07-08.16-37-19.747f91b5-f072-4d32-a3de-f3d0a0a0782e
new file mode 100644
index 0000000..f75467c
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-08.16-37-19.747f91b5-f072-4d32-a3de-f3d0a0a0782e
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n sort = None\n table = db().select(db.image.ALL)\n i = 0\n row = []\n count = 0\n images = []\n for image in table:\n images.append(image)\n for image in images:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n images = db().select(db.image.ALL)\n for image in images:\n if image.creator == user:\n print user, image.creator\n user_pics.append(image)\n i = 0\n row = []\n count = 0\n print page\n for image in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.image, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n db(db.image.title==session.new_image_title).update(creator = auth.user.username)\n db(db.image.title==session.new_image_title).update(views = 0)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if real_image == None:\n redirect(URL(r=request, f=\'index\'))\n if auth.is_logged_in():\n views = int(real_image.views) + 1\n db(db.image.title==real_image.title).update(views = views)\n form = SQLFORM(db.comment, fields = [\'body\'])\n if form.accepts(request.vars, session):\n db(db.comment.id==form.vars.id).update(author = auth.user.username)\n db(db.comment.id==form.vars.id).update(image_id = real_image.id)\n comments=db().select(db.comment.ALL)\n image_comments = []\n for comment in comments:\n if comment.image_id == real_image.id:\n image_comments.append(comment)\n return dict(image = real_image, form= form,comments=image_comments)\n \n \ndef testimage():\n\treturn db(db.image.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\ndef delete():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if auth.is_logged_in():\n if auth.user.username == real_image.creator:\n query=(db.image.id==real_image.id)\n db(query).delete()\n redirect(URL(r=request, f=\'index\')) \n \n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 116, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 24, in index\n table.append(row)\nAttributeError: \'Rows\' object has no attribute \'append\'\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-08.16-44-35.044150aa-da5f-4580-ae29-c9f142c6741a b/errors/127.0.0.1.2010-07-08.16-44-35.044150aa-da5f-4580-ae29-c9f142c6741a
new file mode 100644
index 0000000..ab7bcf6
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-08.16-44-35.044150aa-da5f-4580-ae29-c9f142c6741a
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n sort = None\n raw_images = db().select(db.image.ALL)\n i = 0\n row = []\n count = 0\n images = []\n for image in raw_images:\n images.append(image)\n import pdb\n pdb.set_trace()\n for image in images:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n images = db().select(db.image.ALL)\n for image in images:\n if image.creator == user:\n print user, image.creator\n user_pics.append(image)\n i = 0\n row = []\n count = 0\n print page\n for image in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.image, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n db(db.image.title==session.new_image_title).update(creator = auth.user.username)\n db(db.image.title==session.new_image_title).update(views = 0)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if real_image == None:\n redirect(URL(r=request, f=\'index\'))\n if auth.is_logged_in():\n views = int(real_image.views) + 1\n db(db.image.title==real_image.title).update(views = views)\n form = SQLFORM(db.comment, fields = [\'body\'])\n if form.accepts(request.vars, session):\n db(db.comment.id==form.vars.id).update(author = auth.user.username)\n db(db.comment.id==form.vars.id).update(image_id = real_image.id)\n comments=db().select(db.comment.ALL)\n image_comments = []\n for comment in comments:\n if comment.image_id == real_image.id:\n image_comments.append(comment)\n return dict(image = real_image, form= form,comments=image_comments)\n \n \ndef testimage():\n\treturn db(db.image.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\ndef delete():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if auth.is_logged_in():\n if auth.user.username == real_image.creator:\n query=(db.image.id==real_image.id)\n db(query).delete()\n redirect(URL(r=request, f=\'index\')) \n \n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/web2py/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 118, in <module>\n File "/home/jboisture/Desktop/web2py/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 17, in index\n for image in images:\n File "/home/jboisture/Desktop/web2py/applications/turtlesite/controllers/default.py", line 17, in index\n for image in images:\n File "/usr/lib/python2.6/bdb.py", line 46, in trace_dispatch\n return self.dispatch_line(frame)\n File "/usr/lib/python2.6/bdb.py", line 65, in dispatch_line\n if self.quitting: raise BdbQuit\nBdbQuit\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-13.15-36-26.6e9681c5-0910-4de3-8952-4c6edb303c15 b/errors/127.0.0.1.2010-07-13.15-36-26.6e9681c5-0910-4de3-8952-4c6edb303c15
new file mode 100644
index 0000000..4210311
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-13.15-36-26.6e9681c5-0910-4de3-8952-4c6edb303c15
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/google_appengine/turtleartsite/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n if "sort" in request.vars.keys(): sort = request.vars["sort"]\n else: sort = \'newest\'\n if "profile" in request.vars.keys(): profile = request.vars["profile"]\n else: profile = None\n table = []\n raw_images = db().select(db.image.ALL)\n i = 0\n row = []\n count = 0\n images = []\n for image in raw_images:\n if profile != None:\n if image.creator == profile:\n images.append(image)\n else: image.append(image)\n if sort == \'views\':\n images = sorted(images, key=lambda image: image[\'views\'], reverse = True)\n if sort == \'newest\':\n images = sorted(images, key=lambda image: image[\'id\'], reverse = True)\n for image in images:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page, sort=sort, profile=profile)\n\ndef profile():\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f=\'index\')) \n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n table = []\n user_pics = []\n images = db().select(db.image.ALL)\n for image in images:\n if image.creator == user:\n user_pics.append(image)\n i = 0\n row = []\n count = 0\n for image in user_pics:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page, user=user)\n\ndef upload():\n form = SQLFORM(db.image, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n db(db.image.title==session.new_image_title).update(creator = auth.user.username)\n db(db.image.title==session.new_image_title).update(views = 0)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if real_image == None:\n redirect(URL(r=request, f=\'index\'))\n if auth.is_logged_in():\n if auth.user.username != real_image.creator:\n views = int(real_image.views) + 1\n db(db.image.title==real_image.title).update(views = views)\n form = SQLFORM(db.comment, fields = [\'body\'])\n if form.accepts(request.vars, session):\n db(db.comment.id==form.vars.id).update(author = auth.user.username)\n db(db.comment.id==form.vars.id).update(image_id = real_image.id)\n comments=db().select(db.comment.ALL)\n image_comments = []\n for comment in comments:\n if comment.image_id == real_image.id:\n image_comments.append(comment)\n return dict(image = real_image, form= form,comments=image_comments)\n \n \ndef testimage():\n\treturn db(db.image.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\ndef delete():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if auth.is_logged_in():\n if auth.user.username == real_image.creator:\n query=(db.image.id==real_image.id)\n db(query).delete()\n redirect(URL(r=request, f=\'index\')) \n \n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/applications/turtlesite/controllers/default.py", line 125, in <module>\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/applications/turtlesite/controllers/default.py", line 20, in index\n else: image.append(image)\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/gluon/sql.py", line 665, in __getattr__\n return dict.__getitem__(self,key)\nKeyError: \'append\'\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-13.15-40-44.5519811d-d613-4ef7-8b43-f2da758adaeb b/errors/127.0.0.1.2010-07-13.15-40-44.5519811d-d613-4ef7-8b43-f2da758adaeb
new file mode 100644
index 0000000..46960b0
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-13.15-40-44.5519811d-d613-4ef7-8b43-f2da758adaeb
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/google_appengine/turtleartsite/applications/turtlesite/views/default/index.html'
+p4
+sS'code'
+p5
+S'response.write(\'<html>\\n <link rel="stylesheet" href="../static/glike.css" type="text/css" />\\n <head>\\n <title>Turtle Art Image Database</title>\\n </head>\\n <body>\\n <div id="header">\\n <h1><a href="index.html" >Home</a></h1>\\n <ul>\\n \',escape=False)\nif auth.is_logged_in():\n response.write(\'\\n <li><a href=\',escape=False)\n response.write("index?profile="+auth.user.username)\n response.write(\'>\',escape=False)\n response.write(auth.user.username)\n response.write(\'</a>: </li>\\n <li><a href="user/logout">Log Out</li>\\n <li><a href="upload.html" >New Image</a></li>\\n \',escape=False)\n pass\nresponse.write(\'\\n \',escape=False)\nif not auth.is_logged_in():\n response.write(\'\\n <li><a href="user.html">log in</a></li>\\n \',escape=False)\n pass\nresponse.write("\\n </ul>\\n </div>\\n <div id=\'bodycontent\'>\\n \\n",escape=False)\nif profile != None:\n response.write(\'\\n <h1>\',escape=False)\n response.write(profile+ "\'s Submissions")\n response.write(\'</h1>\\n \',escape=False)\n pass\nresponse.write(\'\\n\',escape=False)\nif profile == None:\n response.write(\'\\n <h1>Submissions</h1>\\n \',escape=False)\n pass\nresponse.write(\'\\n<p>Sort by:\\n\',escape=False)\nif profile == None:\n response.write(\'\\n \',escape=False)\n if sort == "newest":\n response.write(\' \\n \',escape=False)\n response.write(sort)\n response.write(\'\\n <a href="index.html?sort=views"> views</a></p>\\n \',escape=False)\n pass\n response.write(\'\\n \',escape=False)\n if sort == "views":\n response.write(\' \\n <a href="index.html?sort=newest"> newest</a>\\n \',escape=False)\n response.write(sort)\n response.write(\'</p>\\n \',escape=False)\n pass\n response.write(\'\\n \',escape=False)\n pass\nresponse.write(\'\\n\',escape=False)\nif profile == None:\n response.write(\'\\n \',escape=False)\n if sort == "newest":\n response.write(\' \\n \',escape=False)\n response.write(sort)\n response.write(\'\\n <a href=\',escape=False)\n response.write("index.html?sort=views;profile="+profile)\n response.write(\'> views</a></p>\\n \',escape=False)\n pass\n response.write(\'\\n \',escape=False)\n if sort == "views":\n response.write(\' \\n <a href=\',escape=False)\n response.write("index.html?sort=newest";profile="+profile)\\nresponse.write(\'> newest</a>\\n \',escape=False)\\nresponse.write(sort)\\nresponse.write(\'</p>\\n \',escape=False)\\npass\\nresponse.write(\'\\n \',escape=False)\\npass\\nresponse.write(\'\\n\',escape=False)\\nfor row in images:\\nresponse.write(\'\\n <table><tr>\\n \',escape=False)\\nfor image in row:\\nresponse.write(\'\\n <td><a href = \',escape=False)\\nresponse.write("/turtlesite/default/image.html?title="+image.title.replace(\' \',"*"))\\nresponse.write(\'>\\n <img width="250px" src="\',escape=False)\\nresponse.write(URL(r=request, f=\'download\', args=image.newimage))\\nresponse.write(\'" \\n onclick="ajax(\\\'ajaxwiki_onclick\\\',[\\\'text\\\'],\\\'html\\\')"/>\\n <br><center>\',escape=False)\n response.write(image.title)\n response.write(\'</center></a></td>\\n \',escape=False)\n pass\n response.write(\'\\n </tr></table>\\n \',escape=False)\n pass\nresponse.write(\'\\n<center>\\n<ul id="navlist">\\n\',escape=False)\nfor count in range(pages):\n response.write(\'\\n \',escape=False)\n if count+1 == page:\n response.write(\'\\n <li>\',escape=False)\n response.write(str(page))\n response.write(\'</li>\\n \',escape=False)\n pass\n response.write(\'\\n \',escape=False)\n if count+1 != page:\n response.write(\'\\n \',escape=False)\n if profile == None:\n response.write(\'\\n <li><a href = \',escape=False)\n response.write("index.html?page="+str(count+1)+";sort="+sort)\n response.write(\'>\',escape=False)\n response.write( str(count+1))\n response.write(\'</a></li>\\n \',escape=False)\n pass\n response.write(\'\\n \',escape=False)\n if profile != None:\n response.write(\'\\n <li><a href = \',escape=False)\n response.write("index.html?page="+str(count+1)+";sort="+sort)\n response.write(\'+";profile="+profile>\',escape=False)\n response.write( str(count+1))\n response.write(\'</a></li>\\n \',escape=False)\n pass\n response.write(\'\\n \',escape=False)\n pass\n response.write(\'\\n \',escape=False)\n pass\nresponse.write(\'\\n</ul>\\n</center>\\n\\n </div>\\n </body>\\n </style>\\n</html>\\n\',escape=False)'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/applications/turtlesite/views/default/index.html", line 52\n response.write("index.html?sort=newest";profile="+profile)\\nresponse.write(\'> newest</a>\\n \',escape=False)\\nresponse.write(sort)\\nresponse.write(\'</p>\\n \',escape=False)\\npass\\nresponse.write(\'\\n \',escape=False)\\npass\\nresponse.write(\'\\n\',escape=False)\\nfor row in images:\\nresponse.write(\'\\n <table><tr>\\n \',escape=False)\\nfor image in row:\\nresponse.write(\'\\n <td><a href = \',escape=False)\\nresponse.write("/turtlesite/default/image.html?title="+image.title.replace(\' \',"*"))\\nresponse.write(\'>\\n <img width="250px" src="\',escape=False)\\nresponse.write(URL(r=request, f=\'download\', args=image.newimage))\\nresponse.write(\'" \\n onclick="ajax(\\\'ajaxwiki_onclick\\\',[\\\'text\\\'],\\\'html\\\')"/>\\n <br><center>\',escape=False)\n ^\nSyntaxError: invalid syntax\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-13.16-01-48.571d5770-28f3-4258-86e5-18f34ecc8bf0 b/errors/127.0.0.1.2010-07-13.16-01-48.571d5770-28f3-4258-86e5-18f34ecc8bf0
new file mode 100644
index 0000000..f21161f
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-13.16-01-48.571d5770-28f3-4258-86e5-18f34ecc8bf0
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/google_appengine/turtleartsite/applications/turtlesite/views/default/index.html'
+p4
+sS'code'
+p5
+S'response.write(\'<html>\\n <link rel="stylesheet" href="../static/glike.css" type="text/css" />\\n <head>\\n <title>Turtle Art Image Database</title>\\n </head>\\n <body>\\n <div id="header">\\n <h1><a href="index.html" >Home</a></h1>\\n <ul>\\n \',escape=False)\nif auth.is_logged_in():\n response.write(\'\\n <li><a href=\',escape=False)\n response.write("index?profile="+auth.user.username)\n response.write(\'>\',escape=False)\n response.write(auth.user.username)\n response.write(\'</a>: </li>\\n <li><a href="user/logout">Log Out</li>\\n <li><a href="upload.html" >New Image</a></li>\\n \',escape=False)\n pass\nresponse.write(\'\\n \',escape=False)\nif not auth.is_logged_in():\n response.write(\'\\n <li><a href="user.html">log in</a></li>\\n \',escape=False)\n pass\nresponse.write("\\n </ul>\\n </div>\\n <div id=\'bodycontent\'>\\n \\n",escape=False)\nif profile != None:\n response.write(\'\\n <h1>\',escape=False)\n response.write(profile+ "\'s Submissions")\n response.write(\'</h1>\\n \',escape=False)\n pass\nresponse.write(\'\\n\',escape=False)\nif profile == None:\n response.write(\'\\n <h1>Submissions</h1>\\n \',escape=False)\n pass\nresponse.write(\'\\n<p>Sort by:\\n\',escape=False)\nif profile == None:\n response.write(\'\\n \',escape=False)\n if sort == "newest":\n response.write(\' \\n \',escape=False)\n response.write(sort)\n response.write(\'\\n <a href="index.html?sort=views"> views</a></p>\\n \',escape=False)\n pass\n response.write(\'\\n \',escape=False)\n if sort == "views":\n response.write(\' \\n <a href="index.html?sort=newest"> newest</a>\\n \',escape=False)\n response.write(sort)\n response.write(\'</p>\\n \',escape=False)\n pass\n response.write(\'\\n \',escape=False)\n pass\nresponse.write(\'\\n\',escape=False)\nif profile != None:\n response.write(\'\\n \',escape=False)\n if sort == "newest":\n response.write(\' \\n \',escape=False)\n response.write(sort)\n response.write(\'\\n <a href=\',escape=False)\n response.write("index.html?sort=views;profile="+profile)\n response.write(\'> views</a></p>\\n \',escape=False)\n pass\n response.write(\'\\n \',escape=False)\n if sort == "views":\n response.write(\' \\n <a href=\',escape=False)\n response.write("index.html?sort=newest;profile="+profile)\n response.write(\'> newest</a>\\n \',escape=False)\n response.write(sort)\n response.write(\'</p>\\n \',escape=False)\n pass\n response.write(\'\\n \',escape=False)\n pass\nresponse.write(\'\\n\',escape=False)\nfor row in images:\n response.write(\'\\n <table><tr>\\n \',escape=False)\n for image in row:\n response.write(\'\\n <td><a href = \',escape=False)\n response.write("/turtlesite/default/image.html?image="+image.id)\n response.write(\'>\\n <img width="250px" src="\',escape=False)\n response.write(URL(r=request, f=\'download\', args=image.newimage))\n response.write(\'" \\n onclick="ajax(\\\'ajaxwiki_onclick\\\',[\\\'text\\\'],\\\'html\\\')"/>\\n <br><center>\',escape=False)\n response.write(image.title)\n response.write(\'</center></a></td>\\n \',escape=False)\n pass\n response.write(\'\\n </tr></table>\\n \',escape=False)\n pass\nresponse.write(\'\\n<center>\\n<ul id="navlist">\\n\',escape=False)\nfor count in range(pages):\n response.write(\'\\n \',escape=False)\n if count+1 == page:\n response.write(\'\\n <li>\',escape=False)\n response.write(str(page))\n response.write(\'</li>\\n \',escape=False)\n pass\n response.write(\'\\n \',escape=False)\n if count+1 != page:\n response.write(\'\\n \',escape=False)\n if profile == None:\n response.write(\'\\n <li><a href = \',escape=False)\n response.write("index.html?page="+str(count+1)+";sort="+sort)\n response.write(\'>\',escape=False)\n response.write( str(count+1))\n response.write(\'</a></li>\\n \',escape=False)\n pass\n response.write(\'\\n \',escape=False)\n if profile != None:\n response.write(\'\\n <li><a href = \',escape=False)\n response.write("index.html?page="+str(count+1)+";sort="+sort)\n response.write(\'+";profile="+profile>\',escape=False)\n response.write( str(count+1))\n response.write(\'</a></li>\\n \',escape=False)\n pass\n response.write(\'\\n \',escape=False)\n pass\n response.write(\'\\n \',escape=False)\n pass\nresponse.write(\'\\n</ul>\\n</center>\\n\\n </div>\\n </body>\\n </style>\\n</html>\\n\',escape=False)'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/applications/turtlesite/views/default/index.html", line 64, in <module>\nTypeError: cannot concatenate \'str\' and \'int\' objects\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-13.16-02-24.a06d170a-1f3b-4342-b594-615c26ac6c38 b/errors/127.0.0.1.2010-07-13.16-02-24.a06d170a-1f3b-4342-b594-615c26ac6c38
new file mode 100644
index 0000000..6acd465
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-13.16-02-24.a06d170a-1f3b-4342-b594-615c26ac6c38
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/google_appengine/turtleartsite/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef index():\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n if "sort" in request.vars.keys(): sort = request.vars["sort"]\n else: sort = \'newest\'\n if "profile" in request.vars.keys(): profile = request.vars["profile"]\n else: profile = None\n table = []\n raw_images = db().select(db.image.ALL)\n i = 0\n row = []\n count = 0\n images = []\n for image in raw_images:\n if profile != None:\n if image.creator == profile:\n images.append(image)\n else: images.append(image)\n if sort == \'views\':\n images = sorted(images, key=lambda image: image[\'views\'], reverse = True)\n if sort == \'newest\':\n images = sorted(images, key=lambda image: image[\'id\'], reverse = True)\n for image in images:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page, sort=sort, profile=profile)\n\ndef upload():\n form = SQLFORM(db.image, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n db(db.image.title==session.new_image_title).update(creator = auth.user.username)\n db(db.image.title==session.new_image_title).update(views = 0)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n images = db().select(db.image.ALL)\n image_id = int(request.vars["id"])\n for image in images:\n if image.id == image_id:\n real_image = image\n title=real_image.title\n if real_image == None:\n redirect(URL(r=request, f=\'index\'))\n if auth.is_logged_in():\n if auth.user.username != real_image.creator:\n views = int(real_image.views) + 1\n db(db.image.title==real_image.title).update(views = views)\n form = SQLFORM(db.comment, fields = [\'body\'])\n if form.accepts(request.vars, session):\n db(db.comment.id==form.vars.id).update(author = auth.user.username)\n db(db.comment.id==form.vars.id).update(image_id = real_image.id)\n comments=db().select(db.comment.ALL)\n image_comments = []\n for comment in comments:\n if comment.image_id == real_image.id:\n image_comments.append(comment)\n return dict(image = real_image, form= form,comments=image_comments)\n \n \ndef testimage():\n\treturn db(db.image.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\ndef delete():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if auth.is_logged_in():\n if auth.user.username == real_image.creator:\n query=(db.image.id==real_image.id)\n db(query).delete()\n redirect(URL(r=request, f=\'index\')) \n \n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(image)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/applications/turtlesite/controllers/default.py", line 97, in <module>\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/applications/turtlesite/controllers/default.py", line 52, in image\n image_id = int(request.vars["id"])\nKeyError: \'id\'\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-13.16-43-44.ab2ccb3e-4ab0-461c-8c42-62e5531360e0 b/errors/127.0.0.1.2010-07-13.16-43-44.ab2ccb3e-4ab0-461c-8c42-62e5531360e0
new file mode 100644
index 0000000..c19a0b6
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-13.16-43-44.ab2ccb3e-4ab0-461c-8c42-62e5531360e0
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/google_appengine/turtleartsite/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef sort_by_views(L):\n if len(L) <= 1: return L\n return qsort( [ lt for lt in L[1:] if lt.views < L[0].views ] ) + \\ \n [ L[0] ] + qsort( [ ge for ge in L[1:] if ge.views >= L[0].views ] )\n\n\ndef index():\n sorts = ["newest", "views"]\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n if "sort" in request.vars.keys(): sort = request.vars["sort"]\n else: sort = \'newest\'\n if sort not in sorts:\n sort = "newest"\n if "profile" in request.vars.keys(): profile = request.vars["profile"]\n else: profile = None\n table = []\n raw_images = db().select(db.image.ALL)\n i = 0\n row = []\n count = 0\n images = []\n for image in raw_images:\n if profile != None:\n if image.creator == profile:\n images.append(image)\n else: images.append(image)\n if sort == \'views\':\n images = sort_by_views(images)\n images.reverse()\n if sort == \'newest\':\n images.sort(cmp=lambda x,y:cmp(x.id,y.id))\n images.reverse()\n for image in images: print image.views, image.id\n for image in images:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page, sort=sort, profile=profile)\n\ndef upload():\n form = SQLFORM(db.image, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n db(db.image.title==session.new_image_title).update(creator = auth.user.username)\n db(db.image.title==session.new_image_title).update(views = 0)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n images = db().select(db.image.ALL)\n image_id = int(request.vars["image"])\n for image in images:\n if image.id == image_id:\n real_image = image\n title=real_image.title\n if real_image == None:\n redirect(URL(r=request, f=\'index\'))\n if auth.is_logged_in():\n if auth.user.username != real_image.creator:\n views = int(real_image.views) + 1\n db(db.image.title==real_image.title).update(views = views)\n form = SQLFORM(db.comment, fields = [\'body\'])\n if form.accepts(request.vars, session):\n db(db.comment.id==form.vars.id).update(author = auth.user.username)\n db(db.comment.id==form.vars.id).update(image_id = real_image.id)\n comments=db().select(db.comment.ALL)\n image_comments = []\n for comment in comments:\n if comment.image_id == real_image.id:\n image_comments.append(comment)\n return dict(image = real_image, form= form,comments=image_comments)\n \n \ndef testimage():\n\treturn db(db.image.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\ndef delete():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if auth.is_logged_in():\n if auth.user.username == real_image.creator:\n query=(db.image.id==real_image.id)\n db(query).delete()\n redirect(URL(r=request, f=\'index\')) \n \n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/applications/turtlesite/controllers/default.py", line 5\n return qsort( [ lt for lt in L[1:] if lt.views < L[0].views ] ) + \\\n ^\nSyntaxError: unexpected character after line continuation character\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-13.16-44-14.8480d4f8-4257-4061-9590-0e1a04b92bcd b/errors/127.0.0.1.2010-07-13.16-44-14.8480d4f8-4257-4061-9590-0e1a04b92bcd
new file mode 100644
index 0000000..7797416
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-13.16-44-14.8480d4f8-4257-4061-9590-0e1a04b92bcd
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/google_appengine/turtleartsite/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef sort_by_views(L):\n if len(L) <= 1: return L\n return qsort( [ lt for lt in L[1:] if lt.views < L[0].views ] ) + [ L[0] ] + qsort( [ ge for ge in L[1:] if ge.views >= L[0].views ] )\n\n\ndef index():\n sorts = ["newest", "views"]\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n if "sort" in request.vars.keys(): sort = request.vars["sort"]\n else: sort = \'newest\'\n if sort not in sorts:\n sort = "newest"\n if "profile" in request.vars.keys(): profile = request.vars["profile"]\n else: profile = None\n table = []\n raw_images = db().select(db.image.ALL)\n i = 0\n row = []\n count = 0\n images = []\n for image in raw_images:\n if profile != None:\n if image.creator == profile:\n images.append(image)\n else: images.append(image)\n if sort == \'views\':\n images = sort_by_views(images)\n images.reverse()\n if sort == \'newest\':\n images.sort(cmp=lambda x,y:cmp(x.id,y.id))\n images.reverse()\n for image in images: print image.views, image.id\n for image in images:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page, sort=sort, profile=profile)\n\ndef upload():\n form = SQLFORM(db.image, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n db(db.image.title==session.new_image_title).update(creator = auth.user.username)\n db(db.image.title==session.new_image_title).update(views = 0)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n images = db().select(db.image.ALL)\n image_id = int(request.vars["image"])\n for image in images:\n if image.id == image_id:\n real_image = image\n title=real_image.title\n if real_image == None:\n redirect(URL(r=request, f=\'index\'))\n if auth.is_logged_in():\n if auth.user.username != real_image.creator:\n views = int(real_image.views) + 1\n db(db.image.title==real_image.title).update(views = views)\n form = SQLFORM(db.comment, fields = [\'body\'])\n if form.accepts(request.vars, session):\n db(db.comment.id==form.vars.id).update(author = auth.user.username)\n db(db.comment.id==form.vars.id).update(image_id = real_image.id)\n comments=db().select(db.comment.ALL)\n image_comments = []\n for comment in comments:\n if comment.image_id == real_image.id:\n image_comments.append(comment)\n return dict(image = real_image, form= form,comments=image_comments)\n \n \ndef testimage():\n\treturn db(db.image.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\ndef delete():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if auth.is_logged_in():\n if auth.user.username == real_image.creator:\n query=(db.image.id==real_image.id)\n db(query).delete()\n redirect(URL(r=request, f=\'index\')) \n \n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/applications/turtlesite/controllers/default.py", line 108, in <module>\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/applications/turtlesite/controllers/default.py", line 30, in index\n images = sort_by_views(images)\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/applications/turtlesite/controllers/default.py", line 5, in sort_by_views\n return qsort( [ lt for lt in L[1:] if lt.views < L[0].views ] ) + [ L[0] ] + qsort( [ ge for ge in L[1:] if ge.views >= L[0].views ] )\nNameError: global name \'qsort\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-13.16-44-30.36c1dbc5-f098-4eaf-bbf3-5ba7cd8031b5 b/errors/127.0.0.1.2010-07-13.16-44-30.36c1dbc5-f098-4eaf-bbf3-5ba7cd8031b5
new file mode 100644
index 0000000..6dd406b
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-13.16-44-30.36c1dbc5-f098-4eaf-bbf3-5ba7cd8031b5
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/google_appengine/turtleartsite/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef sort_by_views(L):\n if len(L) <= 1: return L\n return sort_by_views( [ lt for lt in L[1:] if lt.views < L[0].views ] ) + [ L[0] ] + qsort( [ ge for ge in L[1:] if ge.views >= L[0].views ] )\n\n\ndef index():\n sorts = ["newest", "views"]\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n if "sort" in request.vars.keys(): sort = request.vars["sort"]\n else: sort = \'newest\'\n if sort not in sorts:\n sort = "newest"\n if "profile" in request.vars.keys(): profile = request.vars["profile"]\n else: profile = None\n table = []\n raw_images = db().select(db.image.ALL)\n i = 0\n row = []\n count = 0\n images = []\n for image in raw_images:\n if profile != None:\n if image.creator == profile:\n images.append(image)\n else: images.append(image)\n if sort == \'views\':\n images = sort_by_views(images)\n images.reverse()\n if sort == \'newest\':\n images.sort(cmp=lambda x,y:cmp(x.id,y.id))\n images.reverse()\n for image in images: print image.views, image.id\n for image in images:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page, sort=sort, profile=profile)\n\ndef upload():\n form = SQLFORM(db.image, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n db(db.image.title==session.new_image_title).update(creator = auth.user.username)\n db(db.image.title==session.new_image_title).update(views = 0)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n images = db().select(db.image.ALL)\n image_id = int(request.vars["image"])\n for image in images:\n if image.id == image_id:\n real_image = image\n title=real_image.title\n if real_image == None:\n redirect(URL(r=request, f=\'index\'))\n if auth.is_logged_in():\n if auth.user.username != real_image.creator:\n views = int(real_image.views) + 1\n db(db.image.title==real_image.title).update(views = views)\n form = SQLFORM(db.comment, fields = [\'body\'])\n if form.accepts(request.vars, session):\n db(db.comment.id==form.vars.id).update(author = auth.user.username)\n db(db.comment.id==form.vars.id).update(image_id = real_image.id)\n comments=db().select(db.comment.ALL)\n image_comments = []\n for comment in comments:\n if comment.image_id == real_image.id:\n image_comments.append(comment)\n return dict(image = real_image, form= form,comments=image_comments)\n \n \ndef testimage():\n\treturn db(db.image.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\ndef delete():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if auth.is_logged_in():\n if auth.user.username == real_image.creator:\n query=(db.image.id==real_image.id)\n db(query).delete()\n redirect(URL(r=request, f=\'index\')) \n \n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/applications/turtlesite/controllers/default.py", line 108, in <module>\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/applications/turtlesite/controllers/default.py", line 30, in index\n images = sort_by_views(images)\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/applications/turtlesite/controllers/default.py", line 5, in sort_by_views\n return sort_by_views( [ lt for lt in L[1:] if lt.views < L[0].views ] ) + [ L[0] ] + qsort( [ ge for ge in L[1:] if ge.views >= L[0].views ] )\nNameError: global name \'qsort\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-13.16-44-31.78c05431-6a0b-4dfb-ad48-fc4bbb3a376d b/errors/127.0.0.1.2010-07-13.16-44-31.78c05431-6a0b-4dfb-ad48-fc4bbb3a376d
new file mode 100644
index 0000000..6dd406b
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-13.16-44-31.78c05431-6a0b-4dfb-ad48-fc4bbb3a376d
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/google_appengine/turtleartsite/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef sort_by_views(L):\n if len(L) <= 1: return L\n return sort_by_views( [ lt for lt in L[1:] if lt.views < L[0].views ] ) + [ L[0] ] + qsort( [ ge for ge in L[1:] if ge.views >= L[0].views ] )\n\n\ndef index():\n sorts = ["newest", "views"]\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n if "sort" in request.vars.keys(): sort = request.vars["sort"]\n else: sort = \'newest\'\n if sort not in sorts:\n sort = "newest"\n if "profile" in request.vars.keys(): profile = request.vars["profile"]\n else: profile = None\n table = []\n raw_images = db().select(db.image.ALL)\n i = 0\n row = []\n count = 0\n images = []\n for image in raw_images:\n if profile != None:\n if image.creator == profile:\n images.append(image)\n else: images.append(image)\n if sort == \'views\':\n images = sort_by_views(images)\n images.reverse()\n if sort == \'newest\':\n images.sort(cmp=lambda x,y:cmp(x.id,y.id))\n images.reverse()\n for image in images: print image.views, image.id\n for image in images:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page, sort=sort, profile=profile)\n\ndef upload():\n form = SQLFORM(db.image, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n db(db.image.title==session.new_image_title).update(creator = auth.user.username)\n db(db.image.title==session.new_image_title).update(views = 0)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n images = db().select(db.image.ALL)\n image_id = int(request.vars["image"])\n for image in images:\n if image.id == image_id:\n real_image = image\n title=real_image.title\n if real_image == None:\n redirect(URL(r=request, f=\'index\'))\n if auth.is_logged_in():\n if auth.user.username != real_image.creator:\n views = int(real_image.views) + 1\n db(db.image.title==real_image.title).update(views = views)\n form = SQLFORM(db.comment, fields = [\'body\'])\n if form.accepts(request.vars, session):\n db(db.comment.id==form.vars.id).update(author = auth.user.username)\n db(db.comment.id==form.vars.id).update(image_id = real_image.id)\n comments=db().select(db.comment.ALL)\n image_comments = []\n for comment in comments:\n if comment.image_id == real_image.id:\n image_comments.append(comment)\n return dict(image = real_image, form= form,comments=image_comments)\n \n \ndef testimage():\n\treturn db(db.image.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\ndef delete():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if auth.is_logged_in():\n if auth.user.username == real_image.creator:\n query=(db.image.id==real_image.id)\n db(query).delete()\n redirect(URL(r=request, f=\'index\')) \n \n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/applications/turtlesite/controllers/default.py", line 108, in <module>\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/applications/turtlesite/controllers/default.py", line 30, in index\n images = sort_by_views(images)\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/applications/turtlesite/controllers/default.py", line 5, in sort_by_views\n return sort_by_views( [ lt for lt in L[1:] if lt.views < L[0].views ] ) + [ L[0] ] + qsort( [ ge for ge in L[1:] if ge.views >= L[0].views ] )\nNameError: global name \'qsort\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-13.16-44-40.288d857b-24ed-486b-97e6-b19449779e4e b/errors/127.0.0.1.2010-07-13.16-44-40.288d857b-24ed-486b-97e6-b19449779e4e
new file mode 100644
index 0000000..6dd406b
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-13.16-44-40.288d857b-24ed-486b-97e6-b19449779e4e
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/google_appengine/turtleartsite/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef sort_by_views(L):\n if len(L) <= 1: return L\n return sort_by_views( [ lt for lt in L[1:] if lt.views < L[0].views ] ) + [ L[0] ] + qsort( [ ge for ge in L[1:] if ge.views >= L[0].views ] )\n\n\ndef index():\n sorts = ["newest", "views"]\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n if "sort" in request.vars.keys(): sort = request.vars["sort"]\n else: sort = \'newest\'\n if sort not in sorts:\n sort = "newest"\n if "profile" in request.vars.keys(): profile = request.vars["profile"]\n else: profile = None\n table = []\n raw_images = db().select(db.image.ALL)\n i = 0\n row = []\n count = 0\n images = []\n for image in raw_images:\n if profile != None:\n if image.creator == profile:\n images.append(image)\n else: images.append(image)\n if sort == \'views\':\n images = sort_by_views(images)\n images.reverse()\n if sort == \'newest\':\n images.sort(cmp=lambda x,y:cmp(x.id,y.id))\n images.reverse()\n for image in images: print image.views, image.id\n for image in images:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page, sort=sort, profile=profile)\n\ndef upload():\n form = SQLFORM(db.image, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n db(db.image.title==session.new_image_title).update(creator = auth.user.username)\n db(db.image.title==session.new_image_title).update(views = 0)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n images = db().select(db.image.ALL)\n image_id = int(request.vars["image"])\n for image in images:\n if image.id == image_id:\n real_image = image\n title=real_image.title\n if real_image == None:\n redirect(URL(r=request, f=\'index\'))\n if auth.is_logged_in():\n if auth.user.username != real_image.creator:\n views = int(real_image.views) + 1\n db(db.image.title==real_image.title).update(views = views)\n form = SQLFORM(db.comment, fields = [\'body\'])\n if form.accepts(request.vars, session):\n db(db.comment.id==form.vars.id).update(author = auth.user.username)\n db(db.comment.id==form.vars.id).update(image_id = real_image.id)\n comments=db().select(db.comment.ALL)\n image_comments = []\n for comment in comments:\n if comment.image_id == real_image.id:\n image_comments.append(comment)\n return dict(image = real_image, form= form,comments=image_comments)\n \n \ndef testimage():\n\treturn db(db.image.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\ndef delete():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if auth.is_logged_in():\n if auth.user.username == real_image.creator:\n query=(db.image.id==real_image.id)\n db(query).delete()\n redirect(URL(r=request, f=\'index\')) \n \n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/applications/turtlesite/controllers/default.py", line 108, in <module>\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/applications/turtlesite/controllers/default.py", line 30, in index\n images = sort_by_views(images)\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/applications/turtlesite/controllers/default.py", line 5, in sort_by_views\n return sort_by_views( [ lt for lt in L[1:] if lt.views < L[0].views ] ) + [ L[0] ] + qsort( [ ge for ge in L[1:] if ge.views >= L[0].views ] )\nNameError: global name \'qsort\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/errors/127.0.0.1.2010-07-13.16-44-43.103a43f9-71d9-4768-812b-753b726fa197 b/errors/127.0.0.1.2010-07-13.16-44-43.103a43f9-71d9-4768-812b-753b726fa197
new file mode 100644
index 0000000..6dd406b
--- /dev/null
+++ b/errors/127.0.0.1.2010-07-13.16-44-43.103a43f9-71d9-4768-812b-753b726fa197
@@ -0,0 +1,17 @@
+(dp1
+S'output'
+p2
+S''
+sS'layer'
+p3
+S'/home/jboisture/Desktop/google_appengine/turtleartsite/applications/turtlesite/controllers/default.py'
+p4
+sS'code'
+p5
+S'import os\n\ndef sort_by_views(L):\n if len(L) <= 1: return L\n return sort_by_views( [ lt for lt in L[1:] if lt.views < L[0].views ] ) + [ L[0] ] + qsort( [ ge for ge in L[1:] if ge.views >= L[0].views ] )\n\n\ndef index():\n sorts = ["newest", "views"]\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n if "sort" in request.vars.keys(): sort = request.vars["sort"]\n else: sort = \'newest\'\n if sort not in sorts:\n sort = "newest"\n if "profile" in request.vars.keys(): profile = request.vars["profile"]\n else: profile = None\n table = []\n raw_images = db().select(db.image.ALL)\n i = 0\n row = []\n count = 0\n images = []\n for image in raw_images:\n if profile != None:\n if image.creator == profile:\n images.append(image)\n else: images.append(image)\n if sort == \'views\':\n images = sort_by_views(images)\n images.reverse()\n if sort == \'newest\':\n images.sort(cmp=lambda x,y:cmp(x.id,y.id))\n images.reverse()\n for image in images: print image.views, image.id\n for image in images:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page, sort=sort, profile=profile)\n\ndef upload():\n form = SQLFORM(db.image, fields = [\'title\', \'file\', \'newimage\', \'description\'])\n if form.accepts(request.vars, session):\n session.new_image_title = form.vars.title\n db(db.image.title==session.new_image_title).update(creator = auth.user.username)\n db(db.image.title==session.new_image_title).update(views = 0)\n redirect(URL(r=request, f=\'index\')) \n return dict(form=form)\n\n\ndef image():\n images = db().select(db.image.ALL)\n image_id = int(request.vars["image"])\n for image in images:\n if image.id == image_id:\n real_image = image\n title=real_image.title\n if real_image == None:\n redirect(URL(r=request, f=\'index\'))\n if auth.is_logged_in():\n if auth.user.username != real_image.creator:\n views = int(real_image.views) + 1\n db(db.image.title==real_image.title).update(views = views)\n form = SQLFORM(db.comment, fields = [\'body\'])\n if form.accepts(request.vars, session):\n db(db.comment.id==form.vars.id).update(author = auth.user.username)\n db(db.comment.id==form.vars.id).update(image_id = real_image.id)\n comments=db().select(db.comment.ALL)\n image_comments = []\n for comment in comments:\n if comment.image_id == real_image.id:\n image_comments.append(comment)\n return dict(image = real_image, form= form,comments=image_comments)\n \n \ndef testimage():\n\treturn db(db.image.title=="hellotest")\n\ndef user(): \n return dict(form=auth())\n\ndef delete():\n images = db().select(db.image.ALL)\n title = request.vars["title"].replace(\'*\',\' \')\n for image in images:\n if image.title == title:\n real_image = image\n if auth.is_logged_in():\n if auth.user.username == real_image.creator:\n query=(db.image.id==real_image.id)\n db(query).delete()\n redirect(URL(r=request, f=\'index\')) \n \n \ndef download():\n return response.download(request, db)\n\nresponse._vars=response._caller(index)\n'
+p6
+sS'traceback'
+p7
+S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/applications/turtlesite/controllers/default.py", line 108, in <module>\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/gluon/globals.py", line 96, in <lambda>\n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/applications/turtlesite/controllers/default.py", line 30, in index\n images = sort_by_views(images)\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/applications/turtlesite/controllers/default.py", line 5, in sort_by_views\n return sort_by_views( [ lt for lt in L[1:] if lt.views < L[0].views ] ) + [ L[0] ] + qsort( [ ge for ge in L[1:] if ge.views >= L[0].views ] )\nNameError: global name \'qsort\' is not defined\n'
+p8
+s. \ No newline at end of file
diff --git a/languages/es-es.py b/languages/es-es.py
new file mode 100644
index 0000000..62ea53b
--- /dev/null
+++ b/languages/es-es.py
@@ -0,0 +1,248 @@
+# coding: utf8
+{
+'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"actualice" es una expresi\xc3\xb3n opcional como "campo1=\'nuevo_valor\'". No se puede actualizar o eliminar resultados de un JOIN',
+'%Y-%m-%d': '%Y-%m-%d',
+'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
+'%s rows deleted': '%s filas eliminadas',
+'%s rows updated': '%s filas actualizadas',
+'(something like "it-it")': '(algo como "it-it")',
+'A new version of web2py is available': 'Hay una nueva versi\xc3\xb3n de web2py disponible',
+'A new version of web2py is available: %s': 'Hay una nueva versi\xc3\xb3n de web2py disponible: %s',
+'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.': 'ATENCION: Inicio de sesi\xc3\xb3n requiere una conexi\xc3\xb3n segura (HTTPS) o localhost.',
+'ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.': 'ATENCION: NO EJECUTE VARIAS PRUEBAS SIMULTANEAMENTE, NO SON THREAD SAFE.',
+'ATTENTION: you cannot edit the running application!': 'ATENCION: no puede modificar la aplicaci\xc3\xb3n que se ejecuta!',
+'About': 'Acerca de',
+'About application': 'Acerca de la aplicaci\xc3\xb3n',
+'Admin is disabled because insecure channel': 'Admin deshabilitado, el canal no es seguro',
+'Admin is disabled because unsecure channel': 'Admin deshabilitado, el canal no es seguro',
+'Administrator Password:': 'Contrase\xc3\xb1a del Administrador:',
+'Are you sure you want to delete file "%s"?': '\xc2\xbfEst\xc3\xa1 seguro que desea eliminar el archivo "%s"?',
+'Are you sure you want to uninstall application "%s"': '\xc2\xbfEst\xc3\xa1 seguro que desea desinstalar la aplicaci\xc3\xb3n "%s"',
+'Are you sure you want to uninstall application "%s"?': '\xc2\xbfEst\xc3\xa1 seguro que desea desinstalar la aplicaci\xc3\xb3n "%s"?',
+'Authentication': 'Autenticaci\xc3\xb3n',
+'Available databases and tables': 'Bases de datos y tablas disponibles',
+'Cannot be empty': 'No puede estar vac\xc3\xado',
+'Cannot compile: there are errors in your app. Debug it, correct errors and try again.': 'No se puede compilar: hay errores en su aplicaci\xc3\xb3n. Depure, corrija errores y vuelva a intentarlo.',
+'Change Password': 'Cambie Contrase\xc3\xb1a',
+'Check to delete': 'Marque para eliminar',
+'Client IP': 'IP del Cliente',
+'Controller': 'Controlador',
+'Controllers': 'Controladores',
+'Copyright': 'Derechos de autor',
+'Create new application': 'Cree una nueva aplicaci\xc3\xb3n',
+'Current request': 'Solicitud en curso',
+'Current response': 'Respuesta en curso',
+'Current session': 'Sesi\xc3\xb3n en curso',
+'DB Model': 'Modelo "db"',
+'DESIGN': 'DISE\xc3\x91O',
+'Database': 'Base de datos',
+'Date and Time': 'Fecha y Hora',
+'Delete': 'Elimine',
+'Delete:': 'Elimine:',
+'Deploy on Google App Engine': 'Instale en Google App Engine',
+'Description': 'Descripci\xc3\xb3n',
+'Design for': 'Dise\xc3\xb1o para',
+'E-mail': 'Correo electr\xc3\xb3nico',
+'EDIT': 'EDITAR',
+'Edit': 'Editar',
+'Edit Profile': 'Editar Perfil',
+'Edit This App': 'Edite esta App',
+'Edit application': 'Editar aplicaci\xc3\xb3n',
+'Edit current record': 'Edite el registro actual',
+'Editing file': 'Editando archivo',
+'Editing file "%s"': 'Editando archivo "%s"',
+'Error logs for "%(app)s"': 'Bit\xc3\xa1cora de errores en "%(app)s"',
+'First name': 'Nombre',
+'Functions with no doctests will result in [passed] tests.': 'Funciones sin doctests equivalen a pruebas [aceptadas].',
+'Group ID': 'ID de Grupo',
+'Hello World': 'Hola Mundo',
+'Import/Export': 'Importar/Exportar',
+'Index': 'Indice',
+'Installed applications': 'Aplicaciones instaladas',
+'Internal State': 'Estado Interno',
+'Invalid Query': 'Consulta inv\xc3\xa1lida',
+'Invalid action': 'Acci\xc3\xb3n inv\xc3\xa1lida',
+'Invalid email': 'Correo inv\xc3\xa1lido',
+'Language files (static strings) updated': 'Archivos de lenguaje (cadenas est\xc3\xa1ticas) actualizados',
+'Languages': 'Lenguajes',
+'Last name': 'Apellido',
+'Last saved on:': 'Guardado en:',
+'Layout': 'Layout',
+'License for': 'Licencia para',
+'Login': 'Inicio de sesi\xc3\xb3n',
+'Login to the Administrative Interface': 'Inicio de sesi\xc3\xb3n para la Interfaz Administrativa',
+'Logout': 'Fin de sesi\xc3\xb3n',
+'Lost Password': 'Contrase\xc3\xb1a perdida',
+'Main Menu': 'Men\xc3\xba principal',
+'Menu Model': 'Modelo "menu"',
+'Models': 'Modelos',
+'Modules': 'M\xc3\xb3dulos',
+'NO': 'NO',
+'Name': 'Nombre',
+'New Record': 'Registro nuevo',
+'No databases in this application': 'No hay bases de datos en esta aplicaci\xc3\xb3n',
+'Origin': 'Origen',
+'Original/Translation': 'Original/Traducci\xc3\xb3n',
+'Password': 'Contrase\xc3\xb1a',
+'Peeking at file': 'Visualizando archivo',
+'Powered by': 'Este sitio usa',
+'Query:': 'Consulta:',
+'Record ID': 'ID de Registro',
+'Register': 'Registrese',
+'Registration key': 'Contrase\xc3\xb1a de Registro',
+'Resolve Conflict file': 'archivo Resoluci\xc3\xb3n de Conflicto',
+'Role': 'Rol',
+'Rows in table': 'Filas en la tabla',
+'Rows selected': 'Filas seleccionadas',
+'Saved file hash:': 'Hash del archivo guardado:',
+'Static files': 'Archivos est\xc3\xa1ticos',
+'Stylesheet': 'Hoja de estilo',
+'Sure you want to delete this object?': '\xc2\xbfEst\xc3\xa1 seguro que desea eliminar este objeto?',
+'Table name': 'Nombre de la tabla',
+'Testing application': 'Probando aplicaci\xc3\xb3n',
+'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': 'La "consulta" es una condici\xc3\xb3n como "db.tabla1.campo1==\'valor\'". Algo como "db.tabla1.campo1==db.tabla2.campo2" resulta en un JOIN SQL.',
+'There are no controllers': 'No hay controladores',
+'There are no models': 'No hay modelos',
+'There are no modules': 'No hay m\xc3\xb3dulos',
+'There are no static files': 'No hay archivos est\xc3\xa1ticos',
+'There are no translators, only default language is supported': 'No hay traductores, s\xc3\xb3lo el lenguaje por defecto es soportado',
+'There are no views': 'No hay vistas',
+'This is the %(filename)s template': 'Esta es la plantilla %(filename)s',
+'Ticket': 'Tiquete',
+'Timestamp': 'Timestamp',
+'Unable to check for upgrades': 'No es posible verificar la existencia de actualizaciones',
+'Unable to download': 'No es posible la descarga',
+'Unable to download app': 'No es posible descarga la aplicaci\xc3\xb3n',
+'Update:': 'Actualice:',
+'Upload existing application': 'Suba esta aplicaci\xc3\xb3n',
+'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Use (...)&(...) para AND, (...)|(...) para OR, y ~(...) para NOT, para crear consultas m\xc3\xa1s complejas.',
+'User ID': 'ID de Usuario',
+'View': 'Vista',
+'Views': 'Vistas',
+'Welcome %s': 'Welcome %s',
+'Welcome to web2py': 'Bienvenido a web2py',
+'YES': 'SI',
+'about': 'acerca de',
+'additional code for your application': 'c\xc3\xb3digo adicional para su aplicaci\xc3\xb3n',
+'admin disabled because no admin password': ' por falta de contrase\xc3\xb1a',
+'admin disabled because not supported on google apps engine': 'admin deshabilitado, no es soportado en GAE',
+'admin disabled because unable to access password file': 'admin deshabilitado, imposible acceder al archivo con la contrase\xc3\xb1a',
+'and rename it (required):': 'y renombrela (requerido):',
+'and rename it:': ' y renombrelo:',
+'appadmin': 'appadmin',
+'appadmin is disabled because insecure channel': 'admin deshabilitado, el canal no es seguro',
+'application "%s" uninstalled': 'aplicaci\xc3\xb3n "%s" desinstalada',
+'application compiled': 'aplicaci\xc3\xb3n compilada',
+'application is compiled and cannot be designed': 'la aplicaci\xc3\xb3n est\xc3\xa1 compilada y no puede ser modificada',
+'cache': 'cache',
+'cache, errors and sessions cleaned': 'cache, errores y sesiones eliminados',
+'cannot create file': 'no es posible crear archivo',
+'cannot upload file "%(filename)s"': 'no es posible subir archivo "%(filename)s"',
+'change password': 'change password',
+'check all': 'marcar todos',
+'clean': 'limpiar',
+'click here for online examples': 'haga clic aqu\xc3\xad para ver ejemplos en l\xc3\xadnea',
+'click here for the administrative interface': 'haga clic aqu\xc3\xad para usar la interfaz administrativa',
+'click to check for upgrades': 'haga clic para buscar actualizaciones',
+'compile': 'compilar',
+'compiled application removed': 'aplicaci\xc3\xb3n compilada removida',
+'controllers': 'controladores',
+'create file with filename:': 'cree archivo con nombre:',
+'create new application:': 'nombre de la nueva aplicaci\xc3\xb3n:',
+'crontab': 'crontab',
+'currently saved or': 'actualmente guardado o',
+'customize me!': 'Adaptame!',
+'data uploaded': 'datos subidos',
+'database': 'base de datos',
+'database %s select': 'selecci\xc3\xb3n en base de datos %s',
+'database administration': 'administraci\xc3\xb3n base de datos',
+'db': 'db',
+'defines tables': 'define tablas',
+'delete': 'eliminar',
+'delete all checked': 'eliminar marcados',
+'design': 'modificar',
+'done!': 'listo!',
+'edit': 'editar',
+'edit controller': 'editar controlador',
+'edit profile': 'edit profile',
+'errors': 'errores',
+'export as csv file': 'exportar como archivo CSV',
+'exposes': 'expone',
+'extends': 'extiende',
+'failed to reload module': 'recarga del m\xc3\xb3dulo ha fallado',
+'file "%(filename)s" created': 'archivo "%(filename)s" creado',
+'file "%(filename)s" deleted': 'archivo "%(filename)s" eliminado',
+'file "%(filename)s" uploaded': 'archivo "%(filename)s" subido',
+'file "%(filename)s" was not deleted': 'archivo "%(filename)s" no fu\xc3\xa9 eliminado',
+'file "%s" of %s restored': 'archivo "%s" de %s restaurado',
+'file changed on disk': 'archivo modificado en el disco',
+'file does not exist': 'archivo no existe',
+'file saved on %(time)s': 'archivo guardado %(time)s',
+'file saved on %s': 'archivo guardado %s',
+'help': 'ayuda',
+'htmledit': 'htmledit',
+'includes': 'incluye',
+'insert new': 'inserte nuevo',
+'insert new %s': 'inserte nuevo %s',
+'internal error': 'error interno',
+'invalid password': 'contrase\xc3\xb1a inv\xc3\xa1lida',
+'invalid request': 'solicitud inv\xc3\xa1lida',
+'invalid ticket': 'tiquete inv\xc3\xa1lido',
+'language file "%(filename)s" created/updated': 'archivo de lenguaje "%(filename)s" creado/actualizado',
+'languages': 'lenguajes',
+'languages updated': 'lenguajes actualizados',
+'loading...': 'cargando...',
+'login': 'inicio de sesi\xc3\xb3n',
+'logout': 'fin de sesi\xc3\xb3n',
+'merge': 'combinar',
+'models': 'modelos',
+'modules': 'm\xc3\xb3dulos',
+'new application "%s" created': 'nueva aplicaci\xc3\xb3n "%s" creada',
+'new record inserted': 'nuevo registro insertado',
+'next 100 rows': '100 filas siguientes',
+'or import from csv file': 'o importar desde archivo CSV',
+'or provide application url:': 'o provea URL de la aplicaci\xc3\xb3n:',
+'pack all': 'empaquetar todo',
+'pack compiled': 'empaquete compiladas',
+'previous 100 rows': '100 filas anteriores',
+'record': 'record',
+'record does not exist': 'el registro no existe',
+'record id': 'id de registro',
+'register': 'register',
+'remove compiled': 'eliminar compiladas',
+'restore': 'restaurar',
+'revert': 'revertir',
+'save': 'guardar',
+'selected': 'seleccionado(s)',
+'session expired': 'sesi\xc3\xb3n expirada',
+'shell': 'shell',
+'site': 'sitio',
+'some files could not be removed': 'algunos archivos no pudieron ser removidos',
+'state': 'estado',
+'static': 'est\xc3\xa1ticos',
+'table': 'tabla',
+'test': 'probar',
+'the application logic, each URL path is mapped in one exposed function in the controller': 'la l\xc3\xb3gica de la aplicaci\xc3\xb3n, cada ruta URL se mapea en una funci\xc3\xb3n expuesta en el controlador',
+'the data representation, define database tables and sets': 'la representaci\xc3\xb3n de datos, define tablas y conjuntos de base de datos',
+'the presentations layer, views are also known as templates': 'la capa de presentaci\xc3\xb3n, las vistas tambi\xc3\xa9n son llamadas plantillas',
+'these files are served without processing, your images go here': 'estos archivos son servidos sin procesar, sus im\xc3\xa1genes van aqu\xc3\xad',
+'to previous version.': 'a la versi\xc3\xb3n previa.',
+'translation strings for the application': 'cadenas de caracteres de traducci\xc3\xb3n para la aplicaci\xc3\xb3n',
+'try': 'intente',
+'try something like': 'intente algo como',
+'unable to create application "%s"': 'no es posible crear la aplicaci\xc3\xb3n "%s"',
+'unable to delete file "%(filename)s"': 'no es posible eliminar el archivo "%(filename)s"',
+'unable to parse csv file': 'no es posible analizar el archivo CSV',
+'unable to uninstall "%s"': 'no es posible instalar "%s"',
+'uncheck all': 'desmarcar todos',
+'uninstall': 'desinstalar',
+'update': 'actualizar',
+'update all languages': 'actualizar todos los lenguajes',
+'upload application:': 'subir aplicaci\xc3\xb3n:',
+'upload file:': 'suba archivo:',
+'versioning': 'versiones',
+'view': 'vista',
+'views': 'vistas',
+'web2py Recent Tweets': 'Tweets Recientes de web2py',
+'web2py is up to date': 'web2py est\xc3\xa1 actualizado',
+}
diff --git a/languages/fr-ca.py b/languages/fr-ca.py
new file mode 100644
index 0000000..459d438
--- /dev/null
+++ b/languages/fr-ca.py
@@ -0,0 +1,106 @@
+# coding: utf8
+{
+'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN',
+'%Y-%m-%d': '%Y-%m-%d',
+'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
+'%s rows deleted': '%s rang\xc3\xa9es effac\xc3\xa9es',
+'%s rows updated': '%s rang\xc3\xa9es mises \xc3\xa0 jour',
+'Authentication': 'Authentication',
+'Available databases and tables': 'Bases de donn\xc3\xa9es et des tableaux disponibles',
+'Cannot be empty': 'Ne peut pas \xc3\xaatre vide',
+'Check to delete': 'Cliquez pour supprimer',
+'Check to delete:': 'Cliquez pour supprimer:',
+'Client IP': 'IP client',
+'Controller': 'Contr\xc3\xb4leur',
+'Copyright': 'Copyright',
+'Current request': 'Demande actuelle',
+'Current response': 'R\xc3\xa9ponse actuelle',
+'Current session': 'Session en cours',
+'DB Model': 'Mod\xc3\xa8le DB',
+'Database': 'Base de donn\xc3\xa9es',
+'Delete:': 'Supprimer:',
+'Description': 'Description',
+'E-mail': 'Courriel',
+'Edit': '\xc3\x89diter',
+'Edit This App': 'Modifier cette application',
+'Edit current record': "Modifier l'enregistrement courant",
+'First name': 'Pr\xc3\xa9nom',
+'Function disabled': 'Function disabled',
+'Group ID': 'Groupe ID',
+'Hello World': 'Bonjour tout le monde',
+'Import/Export': 'Importer/Exporter',
+'Index': 'Index',
+'Internal State': '\xc3\x89tat interne',
+'Invalid Query': 'Requ\xc3\xaate Invalide',
+'Invalid email': 'Courriel invalide',
+'Last name': 'Nom',
+'Layout': 'Mise en page',
+'Login': 'Connectez-vous',
+'Lost Password': 'Mot de passe perdu',
+'Main Menu': 'Menu principal',
+'Menu Model': 'Menu mod\xc3\xa8le',
+'Name': 'Nom',
+'New Record': 'Nouvel enregistrement',
+'No databases in this application': "Cette application n'a pas de bases de donn\xc3\xa9es",
+'Origin': 'Origine',
+'Password': 'Mot de passe',
+"Password fields don't match": 'Les mots de passe ne correspondent pas',
+'Powered by': 'Powered par',
+'Query:': 'Requ\xc3\xaate:',
+'Record ID': 'Record ID',
+'Register': "S'inscrire",
+'Registration key': "Cl\xc3\xa9 d'enregistrement",
+'Remember me (for 30 days)': 'Se souvenir de moi (pendant 30 jours)',
+'Request reset password': 'Demande de r\xc3\xa9initialiser le mot cl\xc3\xa9',
+'Reset Password key': 'R\xc3\xa9initialiser le mot cl\xc3\xa9',
+'Role': 'R\xc3\xb4le',
+'Rows in table': 'Lignes du tableau',
+'Rows selected': 'Lignes s\xc3\xa9lectionn\xc3\xa9es',
+'Stylesheet': 'Feuille de style',
+'Submit': 'Soumettre',
+'Sure you want to delete this object?': 'Souhaitez-vous vraiment effacer cet objet ?',
+'Table name': 'Nom du tableau',
+'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': 'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.',
+'Timestamp': 'Timestamp',
+'Update:': 'Mise \xc3\xa0 jour:',
+'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.',
+'User %(id)s Logged-in': 'Utilisateur %(id)s connect\xc3\xa9',
+'User %(id)s Registered': 'Utilisateur %(id)s enregistr\xc3\xa9',
+'User ID': 'ID utilisateur',
+'Verify Password': 'V\xc3\xa9rifiez le mot de passe',
+'View': 'Pr\xc3\xa9sentation',
+'Welcome %s': 'Bienvenue %s',
+'Welcome to web2py': 'Bienvenue sur web2py',
+'appadmin is disabled because insecure channel': 'appadmin is disabled because insecure channel',
+'cache': 'cache',
+'change password': 'changer le mot de passe',
+'click here for online examples': 'cliquez ici pour voir des exemples enligne',
+'click here for the administrative interface': "cliquez ici pour aller\xc3\xa0 l'interface d'administration",
+'customize me!': 'me personnaliser!',
+'data uploaded': 'donn\xc3\xa9es t\xc3\xa9l\xc3\xa9charg\xc3\xa9es',
+'database': 'base de donn\xc3\xa9es',
+'database %s select': 'base de donn\xc3\xa9es %s s\xc3\xa9lectionner',
+'db': 'db',
+'design': 'design',
+'done!': 'fait!',
+'edit profile': 'modifier le profil',
+'export as csv file': 'exporter sous forme de fichier csv',
+'insert new': 'ins\xc3\xa9rer un nouveau',
+'insert new %s': 'ins\xc3\xa9rer un nouveau %s',
+'invalid request': 'demande non valide',
+'login': 'connectez-vous',
+'logout': 'd\xc3\xa9connectez-vous',
+'lost password': 'mot de passe perdu',
+'new record inserted': 'nouvel enregistrement ins\xc3\xa9r\xc3\xa9',
+'next 100 rows': '100 prochaines lignes',
+'or import from csv file': "ou importer d'un fichier CSV",
+'previous 100 rows': '100 lignes pr\xc3\xa9c\xc3\xa9dentes',
+'record': 'enregistrement',
+'record does not exist': "l'archive n'existe pas",
+'record id': "id d'enregistrement",
+'register': "s'inscrire",
+'selected': 's\xc3\xa9lectionn\xc3\xa9',
+'state': '\xc3\xa9tat',
+'table': 'tableau',
+'unable to parse csv file': "incapable d'analyser le fichier cvs",
+}
diff --git a/languages/fr-fr.py b/languages/fr-fr.py
new file mode 100644
index 0000000..6d6773a
--- /dev/null
+++ b/languages/fr-fr.py
@@ -0,0 +1,95 @@
+# coding: utf8
+{
+'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN',
+'%Y-%m-%d': '%Y-%m-%d',
+'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
+'%s rows deleted': '%s rang\xc3\xa9es effac\xc3\xa9es',
+'%s rows updated': '%s rang\xc3\xa9es mises \xc3\xa0 jour',
+'Authentication': 'Authentication',
+'Available databases and tables': 'Available databases and tables',
+'Cannot be empty': 'Cannot be empty',
+'Check to delete': 'Check to delete',
+'Client IP': 'Client IP',
+'Controller': 'Controller',
+'Copyright': 'Copyright',
+'Current request': 'Current request',
+'Current response': 'Current response',
+'Current session': 'Current session',
+'DB Model': 'DB Model',
+'Database': 'Database',
+'Delete:': 'Delete:',
+'Description': 'Description',
+'E-mail': 'E-mail',
+'Edit': 'Edit',
+'Edit This App': 'Edit This App',
+'Edit current record': 'Edit current record',
+'First name': 'First name',
+'Group ID': 'Group ID',
+'Hello World': 'Bonjour Monde',
+'Import/Export': 'Import/Export',
+'Index': 'Index',
+'Internal State': 'Internal State',
+'Invalid Query': 'Requ\xc3\xaate Invalide',
+'Invalid email': 'Invalid email',
+'Last name': 'Last name',
+'Layout': 'Layout',
+'Login': 'Login',
+'Lost Password': 'Lost Password',
+'Main Menu': 'Main Menu',
+'Menu Model': 'Menu Model',
+'Name': 'Name',
+'New Record': 'New Record',
+'No databases in this application': 'No databases in this application',
+'Origin': 'Origin',
+'Password': 'Password',
+'Powered by': 'Powered by',
+'Query:': 'Query:',
+'Record ID': 'Record ID',
+'Register': 'Register',
+'Registration key': 'Registration key',
+'Role': 'Role',
+'Rows in table': 'Rows in table',
+'Rows selected': 'Rows selected',
+'Stylesheet': 'Stylesheet',
+'Sure you want to delete this object?': 'Souhaitez vous vraiment effacercet objet?',
+'Table name': 'Table name',
+'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': 'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.',
+'Timestamp': 'Timestamp',
+'Update:': 'Update:',
+'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.',
+'User ID': 'User ID',
+'View': 'View',
+'Welcome %s': 'Welcome %s',
+'Welcome to web2py': 'Bienvenue sur web2py',
+'appadmin is disabled because insecure channel': 'appadmin is disabled because insecure channel',
+'cache': 'cache',
+'change password': 'change password',
+'click here for online examples': 'cliquez ici pour voir des exemples enligne',
+'click here for the administrative interface': "cliquez ici pour aller\xc3\xa0 l'interface d'administration",
+'customize me!': 'customize me!',
+'data uploaded': 'donn\xc3\xa9es t\xc3\xa9l\xc3\xa9charg\xc3\xa9es',
+'database': 'database',
+'database %s select': 'database %s select',
+'db': 'db',
+'design': 'design',
+'done!': 'fait!',
+'edit profile': 'edit profile',
+'export as csv file': 'export as csv file',
+'insert new': 'insert new',
+'insert new %s': 'insert new %s',
+'invalid request': 'requ\xc3\xaate invalide',
+'login': 'login',
+'logout': 'logout',
+'new record inserted': 'nouvelle archive ins\xc3\xa9r\xc3\xa9e',
+'next 100 rows': 'next 100 rows',
+'or import from csv file': 'or import from csv file',
+'previous 100 rows': 'previous 100 rows',
+'record': 'record',
+'record does not exist': "l'archive n'existe pas",
+'record id': 'record id',
+'register': 'register',
+'selected': 'selected',
+'state': '\xc3\xa9tat',
+'table': 'table',
+'unable to parse csv file': "incapable d'analyser le fichier cvs",
+}
diff --git a/languages/hi-hi.py b/languages/hi-hi.py
new file mode 100644
index 0000000..bf00509
--- /dev/null
+++ b/languages/hi-hi.py
@@ -0,0 +1,82 @@
+# coding: utf8
+{
+'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN',
+'%Y-%m-%d': '%Y-%m-%d',
+'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
+'%s rows deleted': '%s \xe0\xa4\xaa\xe0\xa4\x82\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xa4\xe0\xa4\xbf\xe0\xa4\xaf\xe0\xa4\xbe\xe0\xa4\x81 \xe0\xa4\xae\xe0\xa4\xbf\xe0\xa4\x9f\xe0\xa4\xbe\xe0\xa4\x8f\xe0\xa4\x81',
+'%s rows updated': '%s \xe0\xa4\xaa\xe0\xa4\x82\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xa4\xe0\xa4\xbf\xe0\xa4\xaf\xe0\xa4\xbe\xe0\xa4\x81 \xe0\xa4\x85\xe0\xa4\xa6\xe0\xa5\x8d\xe0\xa4\xaf\xe0\xa4\xa4\xe0\xa4\xa8',
+'Available databases and tables': '\xe0\xa4\x89\xe0\xa4\xaa\xe0\xa4\xb2\xe0\xa4\xac\xe0\xa5\x8d\xe0\xa4\xa7 \xe0\xa4\xa1\xe0\xa5\x87\xe0\xa4\x9f\xe0\xa4\xbe\xe0\xa4\xac\xe0\xa5\x87\xe0\xa4\xb8 \xe0\xa4\x94\xe0\xa4\xb0 \xe0\xa4\xa4\xe0\xa4\xbe\xe0\xa4\xb2\xe0\xa4\xbf\xe0\xa4\x95\xe0\xa4\xbe',
+'Cannot be empty': '\xe0\xa4\x96\xe0\xa4\xbe\xe0\xa4\xb2\xe0\xa5\x80 \xe0\xa4\xa8\xe0\xa4\xb9\xe0\xa5\x80\xe0\xa4\x82 \xe0\xa4\xb9\xe0\xa5\x8b \xe0\xa4\xb8\xe0\xa4\x95\xe0\xa4\xa4\xe0\xa4\xbe',
+'Change Password': '\xe0\xa4\xaa\xe0\xa4\xbe\xe0\xa4\xb8\xe0\xa4\xb5\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xa1 \xe0\xa4\xac\xe0\xa4\xa6\xe0\xa4\xb2\xe0\xa5\x87\xe0\xa4\x82',
+'Check to delete': '\xe0\xa4\xb9\xe0\xa4\x9f\xe0\xa4\xbe\xe0\xa4\xa8\xe0\xa5\x87 \xe0\xa4\x95\xe0\xa5\x87 \xe0\xa4\xb2\xe0\xa4\xbf\xe0\xa4\x8f \xe0\xa4\x9a\xe0\xa5\x81\xe0\xa4\xa8\xe0\xa5\x87\xe0\xa4\x82',
+'Controller': 'Controller',
+'Copyright': 'Copyright',
+'Current request': '\xe0\xa4\xb5\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xa4\xe0\xa4\xae\xe0\xa4\xbe\xe0\xa4\xa8 \xe0\xa4\x85\xe0\xa4\xa8\xe0\xa5\x81\xe0\xa4\xb0\xe0\xa5\x8b\xe0\xa4\xa7',
+'Current response': '\xe0\xa4\xb5\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xa4\xe0\xa4\xae\xe0\xa4\xbe\xe0\xa4\xa8 \xe0\xa4\xaa\xe0\xa5\x8d\xe0\xa4\xb0\xe0\xa4\xa4\xe0\xa4\xbf\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xb0\xe0\xa4\xbf\xe0\xa4\xaf\xe0\xa4\xbe',
+'Current session': '\xe0\xa4\xb5\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xa4\xe0\xa4\xae\xe0\xa4\xbe\xe0\xa4\xa8 \xe0\xa4\xb8\xe0\xa5\x87\xe0\xa4\xb6\xe0\xa4\xa8',
+'DB Model': 'DB Model',
+'Database': 'Database',
+'Delete:': '\xe0\xa4\xae\xe0\xa4\xbf\xe0\xa4\x9f\xe0\xa4\xbe\xe0\xa4\xa8\xe0\xa4\xbe:',
+'Edit': 'Edit',
+'Edit Profile': '\xe0\xa4\xaa\xe0\xa5\x8d\xe0\xa4\xb0\xe0\xa5\x8b\xe0\xa4\xab\xe0\xa4\xbc\xe0\xa4\xbe\xe0\xa4\x87\xe0\xa4\xb2 \xe0\xa4\xb8\xe0\xa4\x82\xe0\xa4\xaa\xe0\xa4\xbe\xe0\xa4\xa6\xe0\xa4\xbf\xe0\xa4\xa4 \xe0\xa4\x95\xe0\xa4\xb0\xe0\xa5\x87\xe0\xa4\x82',
+'Edit This App': 'Edit This App',
+'Edit current record': '\xe0\xa4\xb5\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xa4\xe0\xa4\xae\xe0\xa4\xbe\xe0\xa4\xa8 \xe0\xa4\xb0\xe0\xa5\x87\xe0\xa4\x95\xe0\xa5\x89\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xa1 \xe0\xa4\xb8\xe0\xa4\x82\xe0\xa4\xaa\xe0\xa4\xbe\xe0\xa4\xa6\xe0\xa4\xbf\xe0\xa4\xa4 \xe0\xa4\x95\xe0\xa4\xb0\xe0\xa5\x87\xe0\xa4\x82 ',
+'Hello World': 'Hello World',
+'Hello from MyApp': 'Hello from MyApp',
+'Import/Export': '\xe0\xa4\x86\xe0\xa4\xaf\xe0\xa4\xbe\xe0\xa4\xa4 / \xe0\xa4\xa8\xe0\xa4\xbf\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xaf\xe0\xa4\xbe\xe0\xa4\xa4',
+'Index': 'Index',
+'Internal State': '\xe0\xa4\x86\xe0\xa4\x82\xe0\xa4\xa4\xe0\xa4\xb0\xe0\xa4\xbf\xe0\xa4\x95 \xe0\xa4\xb8\xe0\xa5\x8d\xe0\xa4\xa5\xe0\xa4\xbf\xe0\xa4\xa4\xe0\xa4\xbf',
+'Invalid Query': '\xe0\xa4\x85\xe0\xa4\xae\xe0\xa4\xbe\xe0\xa4\xa8\xe0\xa5\x8d\xe0\xa4\xaf \xe0\xa4\xaa\xe0\xa5\x8d\xe0\xa4\xb0\xe0\xa4\xb6\xe0\xa5\x8d\xe0\xa4\xa8',
+'Layout': 'Layout',
+'Login': '\xe0\xa4\xb2\xe0\xa5\x89\xe0\xa4\x97 \xe0\xa4\x87\xe0\xa4\xa8',
+'Logout': '\xe0\xa4\xb2\xe0\xa5\x89\xe0\xa4\x97 \xe0\xa4\x86\xe0\xa4\x89\xe0\xa4\x9f',
+'Lost Password': '\xe0\xa4\xaa\xe0\xa4\xbe\xe0\xa4\xb8\xe0\xa4\xb5\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xa1 \xe0\xa4\x96\xe0\xa5\x8b \xe0\xa4\x97\xe0\xa4\xaf\xe0\xa4\xbe',
+'Main Menu': 'Main Menu',
+'Menu Model': 'Menu Model',
+'New Record': '\xe0\xa4\xa8\xe0\xa4\xaf\xe0\xa4\xbe \xe0\xa4\xb0\xe0\xa5\x87\xe0\xa4\x95\xe0\xa5\x89\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xa1',
+'No databases in this application': '\xe0\xa4\x87\xe0\xa4\xb8 \xe0\xa4\x85\xe0\xa4\xa8\xe0\xa5\x81\xe0\xa4\xaa\xe0\xa5\x8d\xe0\xa4\xb0\xe0\xa4\xaf\xe0\xa5\x8b\xe0\xa4\x97 \xe0\xa4\xae\xe0\xa5\x87\xe0\xa4\x82 \xe0\xa4\x95\xe0\xa5\x8b\xe0\xa4\x88 \xe0\xa4\xa1\xe0\xa5\x87\xe0\xa4\x9f\xe0\xa4\xbe\xe0\xa4\xac\xe0\xa5\x87\xe0\xa4\xb8 \xe0\xa4\xa8\xe0\xa4\xb9\xe0\xa5\x80\xe0\xa4\x82 \xe0\xa4\xb9\xe0\xa5\x88\xe0\xa4\x82',
+'Powered by': 'Powered by',
+'Query:': '\xe0\xa4\xaa\xe0\xa5\x8d\xe0\xa4\xb0\xe0\xa4\xb6\xe0\xa5\x8d\xe0\xa4\xa8:',
+'Register': '\xe0\xa4\xaa\xe0\xa4\x82\xe0\xa4\x9c\xe0\xa5\x80\xe0\xa4\x95\xe0\xa5\x83\xe0\xa4\xa4 (\xe0\xa4\xb0\xe0\xa4\x9c\xe0\xa4\xbf\xe0\xa4\xb8\xe0\xa5\x8d\xe0\xa4\x9f\xe0\xa4\xb0) \xe0\xa4\x95\xe0\xa4\xb0\xe0\xa4\xa8\xe0\xa4\xbe ',
+'Rows in table': '\xe0\xa4\xa4\xe0\xa4\xbe\xe0\xa4\xb2\xe0\xa4\xbf\xe0\xa4\x95\xe0\xa4\xbe \xe0\xa4\xae\xe0\xa5\x87\xe0\xa4\x82 \xe0\xa4\xaa\xe0\xa4\x82\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xa4\xe0\xa4\xbf\xe0\xa4\xaf\xe0\xa4\xbe\xe0\xa4\x81 ',
+'Rows selected': '\xe0\xa4\x9a\xe0\xa4\xaf\xe0\xa4\xa8\xe0\xa4\xbf\xe0\xa4\xa4 (\xe0\xa4\x9a\xe0\xa5\x81\xe0\xa4\xa8\xe0\xa5\x87 \xe0\xa4\x97\xe0\xa4\xaf\xe0\xa5\x87) \xe0\xa4\xaa\xe0\xa4\x82\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xa4\xe0\xa4\xbf\xe0\xa4\xaf\xe0\xa4\xbe\xe0\xa4\x81 ',
+'Stylesheet': 'Stylesheet',
+'Sure you want to delete this object?': '\xe0\xa4\xb8\xe0\xa5\x81\xe0\xa4\xa8\xe0\xa4\xbf\xe0\xa4\xb6\xe0\xa5\x8d\xe0\xa4\x9a\xe0\xa4\xbf\xe0\xa4\xa4 \xe0\xa4\xb9\xe0\xa5\x88\xe0\xa4\x82 \xe0\xa4\x95\xe0\xa4\xbf \xe0\xa4\x86\xe0\xa4\xaa \xe0\xa4\x87\xe0\xa4\xb8 \xe0\xa4\xb5\xe0\xa4\xb8\xe0\xa5\x8d\xe0\xa4\xa4\xe0\xa5\x81 \xe0\xa4\x95\xe0\xa5\x8b \xe0\xa4\xb9\xe0\xa4\x9f\xe0\xa4\xbe\xe0\xa4\xa8\xe0\xa4\xbe \xe0\xa4\x9a\xe0\xa4\xbe\xe0\xa4\xb9\xe0\xa4\xa4\xe0\xa5\x87 \xe0\xa4\xb9\xe0\xa5\x88\xe0\xa4\x82?',
+'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': 'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.',
+'Update:': '\xe0\xa4\x85\xe0\xa4\xa6\xe0\xa5\x8d\xe0\xa4\xaf\xe0\xa4\xa4\xe0\xa4\xa8 \xe0\xa4\x95\xe0\xa4\xb0\xe0\xa4\xa8\xe0\xa4\xbe:',
+'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.',
+'View': 'View',
+'Welcome %s': 'Welcome %s',
+'Welcome to web2py': '\xe0\xa4\xb5\xe0\xa5\x87\xe0\xa4\xac\xe0\xa5\xa8\xe0\xa4\xaa\xe0\xa4\xbe\xe0\xa4\x87 (web2py) \xe0\xa4\xae\xe0\xa5\x87\xe0\xa4\x82 \xe0\xa4\x86\xe0\xa4\xaa\xe0\xa4\x95\xe0\xa4\xbe \xe0\xa4\xb8\xe0\xa5\x8d\xe0\xa4\xb5\xe0\xa4\xbe\xe0\xa4\x97\xe0\xa4\xa4 \xe0\xa4\xb9\xe0\xa5\x88',
+'appadmin is disabled because insecure channel': '\xe0\xa4\x85\xe0\xa4\xaa \xe0\xa4\x86\xe0\xa4\xa1\xe0\xa4\xae\xe0\xa4\xbf\xe0\xa4\xa8 (appadmin) \xe0\xa4\x85\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xb7\xe0\xa4\xae \xe0\xa4\xb9\xe0\xa5\x88 \xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xaf\xe0\xa5\x8b\xe0\xa4\x82\xe0\xa4\x95\xe0\xa4\xbf \xe0\xa4\x85\xe0\xa4\xb8\xe0\xa5\x81\xe0\xa4\xb0\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xb7\xe0\xa4\xbf\xe0\xa4\xa4 \xe0\xa4\x9a\xe0\xa5\x88\xe0\xa4\xa8\xe0\xa4\xb2',
+'cache': 'cache',
+'change password': 'change password',
+'click here for online examples': '\xe0\xa4\x91\xe0\xa4\xa8\xe0\xa4\xb2\xe0\xa4\xbe\xe0\xa4\x87\xe0\xa4\xa8 \xe0\xa4\x89\xe0\xa4\xa6\xe0\xa4\xbe\xe0\xa4\xb9\xe0\xa4\xb0\xe0\xa4\xa3 \xe0\xa4\x95\xe0\xa5\x87 \xe0\xa4\xb2\xe0\xa4\xbf\xe0\xa4\x8f \xe0\xa4\xaf\xe0\xa4\xb9\xe0\xa4\xbe\xe0\xa4\x81 \xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xb2\xe0\xa4\xbf\xe0\xa4\x95 \xe0\xa4\x95\xe0\xa4\xb0\xe0\xa5\x87\xe0\xa4\x82',
+'click here for the administrative interface': '\xe0\xa4\xaa\xe0\xa5\x8d\xe0\xa4\xb0\xe0\xa4\xb6\xe0\xa4\xbe\xe0\xa4\xb8\xe0\xa4\xa8\xe0\xa4\xbf\xe0\xa4\x95 \xe0\xa4\x87\xe0\xa4\x82\xe0\xa4\x9f\xe0\xa4\xb0\xe0\xa4\xab\xe0\xa5\x87\xe0\xa4\xb8 \xe0\xa4\x95\xe0\xa5\x87 \xe0\xa4\xb2\xe0\xa4\xbf\xe0\xa4\x8f \xe0\xa4\xaf\xe0\xa4\xb9\xe0\xa4\xbe\xe0\xa4\x81 \xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xb2\xe0\xa4\xbf\xe0\xa4\x95 \xe0\xa4\x95\xe0\xa4\xb0\xe0\xa5\x87\xe0\xa4\x82',
+'customize me!': '\xe0\xa4\xae\xe0\xa5\x81\xe0\xa4\x9d\xe0\xa5\x87 \xe0\xa4\x85\xe0\xa4\xa8\xe0\xa5\x81\xe0\xa4\x95\xe0\xa5\x82\xe0\xa4\xb2\xe0\xa4\xbf\xe0\xa4\xa4 (\xe0\xa4\x95\xe0\xa4\xb8\xe0\xa5\x8d\xe0\xa4\x9f\xe0\xa4\xae\xe0\xa4\xbe\xe0\xa4\x87\xe0\xa4\x9c\xe0\xa4\xbc) \xe0\xa4\x95\xe0\xa4\xb0\xe0\xa5\x87\xe0\xa4\x82!',
+'data uploaded': '\xe0\xa4\xa1\xe0\xa4\xbe\xe0\xa4\x9f\xe0\xa4\xbe \xe0\xa4\x85\xe0\xa4\xaa\xe0\xa4\xb2\xe0\xa5\x8b\xe0\xa4\xa1 \xe0\xa4\xb8\xe0\xa4\xae\xe0\xa5\x8d\xe0\xa4\xaa\xe0\xa4\xa8\xe0\xa5\x8d\xe0\xa4\xa8 ',
+'database': '\xe0\xa4\xa1\xe0\xa5\x87\xe0\xa4\x9f\xe0\xa4\xbe\xe0\xa4\xac\xe0\xa5\x87\xe0\xa4\xb8',
+'database %s select': '\xe0\xa4\xa1\xe0\xa5\x87\xe0\xa4\x9f\xe0\xa4\xbe\xe0\xa4\xac\xe0\xa5\x87\xe0\xa4\xb8 %s \xe0\xa4\x9a\xe0\xa5\x81\xe0\xa4\xa8\xe0\xa5\x80 \xe0\xa4\xb9\xe0\xa5\x81\xe0\xa4\x88',
+'db': 'db',
+'design': '\xe0\xa4\xb0\xe0\xa4\x9a\xe0\xa4\xa8\xe0\xa4\xbe \xe0\xa4\x95\xe0\xa4\xb0\xe0\xa5\x87\xe0\xa4\x82',
+'done!': '\xe0\xa4\xb9\xe0\xa5\x8b \xe0\xa4\x97\xe0\xa4\xaf\xe0\xa4\xbe!',
+'edit profile': 'edit profile',
+'export as csv file': 'csv \xe0\xa4\xab\xe0\xa4\xbc\xe0\xa4\xbe\xe0\xa4\x87\xe0\xa4\xb2 \xe0\xa4\x95\xe0\xa5\x87 \xe0\xa4\xb0\xe0\xa5\x82\xe0\xa4\xaa \xe0\xa4\xae\xe0\xa5\x87\xe0\xa4\x82 \xe0\xa4\xa8\xe0\xa4\xbf\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xaf\xe0\xa4\xbe\xe0\xa4\xa4',
+'insert new': '\xe0\xa4\xa8\xe0\xa4\xaf\xe0\xa4\xbe \xe0\xa4\xa1\xe0\xa4\xbe\xe0\xa4\xb2\xe0\xa5\x87\xe0\xa4\x82',
+'insert new %s': '\xe0\xa4\xa8\xe0\xa4\xaf\xe0\xa4\xbe %s \xe0\xa4\xa1\xe0\xa4\xbe\xe0\xa4\xb2\xe0\xa5\x87\xe0\xa4\x82',
+'invalid request': '\xe0\xa4\x85\xe0\xa4\xb5\xe0\xa5\x88\xe0\xa4\xa7 \xe0\xa4\x85\xe0\xa4\xa8\xe0\xa5\x81\xe0\xa4\xb0\xe0\xa5\x8b\xe0\xa4\xa7',
+'login': 'login',
+'logout': 'logout',
+'new record inserted': '\xe0\xa4\xa8\xe0\xa4\xaf\xe0\xa4\xbe \xe0\xa4\xb0\xe0\xa5\x87\xe0\xa4\x95\xe0\xa5\x89\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xa1 \xe0\xa4\xa1\xe0\xa4\xbe\xe0\xa4\xb2\xe0\xa4\xbe',
+'next 100 rows': '\xe0\xa4\x85\xe0\xa4\x97\xe0\xa4\xb2\xe0\xa5\x87 100 \xe0\xa4\xaa\xe0\xa4\x82\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xa4\xe0\xa4\xbf\xe0\xa4\xaf\xe0\xa4\xbe\xe0\xa4\x81',
+'or import from csv file': '\xe0\xa4\xaf\xe0\xa4\xbe csv \xe0\xa4\xab\xe0\xa4\xbc\xe0\xa4\xbe\xe0\xa4\x87\xe0\xa4\xb2 \xe0\xa4\xb8\xe0\xa5\x87 \xe0\xa4\x86\xe0\xa4\xaf\xe0\xa4\xbe\xe0\xa4\xa4',
+'previous 100 rows': '\xe0\xa4\xaa\xe0\xa4\xbf\xe0\xa4\x9b\xe0\xa4\xb2\xe0\xa5\x87 100 \xe0\xa4\xaa\xe0\xa4\x82\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xa4\xe0\xa4\xbf\xe0\xa4\xaf\xe0\xa4\xbe\xe0\xa4\x81',
+'record': 'record',
+'record does not exist': '\xe0\xa4\xb0\xe0\xa4\xbf\xe0\xa4\x95\xe0\xa5\x89\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xa1 \xe0\xa4\xae\xe0\xa5\x8c\xe0\xa4\x9c\xe0\xa5\x82\xe0\xa4\xa6 \xe0\xa4\xa8\xe0\xa4\xb9\xe0\xa5\x80\xe0\xa4\x82 \xe0\xa4\xb9\xe0\xa5\x88',
+'record id': '\xe0\xa4\xb0\xe0\xa4\xbf\xe0\xa4\x95\xe0\xa5\x89\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xa1 \xe0\xa4\xaa\xe0\xa4\xb9\xe0\xa4\x9a\xe0\xa4\xbe\xe0\xa4\xa8\xe0\xa4\x95\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xa4\xe0\xa4\xbe (\xe0\xa4\x86\xe0\xa4\x88\xe0\xa4\xa1\xe0\xa5\x80)',
+'register': 'register',
+'selected': '\xe0\xa4\x9a\xe0\xa5\x81\xe0\xa4\xa8\xe0\xa4\xbe \xe0\xa4\xb9\xe0\xa5\x81\xe0\xa4\x86',
+'state': '\xe0\xa4\xb8\xe0\xa5\x8d\xe0\xa4\xa5\xe0\xa4\xbf\xe0\xa4\xa4\xe0\xa4\xbf',
+'table': '\xe0\xa4\xa4\xe0\xa4\xbe\xe0\xa4\xb2\xe0\xa4\xbf\xe0\xa4\x95\xe0\xa4\xbe',
+'unable to parse csv file': 'csv \xe0\xa4\xab\xe0\xa4\xbc\xe0\xa4\xbe\xe0\xa4\x87\xe0\xa4\xb2 \xe0\xa4\xaa\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xb8 \xe0\xa4\x95\xe0\xa4\xb0\xe0\xa4\xa8\xe0\xa5\x87 \xe0\xa4\xae\xe0\xa5\x87\xe0\xa4\x82 \xe0\xa4\x85\xe0\xa4\xb8\xe0\xa4\xae\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xa5',
+}
diff --git a/languages/hu-hu.py b/languages/hu-hu.py
new file mode 100644
index 0000000..bbeb991
--- /dev/null
+++ b/languages/hu-hu.py
@@ -0,0 +1,93 @@
+# coding: utf8
+{
+'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN',
+'%Y-%m-%d': '%Y.%m.%d.',
+'%Y-%m-%d %H:%M:%S': '%Y.%m.%d. %H:%M:%S',
+'%s rows deleted': '%s sorok t\xc3\xb6rl\xc5\x91dtek',
+'%s rows updated': '%s sorok friss\xc3\xadt\xc5\x91dtek',
+'Available databases and tables': 'El\xc3\xa9rhet\xc5\x91 adatb\xc3\xa1zisok \xc3\xa9s t\xc3\xa1bl\xc3\xa1k',
+'Cannot be empty': 'Nem lehet \xc3\xbcres',
+'Check to delete': 'T\xc3\xb6rl\xc3\xa9shez v\xc3\xa1laszd ki',
+'Client IP': 'Client IP',
+'Controller': 'Controller',
+'Copyright': 'Copyright',
+'Current request': 'Jelenlegi lek\xc3\xa9rdez\xc3\xa9s',
+'Current response': 'Jelenlegi v\xc3\xa1lasz',
+'Current session': 'Jelenlegi folyamat',
+'DB Model': 'DB Model',
+'Database': 'Adatb\xc3\xa1zis',
+'Delete:': 'T\xc3\xb6r\xc3\xb6l:',
+'Description': 'Description',
+'E-mail': 'E-mail',
+'Edit': 'Szerkeszt',
+'Edit This App': 'Alkalmaz\xc3\xa1st szerkeszt',
+'Edit current record': 'Aktu\xc3\xa1lis bejegyz\xc3\xa9s szerkeszt\xc3\xa9se',
+'First name': 'First name',
+'Group ID': 'Group ID',
+'Hello World': 'Hello Vil\xc3\xa1g',
+'Import/Export': 'Import/Export',
+'Index': 'Index',
+'Internal State': 'Internal State',
+'Invalid Query': 'Hib\xc3\xa1s lek\xc3\xa9rdez\xc3\xa9s',
+'Invalid email': 'Invalid email',
+'Last name': 'Last name',
+'Layout': 'Szerkezet',
+'Main Menu': 'F\xc5\x91men\xc3\xbc',
+'Menu Model': 'Men\xc3\xbc model',
+'Name': 'Name',
+'New Record': '\xc3\x9aj bejegyz\xc3\xa9s',
+'No databases in this application': 'Nincs adatb\xc3\xa1zis ebben az alkalmaz\xc3\xa1sban',
+'Origin': 'Origin',
+'Password': 'Password',
+'Powered by': 'Powered by',
+'Query:': 'Lek\xc3\xa9rdez\xc3\xa9s:',
+'Record ID': 'Record ID',
+'Registration key': 'Registration key',
+'Reset Password key': 'Reset Password key',
+'Role': 'Role',
+'Rows in table': 'Sorok a t\xc3\xa1bl\xc3\xa1ban',
+'Rows selected': 'Kiv\xc3\xa1lasztott sorok',
+'Stylesheet': 'Stylesheet',
+'Sure you want to delete this object?': 'Biztos t\xc3\xb6rli ezt az objektumot?',
+'Table name': 'Table name',
+'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': 'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.',
+'Timestamp': 'Timestamp',
+'Update:': 'Friss\xc3\xadt:',
+'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.',
+'User ID': 'User ID',
+'View': 'N\xc3\xa9zet',
+'Welcome %s': 'Welcome %s',
+'Welcome to web2py': 'Isten hozott a web2py-ban',
+'appadmin is disabled because insecure channel': 'az appadmin a biztons\xc3\xa1gtalan csatorna miatt letiltva',
+'cache': 'gyors\xc3\xadt\xc3\xb3t\xc3\xa1r',
+'change password': 'jelsz\xc3\xb3 megv\xc3\xa1ltoztat\xc3\xa1sa',
+'click here for online examples': 'online p\xc3\xa9ld\xc3\xa1k\xc3\xa9rt kattints ide',
+'click here for the administrative interface': 'az adminisztr\xc3\xa1ci\xc3\xb3s fel\xc3\xbclet\xc3\xa9rt kattints ide',
+'customize me!': 'v\xc3\xa1ltoztass meg!',
+'data uploaded': 'adat felt\xc3\xb6ltve',
+'database': 'adatb\xc3\xa1zis',
+'database %s select': 'adatb\xc3\xa1zis %s kiv\xc3\xa1laszt\xc3\xa1s',
+'db': 'db',
+'design': 'design',
+'done!': 'k\xc3\xa9sz!',
+'edit profile': 'profil szerkeszt\xc3\xa9se',
+'export as csv file': 'export\xc3\xa1l csv f\xc3\xa1jlba',
+'insert new': '\xc3\xbaj beilleszt\xc3\xa9se',
+'insert new %s': '\xc3\xbaj beilleszt\xc3\xa9se %s',
+'invalid request': 'hib\xc3\xa1s k\xc3\xa9r\xc3\xa9s',
+'login': 'bel\xc3\xa9p',
+'logout': 'kil\xc3\xa9p',
+'lost password': 'elveszett jelsz\xc3\xb3',
+'new record inserted': '\xc3\xbaj bejegyz\xc3\xa9s felv\xc3\xa9ve',
+'next 100 rows': 'k\xc3\xb6vetkez\xc5\x91 100 sor',
+'or import from csv file': 'vagy bet\xc3\xb6lt\xc3\xa9s csv f\xc3\xa1jlb\xc3\xb3l',
+'previous 100 rows': 'el\xc5\x91z\xc5\x91 100 sor',
+'record': 'bejegyz\xc3\xa9s',
+'record does not exist': 'bejegyz\xc3\xa9s nem l\xc3\xa9tezik',
+'record id': 'bejegyz\xc3\xa9s id',
+'register': 'regisztr\xc3\xa1ci\xc3\xb3',
+'selected': 'kiv\xc3\xa1lasztott',
+'state': '\xc3\xa1llapot',
+'table': 't\xc3\xa1bla',
+'unable to parse csv file': 'nem lehet a csv f\xc3\xa1jlt beolvasni',
+}
diff --git a/languages/hu.py b/languages/hu.py
new file mode 100644
index 0000000..bbeb991
--- /dev/null
+++ b/languages/hu.py
@@ -0,0 +1,93 @@
+# coding: utf8
+{
+'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN',
+'%Y-%m-%d': '%Y.%m.%d.',
+'%Y-%m-%d %H:%M:%S': '%Y.%m.%d. %H:%M:%S',
+'%s rows deleted': '%s sorok t\xc3\xb6rl\xc5\x91dtek',
+'%s rows updated': '%s sorok friss\xc3\xadt\xc5\x91dtek',
+'Available databases and tables': 'El\xc3\xa9rhet\xc5\x91 adatb\xc3\xa1zisok \xc3\xa9s t\xc3\xa1bl\xc3\xa1k',
+'Cannot be empty': 'Nem lehet \xc3\xbcres',
+'Check to delete': 'T\xc3\xb6rl\xc3\xa9shez v\xc3\xa1laszd ki',
+'Client IP': 'Client IP',
+'Controller': 'Controller',
+'Copyright': 'Copyright',
+'Current request': 'Jelenlegi lek\xc3\xa9rdez\xc3\xa9s',
+'Current response': 'Jelenlegi v\xc3\xa1lasz',
+'Current session': 'Jelenlegi folyamat',
+'DB Model': 'DB Model',
+'Database': 'Adatb\xc3\xa1zis',
+'Delete:': 'T\xc3\xb6r\xc3\xb6l:',
+'Description': 'Description',
+'E-mail': 'E-mail',
+'Edit': 'Szerkeszt',
+'Edit This App': 'Alkalmaz\xc3\xa1st szerkeszt',
+'Edit current record': 'Aktu\xc3\xa1lis bejegyz\xc3\xa9s szerkeszt\xc3\xa9se',
+'First name': 'First name',
+'Group ID': 'Group ID',
+'Hello World': 'Hello Vil\xc3\xa1g',
+'Import/Export': 'Import/Export',
+'Index': 'Index',
+'Internal State': 'Internal State',
+'Invalid Query': 'Hib\xc3\xa1s lek\xc3\xa9rdez\xc3\xa9s',
+'Invalid email': 'Invalid email',
+'Last name': 'Last name',
+'Layout': 'Szerkezet',
+'Main Menu': 'F\xc5\x91men\xc3\xbc',
+'Menu Model': 'Men\xc3\xbc model',
+'Name': 'Name',
+'New Record': '\xc3\x9aj bejegyz\xc3\xa9s',
+'No databases in this application': 'Nincs adatb\xc3\xa1zis ebben az alkalmaz\xc3\xa1sban',
+'Origin': 'Origin',
+'Password': 'Password',
+'Powered by': 'Powered by',
+'Query:': 'Lek\xc3\xa9rdez\xc3\xa9s:',
+'Record ID': 'Record ID',
+'Registration key': 'Registration key',
+'Reset Password key': 'Reset Password key',
+'Role': 'Role',
+'Rows in table': 'Sorok a t\xc3\xa1bl\xc3\xa1ban',
+'Rows selected': 'Kiv\xc3\xa1lasztott sorok',
+'Stylesheet': 'Stylesheet',
+'Sure you want to delete this object?': 'Biztos t\xc3\xb6rli ezt az objektumot?',
+'Table name': 'Table name',
+'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': 'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.',
+'Timestamp': 'Timestamp',
+'Update:': 'Friss\xc3\xadt:',
+'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.',
+'User ID': 'User ID',
+'View': 'N\xc3\xa9zet',
+'Welcome %s': 'Welcome %s',
+'Welcome to web2py': 'Isten hozott a web2py-ban',
+'appadmin is disabled because insecure channel': 'az appadmin a biztons\xc3\xa1gtalan csatorna miatt letiltva',
+'cache': 'gyors\xc3\xadt\xc3\xb3t\xc3\xa1r',
+'change password': 'jelsz\xc3\xb3 megv\xc3\xa1ltoztat\xc3\xa1sa',
+'click here for online examples': 'online p\xc3\xa9ld\xc3\xa1k\xc3\xa9rt kattints ide',
+'click here for the administrative interface': 'az adminisztr\xc3\xa1ci\xc3\xb3s fel\xc3\xbclet\xc3\xa9rt kattints ide',
+'customize me!': 'v\xc3\xa1ltoztass meg!',
+'data uploaded': 'adat felt\xc3\xb6ltve',
+'database': 'adatb\xc3\xa1zis',
+'database %s select': 'adatb\xc3\xa1zis %s kiv\xc3\xa1laszt\xc3\xa1s',
+'db': 'db',
+'design': 'design',
+'done!': 'k\xc3\xa9sz!',
+'edit profile': 'profil szerkeszt\xc3\xa9se',
+'export as csv file': 'export\xc3\xa1l csv f\xc3\xa1jlba',
+'insert new': '\xc3\xbaj beilleszt\xc3\xa9se',
+'insert new %s': '\xc3\xbaj beilleszt\xc3\xa9se %s',
+'invalid request': 'hib\xc3\xa1s k\xc3\xa9r\xc3\xa9s',
+'login': 'bel\xc3\xa9p',
+'logout': 'kil\xc3\xa9p',
+'lost password': 'elveszett jelsz\xc3\xb3',
+'new record inserted': '\xc3\xbaj bejegyz\xc3\xa9s felv\xc3\xa9ve',
+'next 100 rows': 'k\xc3\xb6vetkez\xc5\x91 100 sor',
+'or import from csv file': 'vagy bet\xc3\xb6lt\xc3\xa9s csv f\xc3\xa1jlb\xc3\xb3l',
+'previous 100 rows': 'el\xc5\x91z\xc5\x91 100 sor',
+'record': 'bejegyz\xc3\xa9s',
+'record does not exist': 'bejegyz\xc3\xa9s nem l\xc3\xa9tezik',
+'record id': 'bejegyz\xc3\xa9s id',
+'register': 'regisztr\xc3\xa1ci\xc3\xb3',
+'selected': 'kiv\xc3\xa1lasztott',
+'state': '\xc3\xa1llapot',
+'table': 't\xc3\xa1bla',
+'unable to parse csv file': 'nem lehet a csv f\xc3\xa1jlt beolvasni',
+}
diff --git a/languages/it-it.py b/languages/it-it.py
new file mode 100644
index 0000000..136c29d
--- /dev/null
+++ b/languages/it-it.py
@@ -0,0 +1,75 @@
+# coding: utf8
+{
+'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN',
+'%Y-%m-%d': '%Y-%m-%d',
+'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
+'%s rows deleted': '%s records cancellati',
+'%s rows updated': '*** %s records modificati',
+'Available databases and tables': 'Available databases and tables',
+'Cannot be empty': 'Cannot be empty',
+'Check to delete': 'Check to delete',
+'Controller': 'Controller',
+'Copyright': 'Copyright',
+'Current request': 'Current request',
+'Current response': 'Current response',
+'Current session': 'Current session',
+'DB Model': 'DB Model',
+'Database': 'Database',
+'Delete:': 'Delete:',
+'Edit': 'Edit',
+'Edit This App': 'Edit This App',
+'Edit current record': 'Edit current record',
+'Hello World': 'Salve Mondo',
+'Import/Export': 'Import/Export',
+'Index': 'Index',
+'Internal State': 'Internal State',
+'Invalid Query': 'Query invalida',
+'Layout': 'Layout',
+'Main Menu': 'Main Menu',
+'Menu Model': 'Menu Model',
+'New Record': 'New Record',
+'No databases in this application': 'No databases in this application',
+'Powered by': 'Powered by',
+'Query:': 'Query:',
+'Rows in table': 'Rows in table',
+'Rows selected': 'Rows selected',
+'Stylesheet': 'Stylesheet',
+'Sure you want to delete this object?': 'Sicuro che vuoi cancellare questo oggetto?',
+'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': 'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.',
+'Update:': 'Update:',
+'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.',
+'View': 'View',
+'Welcome %s': 'Welcome %s',
+'Welcome to web2py': 'Ciao da wek2py',
+'appadmin is disabled because insecure channel': 'appadmin is disabled because insecure channel',
+'cache': 'cache',
+'change password': 'change password',
+'click here for online examples': 'clicca per vedere gli esempi',
+'click here for the administrative interface': "clicca per l'interfaccia administrativa",
+'customize me!': 'customize me!',
+'data uploaded': 'dati caricati',
+'database': 'database',
+'database %s select': 'database %s select',
+'db': 'db',
+'design': 'progetta',
+'done!': 'fatto!',
+'edit profile': 'edit profile',
+'export as csv file': 'export as csv file',
+'insert new': 'insert new',
+'insert new %s': 'insert new %s',
+'invalid request': 'richiesta invalida!',
+'login': 'login',
+'logout': 'logout',
+'new record inserted': 'nuovo record inserito',
+'next 100 rows': 'next 100 rows',
+'or import from csv file': 'or import from csv file',
+'previous 100 rows': 'previous 100 rows',
+'record': 'record',
+'record does not exist': 'il record non esiste',
+'record id': 'record id',
+'register': 'register',
+'selected': 'selected',
+'state': 'stato',
+'table': 'table',
+'unable to parse csv file': 'non so leggere questo csv file',
+}
diff --git a/languages/it.py b/languages/it.py
new file mode 100644
index 0000000..888a556
--- /dev/null
+++ b/languages/it.py
@@ -0,0 +1,107 @@
+# coding: utf8
+{
+'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN',
+'%Y-%m-%d': '%Y-%m-%d',
+'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
+'%s rows deleted': '%s records cancellati',
+'%s rows updated': '*** %s records modificati',
+'Available databases and tables': 'Available databases and tables',
+'Cannot be empty': 'Cannot be empty',
+'Check to delete': 'Check to delete',
+'Check to delete:': 'Check to delete:',
+'Client IP': 'Client IP',
+'Controller': 'Controller',
+'Copyright': 'Copyright',
+'Current request': 'Current request',
+'Current response': 'Current response',
+'Current session': 'Current session',
+'DB Model': 'DB Model',
+'Database': 'Database',
+'Delete:': 'Delete:',
+'Description': 'Description',
+'E-mail': 'E-mail',
+'Edit': 'Edit',
+'Edit This App': 'Edit This App',
+'Edit current record': 'Edit current record',
+'First name': 'First name',
+'Group %(group_id)s created': 'Group %(group_id)s created',
+'Group ID': 'Group ID',
+'Group uniquely assigned to user %(id)s': 'Group uniquely assigned to user %(id)s',
+'Hello World': 'Salve Mondo',
+'Import/Export': 'Import/Export',
+'Index': 'Index',
+'Internal State': 'Internal State',
+'Invalid Query': 'Query invalida',
+'Invalid email': 'Invalid email',
+'Invalid login': 'Invalid login',
+'Last name': 'Last name',
+'Layout': 'Layout',
+'Logged in': 'Logged in',
+'Logged out': 'Logged out',
+'Main Menu': 'Main Menu',
+'Menu Model': 'Menu Model',
+'Name': 'Name',
+'New Record': 'New Record',
+'No databases in this application': 'No databases in this application',
+'Origin': 'Origin',
+'Password': 'Password',
+"Password fields don't match": "Password fields don't match",
+'Powered by': 'Powered by',
+'Query:': 'Query:',
+'Record ID': 'Record ID',
+'Registration key': 'Registration key',
+'Registration successful': 'Registration successful',
+'Remember me (for 30 days)': 'Remember me (for 30 days)',
+'Reset Password key': 'Reset Password key',
+'Role': 'Role',
+'Rows in table': 'Rows in table',
+'Rows selected': 'Rows selected',
+'Stylesheet': 'Stylesheet',
+'Submit': 'Submit',
+'Sure you want to delete this object?': 'Sicuro che vuoi cancellare questo oggetto?',
+'Table name': 'Table name',
+'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': 'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.',
+'Timestamp': 'Timestamp',
+'Update:': 'Update:',
+'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.',
+'User %(id)s Logged-in': 'User %(id)s Logged-in',
+'User %(id)s Logged-out': 'User %(id)s Logged-out',
+'User %(id)s Registered': 'User %(id)s Registered',
+'User ID': 'User ID',
+'Verify Password': 'Verify Password',
+'View': 'View',
+'Welcome %s': 'Welcome %s',
+'Welcome to web2py': 'Ciao da wek2py',
+'appadmin is disabled because insecure channel': 'appadmin is disabled because insecure channel',
+'cache': 'cache',
+'change password': 'change password',
+'click here for online examples': 'clicca per vedere gli esempi',
+'click here for the administrative interface': "clicca per l'interfaccia administrativa",
+'customize me!': 'customize me!',
+'data uploaded': 'dati caricati',
+'database': 'database',
+'database %s select': 'database %s select',
+'db': 'db',
+'design': 'progetta',
+'done!': 'fatto!',
+'edit profile': 'edit profile',
+'export as csv file': 'export as csv file',
+'insert new': 'insert new',
+'insert new %s': 'insert new %s',
+'invalid request': 'richiesta invalida!',
+'login': 'login',
+'logout': 'logout',
+'lost password': 'lost password',
+'new record inserted': 'nuovo record inserito',
+'next 100 rows': 'next 100 rows',
+'or import from csv file': 'or import from csv file',
+'previous 100 rows': 'previous 100 rows',
+'record': 'record',
+'record does not exist': 'il record non esiste',
+'record id': 'record id',
+'register': 'register',
+'selected': 'selected',
+'state': 'stato',
+'table': 'table',
+'unable to parse csv file': 'non so leggere questo csv file',
+}
diff --git a/languages/pl-pl.py b/languages/pl-pl.py
new file mode 100644
index 0000000..6f890a0
--- /dev/null
+++ b/languages/pl-pl.py
@@ -0,0 +1,81 @@
+# coding: utf8
+{
+'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"Uaktualnij" jest dodatkowym wyra\xc5\xbceniem postaci "pole1=\'nowawarto\xc5\x9b\xc4\x87\'". Nie mo\xc5\xbcesz uaktualni\xc4\x87 lub usun\xc4\x85\xc4\x87 wynik\xc3\xb3w z JOIN:',
+'%Y-%m-%d': '%Y-%m-%d',
+'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
+'%s rows deleted': 'Wierszy usuni\xc4\x99tych: %s',
+'%s rows updated': 'Wierszy uaktualnionych: %s',
+'Available databases and tables': 'Dost\xc4\x99pne bazy danych i tabele',
+'Cannot be empty': 'Nie mo\xc5\xbce by\xc4\x87 puste',
+'Change Password': 'Change Password',
+'Check to delete': 'Zaznacz aby usun\xc4\x85\xc4\x87',
+'Controller': 'Controller',
+'Copyright': 'Copyright',
+'Current request': 'Aktualne \xc5\xbc\xc4\x85danie',
+'Current response': 'Aktualna odpowied\xc5\xba',
+'Current session': 'Aktualna sesja',
+'DB Model': 'DB Model',
+'Database': 'Database',
+'Delete:': 'Usu\xc5\x84:',
+'Edit': 'Edit',
+'Edit Profile': 'Edit Profile',
+'Edit This App': 'Edit This App',
+'Edit current record': 'Edytuj aktualny rekord',
+'Hello World': 'Witaj \xc5\x9awiecie',
+'Import/Export': 'Importuj/eksportuj',
+'Index': 'Index',
+'Internal State': 'Stan wewn\xc4\x99trzny',
+'Invalid Query': 'B\xc5\x82\xc4\x99dne zapytanie',
+'Layout': 'Layout',
+'Login': 'Zaloguj',
+'Logout': 'Logout',
+'Lost Password': 'Przypomnij has\xc5\x82o',
+'Main Menu': 'Main Menu',
+'Menu Model': 'Menu Model',
+'New Record': 'Nowy rekord',
+'No databases in this application': 'Brak baz danych w tej aplikacji',
+'Powered by': 'Powered by',
+'Query:': 'Zapytanie:',
+'Register': 'Zarejestruj',
+'Rows in table': 'Wiersze w tabeli',
+'Rows selected': 'Wybrane wiersze',
+'Stylesheet': 'Stylesheet',
+'Sure you want to delete this object?': 'Czy na pewno chcesz usun\xc4\x85\xc4\x87 ten obiekt?',
+'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': '"Zapytanie" jest warunkiem postaci "db.tabela1.pole1==\'warto\xc5\x9b\xc4\x87\'". Takie co\xc5\x9b jak "db.tabela1.pole1==db.tabela2.pole2" oznacza SQL JOIN.',
+'Update:': 'Uaktualnij:',
+'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'U\xc5\xbcyj (...)&(...) jako AND, (...)|(...) jako OR oraz ~(...) jako NOT do tworzenia bardziej skomplikowanych zapyta\xc5\x84.',
+'View': 'View',
+'Welcome %s': 'Welcome %s',
+'Welcome to web2py': 'Witaj w web2py',
+'appadmin is disabled because insecure channel': 'appadmin is disabled because insecure channel',
+'cache': 'cache',
+'change password': 'change password',
+'click here for online examples': 'Kliknij aby przej\xc5\x9b\xc4\x87 do interaktywnych przyk\xc5\x82ad\xc3\xb3w',
+'click here for the administrative interface': 'Kliknij aby przej\xc5\x9b\xc4\x87 do panelu administracyjnego',
+'customize me!': 'dostosuj mnie!',
+'data uploaded': 'dane wys\xc5\x82ane',
+'database': 'baza danych',
+'database %s select': 'wyb\xc3\xb3r z bazy danych %s',
+'db': 'baza danych',
+'design': 'projektuj',
+'done!': 'zrobione!',
+'edit profile': 'edit profile',
+'export as csv file': 'eksportuj jako plik csv',
+'insert new': 'wstaw nowy rekord tabeli',
+'insert new %s': 'wstaw nowy rekord do tabeli %s',
+'invalid request': 'B\xc5\x82\xc4\x99dne \xc5\xbc\xc4\x85danie',
+'login': 'login',
+'logout': 'logout',
+'new record inserted': 'nowy rekord zosta\xc5\x82 wstawiony',
+'next 100 rows': 'nast\xc4\x99pne 100 wierszy',
+'or import from csv file': 'lub zaimportuj z pliku csv',
+'previous 100 rows': 'poprzednie 100 wierszy',
+'record': 'record',
+'record does not exist': 'rekord nie istnieje',
+'record id': 'id rekordu',
+'register': 'register',
+'selected': 'wybranych',
+'state': 'stan',
+'table': 'tabela',
+'unable to parse csv file': 'nie mo\xc5\xbcna sparsowa\xc4\x87 pliku csv',
+}
diff --git a/languages/pl.py b/languages/pl.py
new file mode 100644
index 0000000..d035d98
--- /dev/null
+++ b/languages/pl.py
@@ -0,0 +1,104 @@
+# coding: utf8
+{
+'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"Uaktualnij" jest dodatkowym wyra\xc5\xbceniem postaci "pole1=\'nowawarto\xc5\x9b\xc4\x87\'". Nie mo\xc5\xbcesz uaktualni\xc4\x87 lub usun\xc4\x85\xc4\x87 wynik\xc3\xb3w z JOIN:',
+'%Y-%m-%d': '%Y-%m-%d',
+'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
+'%s rows deleted': 'Wierszy usuni\xc4\x99tych: %s',
+'%s rows updated': 'Wierszy uaktualnionych: %s',
+'Authentication': 'Uwierzytelnienie',
+'Available databases and tables': 'Dost\xc4\x99pne bazy danych i tabele',
+'Cannot be empty': 'Nie mo\xc5\xbce by\xc4\x87 puste',
+'Change Password': 'Zmie\xc5\x84 has\xc5\x82o',
+'Check to delete': 'Zaznacz aby usun\xc4\x85\xc4\x87',
+'Check to delete:': 'Zaznacz aby usun\xc4\x85\xc4\x87:',
+'Client IP': 'IP klienta',
+'Controller': 'Kontroler',
+'Copyright': 'Copyright',
+'Current request': 'Aktualne \xc5\xbc\xc4\x85danie',
+'Current response': 'Aktualna odpowied\xc5\xba',
+'Current session': 'Aktualna sesja',
+'DB Model': 'Model bazy danych',
+'Database': 'Baza danych',
+'Delete:': 'Usu\xc5\x84:',
+'Description': 'Opis',
+'E-mail': 'Adres e-mail',
+'Edit': 'Edycja',
+'Edit Profile': 'Edytuj profil',
+'Edit This App': 'Edytuj t\xc4\x99 aplikacj\xc4\x99',
+'Edit current record': 'Edytuj obecny rekord',
+'First name': 'Imi\xc4\x99',
+'Function disabled': 'Funkcja wy\xc5\x82\xc4\x85czona',
+'Group ID': 'ID grupy',
+'Hello World': 'Witaj \xc5\x9awiecie',
+'Import/Export': 'Importuj/eksportuj',
+'Index': 'Indeks',
+'Internal State': 'Stan wewn\xc4\x99trzny',
+'Invalid Query': 'B\xc5\x82\xc4\x99dne zapytanie',
+'Invalid email': 'B\xc5\x82\xc4\x99dny adres email',
+'Last name': 'Nazwisko',
+'Layout': 'Uk\xc5\x82ad',
+'Login': 'Zaloguj',
+'Logout': 'Wyloguj',
+'Lost Password': 'Przypomnij has\xc5\x82o',
+'Main Menu': 'Menu g\xc5\x82\xc3\xb3wne',
+'Menu Model': 'Model menu',
+'Name': 'Nazwa',
+'New Record': 'Nowy rekord',
+'No databases in this application': 'Brak baz danych w tej aplikacji',
+'Origin': '\xc5\xb9r\xc3\xb3d\xc5\x82o',
+'Password': 'Has\xc5\x82o',
+"Password fields don't match": 'Pola has\xc5\x82a nie s\xc4\x85 zgodne ze sob\xc4\x85',
+'Powered by': 'Zasilane przez',
+'Query:': 'Zapytanie:',
+'Record ID': 'ID rekordu',
+'Register': 'Zarejestruj',
+'Registration key': 'Klucz rejestracji',
+'Role': 'Rola',
+'Rows in table': 'Wiersze w tabeli',
+'Rows selected': 'Wybrane wiersze',
+'Stylesheet': 'Arkusz styl\xc3\xb3w',
+'Submit': 'Wy\xc5\x9blij',
+'Sure you want to delete this object?': 'Czy na pewno chcesz usun\xc4\x85\xc4\x87 ten obiekt?',
+'Table name': 'Nazwa tabeli',
+'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': '"Zapytanie" jest warunkiem postaci "db.tabela1.pole1==\'warto\xc5\x9b\xc4\x87\'". Takie co\xc5\x9b jak "db.tabela1.pole1==db.tabela2.pole2" oznacza SQL JOIN.',
+'Timestamp': 'Znacznik czasu',
+'Update:': 'Uaktualnij:',
+'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'U\xc5\xbcyj (...)&(...) jako AND, (...)|(...) jako OR oraz ~(...) jako NOT do tworzenia bardziej skomplikowanych zapyta\xc5\x84.',
+'User %(id)s Registered': 'U\xc5\xbcytkownik %(id)s zosta\xc5\x82 zarejestrowany',
+'User ID': 'ID u\xc5\xbcytkownika',
+'Verify Password': 'Potwierd\xc5\xba has\xc5\x82o',
+'View': 'Widok',
+'Welcome %s': 'Welcome %s',
+'Welcome to web2py': 'Witaj w web2py',
+'appadmin is disabled because insecure channel': 'administracja aplikacji wy\xc5\x82\xc4\x85czona z powodu braku bezpiecznego po\xc5\x82\xc4\x85czenia',
+'cache': 'cache',
+'change password': 'change password',
+'click here for online examples': 'Kliknij aby przej\xc5\x9b\xc4\x87 do interaktywnych przyk\xc5\x82ad\xc3\xb3w',
+'click here for the administrative interface': 'Kliknij aby przej\xc5\x9b\xc4\x87 do panelu administracyjnego',
+'customize me!': 'dostosuj mnie!',
+'data uploaded': 'dane wys\xc5\x82ane',
+'database': 'baza danych',
+'database %s select': 'wyb\xc3\xb3r z bazy danych %s',
+'db': 'baza danych',
+'design': 'projektuj',
+'done!': 'zrobione!',
+'edit profile': 'edit profile',
+'export as csv file': 'eksportuj jako plik csv',
+'insert new': 'wstaw nowy rekord tabeli',
+'insert new %s': 'wstaw nowy rekord do tabeli %s',
+'invalid request': 'B\xc5\x82\xc4\x99dne \xc5\xbc\xc4\x85danie',
+'login': 'login',
+'logout': 'logout',
+'new record inserted': 'nowy rekord zosta\xc5\x82 wstawiony',
+'next 100 rows': 'nast\xc4\x99pne 100 wierszy',
+'or import from csv file': 'lub zaimportuj z pliku csv',
+'previous 100 rows': 'poprzednie 100 wierszy',
+'record': 'rekord',
+'record does not exist': 'rekord nie istnieje',
+'record id': 'id rekordu',
+'register': 'register',
+'selected': 'wybranych',
+'state': 'stan',
+'table': 'tabela',
+'unable to parse csv file': 'nie mo\xc5\xbcna sparsowa\xc4\x87 pliku csv',
+}
diff --git a/languages/pt-br.py b/languages/pt-br.py
new file mode 100644
index 0000000..135e9ed
--- /dev/null
+++ b/languages/pt-br.py
@@ -0,0 +1,78 @@
+# coding: utf8
+{
+'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" \xc3\xa9 uma express\xc3\xa3o opcional como "campo1=\'novovalor\'". Voc\xc3\xaa n\xc3\xa3o pode atualizar ou apagar os resultados de um JOIN',
+'%Y-%m-%d': '%Y-%m-%d',
+'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
+'%s rows deleted': '%s linhas apagadas',
+'%s rows updated': '%s linhas atualizadas',
+'Available databases and tables': 'Bancos de dados e tabelas dispon\xc3\xadveis',
+'Cannot be empty': 'N\xc3\xa3o pode ser vazio',
+'Check to delete': 'Marque para apagar',
+'Controller': 'Controller',
+'Copyright': 'Copyright',
+'Current request': 'Requisi\xc3\xa7\xc3\xa3o atual',
+'Current response': 'Resposta atual',
+'Current session': 'Sess\xc3\xa3o atual',
+'DB Model': 'DB Model',
+'Database': 'Database',
+'Delete:': 'Apagar:',
+'Edit': 'Edit',
+'Edit This App': 'Edit This App',
+'Edit current record': 'Editar o registro atual',
+'Hello World': 'Ol\xc3\xa1 Mundo',
+'Import/Export': 'Importar/Exportar',
+'Index': 'Index',
+'Internal State': 'Estado Interno',
+'Invalid Query': 'Consulta Inv\xc3\xa1lida',
+'Layout': 'Layout',
+'Login': 'Autentique-se',
+'Lost Password': 'Esqueceu sua senha?',
+'Main Menu': 'Main Menu',
+'Menu Model': 'Menu Model',
+'New Record': 'Novo Registro',
+'No databases in this application': 'Sem bancos de dados nesta aplica\xc3\xa7\xc3\xa3o',
+'Powered by': 'Powered by',
+'Query:': 'Consulta:',
+'Register': 'Registre-se',
+'Rows in table': 'Linhas na tabela',
+'Rows selected': 'Linhas selecionadas',
+'Stylesheet': 'Stylesheet',
+'Sure you want to delete this object?': 'Est\xc3\xa1 certo(a) que deseja apagar esse objeto ?',
+'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': 'Uma "consulta" \xc3\xa9 uma condi\xc3\xa7\xc3\xa3o como "db.tabela1.campo1==\'valor\'". Express\xc3\xb5es como "db.tabela1.campo1==db.tabela2.campo2" resultam em um JOIN SQL.',
+'Update:': 'Atualizar:',
+'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Use (...)&(...) para AND, (...)|(...) para OR, e ~(...) para NOT para construir consultas mais complexas.',
+'View': 'View',
+'Welcome %s': 'Welcome %s',
+'Welcome to web2py': 'Bem vindo ao web2py',
+'appadmin is disabled because insecure channel': 'appadmin is disabled because insecure channel',
+'cache': 'cache',
+'change password': 'change password',
+'click here for online examples': 'clique aqui para ver alguns exemplos',
+'click here for the administrative interface': 'clique aqui para acessar a interface administrativa',
+'customize me!': 'Personalize-me!',
+'data uploaded': 'dados enviados',
+'database': 'banco de dados',
+'database %s select': 'Selecionar banco de dados %s',
+'db': 'db',
+'design': 'design',
+'done!': 'conclu\xc3\xaddo!',
+'edit profile': 'edit profile',
+'export as csv file': 'exportar como um arquivo csv',
+'insert new': 'inserir novo',
+'insert new %s': 'inserir novo %s',
+'invalid request': 'requisi\xc3\xa7\xc3\xa3o inv\xc3\xa1lida',
+'login': 'login',
+'logout': 'logout',
+'new record inserted': 'novo registro inserido',
+'next 100 rows': 'pr\xc3\xb3ximas 100 linhas',
+'or import from csv file': 'ou importar de um arquivo csv',
+'previous 100 rows': '100 linhas anteriores',
+'record': 'record',
+'record does not exist': 'registro n\xc3\xa3o existe',
+'record id': 'id do registro',
+'register': 'register',
+'selected': 'selecionado',
+'state': 'estado',
+'table': 'tabela',
+'unable to parse csv file': 'n\xc3\xa3o foi poss\xc3\xadvel analisar arquivo csv',
+}
diff --git a/languages/pt-pt.py b/languages/pt-pt.py
new file mode 100644
index 0000000..5a08f42
--- /dev/null
+++ b/languages/pt-pt.py
@@ -0,0 +1,76 @@
+# coding: utf8
+{
+'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN',
+'%Y-%m-%d': '%Y-%m-%d',
+'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
+'%s rows deleted': '%s linhas eliminadas',
+'%s rows updated': '%s linhas actualizadas',
+'Available databases and tables': 'Available databases and tables',
+'Cannot be empty': 'Cannot be empty',
+'Check to delete': 'Check to delete',
+'Controller': 'Controller',
+'Copyright': 'Copyright',
+'Current request': 'Current request',
+'Current response': 'Current response',
+'Current session': 'Current session',
+'DB Model': 'DB Model',
+'Database': 'Database',
+'Delete:': 'Delete:',
+'Edit': 'Edit',
+'Edit This App': 'Edit This App',
+'Edit current record': 'Edit current record',
+'Hello World': 'Ol\xc3\xa1 Mundo',
+'Import/Export': 'Import/Export',
+'Index': 'Index',
+'Internal State': 'Internal State',
+'Invalid Query': 'Consulta Inv\xc3\xa1lida',
+'Layout': 'Layout',
+'Main Menu': 'Main Menu',
+'Menu Model': 'Menu Model',
+'New Record': 'New Record',
+'No databases in this application': 'No databases in this application',
+'Powered by': 'Powered by',
+'Query:': 'Query:',
+'Rows in table': 'Rows in table',
+'Rows selected': 'Rows selected',
+'Stylesheet': 'Stylesheet',
+'Sure you want to delete this object?': 'Tem a certeza que deseja eliminar este objecto?',
+'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': 'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.',
+'Update:': 'Update:',
+'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.',
+'View': 'View',
+'Welcome %s': 'Welcome %s',
+'Welcome to Gluonization': 'Bem vindo ao Web2py',
+'Welcome to web2py': 'Welcome to web2py',
+'appadmin is disabled because insecure channel': 'appadmin is disabled because insecure channel',
+'cache': 'cache',
+'change password': 'change password',
+'click here for online examples': 'Clique aqui para exemplos online',
+'click here for the administrative interface': 'Clique aqui para o painel administrativo',
+'customize me!': 'customize me!',
+'data uploaded': 'informa\xc3\xa7\xc3\xa3o enviada',
+'database': 'database',
+'database %s select': 'database %s select',
+'db': 'bd',
+'design': 'design',
+'done!': 'conclu\xc3\xaddo!',
+'edit profile': 'edit profile',
+'export as csv file': 'export as csv file',
+'insert new': 'insert new',
+'insert new %s': 'insert new %s',
+'invalid request': 'Pedido Inv\xc3\xa1lido',
+'login': 'login',
+'logout': 'logout',
+'new record inserted': 'novo registo inserido',
+'next 100 rows': 'next 100 rows',
+'or import from csv file': 'or import from csv file',
+'previous 100 rows': 'previous 100 rows',
+'record': 'record',
+'record does not exist': 'registo inexistente',
+'record id': 'record id',
+'register': 'register',
+'selected': 'selected',
+'state': 'estado',
+'table': 'table',
+'unable to parse csv file': 'n\xc3\xa3o foi poss\xc3\xadvel carregar ficheiro csv',
+}
diff --git a/languages/pt.py b/languages/pt.py
new file mode 100644
index 0000000..5a08f42
--- /dev/null
+++ b/languages/pt.py
@@ -0,0 +1,76 @@
+# coding: utf8
+{
+'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN',
+'%Y-%m-%d': '%Y-%m-%d',
+'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
+'%s rows deleted': '%s linhas eliminadas',
+'%s rows updated': '%s linhas actualizadas',
+'Available databases and tables': 'Available databases and tables',
+'Cannot be empty': 'Cannot be empty',
+'Check to delete': 'Check to delete',
+'Controller': 'Controller',
+'Copyright': 'Copyright',
+'Current request': 'Current request',
+'Current response': 'Current response',
+'Current session': 'Current session',
+'DB Model': 'DB Model',
+'Database': 'Database',
+'Delete:': 'Delete:',
+'Edit': 'Edit',
+'Edit This App': 'Edit This App',
+'Edit current record': 'Edit current record',
+'Hello World': 'Ol\xc3\xa1 Mundo',
+'Import/Export': 'Import/Export',
+'Index': 'Index',
+'Internal State': 'Internal State',
+'Invalid Query': 'Consulta Inv\xc3\xa1lida',
+'Layout': 'Layout',
+'Main Menu': 'Main Menu',
+'Menu Model': 'Menu Model',
+'New Record': 'New Record',
+'No databases in this application': 'No databases in this application',
+'Powered by': 'Powered by',
+'Query:': 'Query:',
+'Rows in table': 'Rows in table',
+'Rows selected': 'Rows selected',
+'Stylesheet': 'Stylesheet',
+'Sure you want to delete this object?': 'Tem a certeza que deseja eliminar este objecto?',
+'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': 'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.',
+'Update:': 'Update:',
+'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.',
+'View': 'View',
+'Welcome %s': 'Welcome %s',
+'Welcome to Gluonization': 'Bem vindo ao Web2py',
+'Welcome to web2py': 'Welcome to web2py',
+'appadmin is disabled because insecure channel': 'appadmin is disabled because insecure channel',
+'cache': 'cache',
+'change password': 'change password',
+'click here for online examples': 'Clique aqui para exemplos online',
+'click here for the administrative interface': 'Clique aqui para o painel administrativo',
+'customize me!': 'customize me!',
+'data uploaded': 'informa\xc3\xa7\xc3\xa3o enviada',
+'database': 'database',
+'database %s select': 'database %s select',
+'db': 'bd',
+'design': 'design',
+'done!': 'conclu\xc3\xaddo!',
+'edit profile': 'edit profile',
+'export as csv file': 'export as csv file',
+'insert new': 'insert new',
+'insert new %s': 'insert new %s',
+'invalid request': 'Pedido Inv\xc3\xa1lido',
+'login': 'login',
+'logout': 'logout',
+'new record inserted': 'novo registo inserido',
+'next 100 rows': 'next 100 rows',
+'or import from csv file': 'or import from csv file',
+'previous 100 rows': 'previous 100 rows',
+'record': 'record',
+'record does not exist': 'registo inexistente',
+'record id': 'record id',
+'register': 'register',
+'selected': 'selected',
+'state': 'estado',
+'table': 'table',
+'unable to parse csv file': 'n\xc3\xa3o foi poss\xc3\xadvel carregar ficheiro csv',
+}
diff --git a/languages/ru-ru.py b/languages/ru-ru.py
new file mode 100644
index 0000000..93a516c
--- /dev/null
+++ b/languages/ru-ru.py
@@ -0,0 +1,87 @@
+# coding: utf8
+{
+'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"\xd0\x98\xd0\xb7\xd0\xbc\xd0\xb5\xd0\xbd\xd0\xb8\xd1\x82\xd1\x8c" - \xd0\xbd\xd0\xb5\xd0\xbe\xd0\xb1\xd1\x8f\xd0\xb7\xd0\xb0\xd1\x82\xd0\xb5\xd0\xbb\xd1\x8c\xd0\xbd\xd0\xbe\xd0\xb5 \xd0\xb2\xd1\x8b\xd1\x80\xd0\xb0\xd0\xb6\xd0\xb5\xd0\xbd\xd0\xb8\xd0\xb5 \xd0\xb2\xd0\xb8\xd0\xb4\xd0\xb0 "field1=\'\xd0\xbd\xd0\xbe\xd0\xb2\xd0\xbe\xd0\xb5 \xd0\xb7\xd0\xbd\xd0\xb0\xd1\x87\xd0\xb5\xd0\xbd\xd0\xb8\xd0\xb5\'". \xd0\xa0\xd0\xb5\xd0\xb7\xd1\x83\xd0\xbb\xd1\x8c\xd1\x82\xd0\xb0\xd1\x82\xd1\x8b \xd0\xbe\xd0\xbf\xd0\xb5\xd1\x80\xd0\xb0\xd1\x86\xd0\xb8\xd0\xb8 JOIN \xd0\xbd\xd0\xb5\xd0\xbb\xd1\x8c\xd0\xb7\xd1\x8f \xd0\xb8\xd0\xb7\xd0\xbc\xd0\xb5\xd0\xbd\xd0\xb8\xd1\x82\xd1\x8c \xd0\xb8\xd0\xbb\xd0\xb8 \xd1\x83\xd0\xb4\xd0\xb0\xd0\xbb\xd0\xb8\xd1\x82\xd1\x8c.',
+'%Y-%m-%d': '%Y-%m-%d',
+'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
+'%s rows deleted': '%s \xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xba \xd1\x83\xd0\xb4\xd0\xb0\xd0\xbb\xd0\xb5\xd0\xbd\xd0\xbe',
+'%s rows updated': '%s \xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xba \xd0\xb8\xd0\xb7\xd0\xbc\xd0\xb5\xd0\xbd\xd0\xb5\xd0\xbd\xd0\xbe',
+'Available databases and tables': '\xd0\x91\xd0\xb0\xd0\xb7\xd1\x8b \xd0\xb4\xd0\xb0\xd0\xbd\xd0\xbd\xd1\x8b\xd1\x85 \xd0\xb8 \xd1\x82\xd0\xb0\xd0\xb1\xd0\xbb\xd0\xb8\xd1\x86\xd1\x8b',
+'Cannot be empty': '\xd0\x9f\xd1\x83\xd1\x81\xd1\x82\xd0\xbe\xd0\xb5 \xd0\xb7\xd0\xbd\xd0\xb0\xd1\x87\xd0\xb5\xd0\xbd\xd0\xb8\xd0\xb5 \xd0\xbd\xd0\xb5\xd0\xb4\xd0\xbe\xd0\xbf\xd1\x83\xd1\x81\xd1\x82\xd0\xb8\xd0\xbc\xd0\xbe',
+'Change Password': '\xd0\xa1\xd0\xbc\xd0\xb5\xd0\xbd\xd0\xb8\xd1\x82\xd0\xb5 \xd0\xbf\xd0\xb0\xd1\x80\xd0\xbe\xd0\xbb\xd1\x8c',
+'Check to delete': '\xd0\xa3\xd0\xb4\xd0\xb0\xd0\xbb\xd0\xb8\xd1\x82\xd1\x8c',
+'Check to delete:': '\xd0\xa3\xd0\xb4\xd0\xb0\xd0\xbb\xd0\xb8\xd1\x82\xd1\x8c:',
+'Controller': 'Controller',
+'Copyright': 'Copyright',
+'Current request': '\xd0\xa2\xd0\xb5\xd0\xba\xd1\x83\xd1\x89\xd0\xb8\xd0\xb9 \xd0\xb7\xd0\xb0\xd0\xbf\xd1\x80\xd0\xbe\xd1\x81',
+'Current response': '\xd0\xa2\xd0\xb5\xd0\xba\xd1\x83\xd1\x89\xd0\xb8\xd0\xb9 \xd0\xbe\xd1\x82\xd0\xb2\xd0\xb5\xd1\x82',
+'Current session': '\xd0\xa2\xd0\xb5\xd0\xba\xd1\x83\xd1\x89\xd0\xb0\xd1\x8f \xd1\x81\xd0\xb5\xd1\x81\xd1\x81\xd0\xb8\xd1\x8f',
+'DB Model': 'DB Model',
+'Database': 'Database',
+'Delete:': '\xd0\xa3\xd0\xb4\xd0\xb0\xd0\xbb\xd0\xb8\xd1\x82\xd1\x8c:',
+'Edit': 'Edit',
+'Edit Profile': '\xd0\xa0\xd0\xb5\xd0\xb4\xd0\xb0\xd0\xba\xd1\x82\xd0\xb8\xd1\x80\xd0\xbe\xd0\xb2\xd0\xb0\xd1\x82\xd1\x8c \xd0\xbf\xd1\x80\xd0\xbe\xd1\x84\xd0\xb0\xd0\xb9\xd0\xbb',
+'Edit This App': 'Edit This App',
+'Edit current record': '\xd0\xa0\xd0\xb5\xd0\xb4\xd0\xb0\xd0\xba\xd1\x82\xd0\xb8\xd1\x80\xd0\xbe\xd0\xb2\xd0\xb0\xd1\x82\xd1\x8c \xd1\x82\xd0\xb5\xd0\xba\xd1\x83\xd1\x89\xd1\x83\xd1\x8e \xd0\xb7\xd0\xb0\xd0\xbf\xd0\xb8\xd1\x81\xd1\x8c',
+'Hello World': '\xd0\x97\xd0\xb0\xd1\x80\xd0\xb0\xd0\xb1\xd0\xbe\xd1\x82\xd0\xb0\xd0\xbb\xd0\xbe!',
+'Import/Export': '\xd0\x98\xd0\xbc\xd0\xbf\xd0\xbe\xd1\x80\xd1\x82/\xd1\x8d\xd0\xba\xd1\x81\xd0\xbf\xd0\xbe\xd1\x80\xd1\x82',
+'Index': 'Index',
+'Internal State': '\xd0\x92\xd0\xbd\xd1\x83\xd1\x82\xd1\x80\xd0\xb5\xd0\xbd\xd0\xbd\xd0\xb5 \xd1\x81\xd0\xbe\xd1\x81\xd1\x82\xd0\xbe\xd1\x8f\xd0\xbd\xd0\xb8\xd0\xb5',
+'Invalid Query': '\xd0\x9d\xd0\xb5\xd0\xb2\xd0\xb5\xd1\x80\xd0\xbd\xd1\x8b\xd0\xb9 \xd0\xb7\xd0\xb0\xd0\xbf\xd1\x80\xd0\xbe\xd1\x81',
+'Invalid email': '\xd0\x9d\xd0\xb5\xd0\xb2\xd0\xb5\xd1\x80\xd0\xbd\xd1\x8b\xd0\xb9 email',
+'Layout': 'Layout',
+'Login': '\xd0\x92\xd1\x85\xd0\xbe\xd0\xb4',
+'Logout': '\xd0\x92\xd1\x8b\xd1\x85\xd0\xbe\xd0\xb4',
+'Lost Password': '\xd0\x97\xd0\xb0\xd0\xb1\xd1\x8b\xd0\xbb\xd0\xb8 \xd0\xbf\xd0\xb0\xd1\x80\xd0\xbe\xd0\xbb\xd1\x8c?',
+'Main Menu': 'Main Menu',
+'Menu Model': 'Menu Model',
+'New Record': '\xd0\x9d\xd0\xbe\xd0\xb2\xd0\xb0\xd1\x8f \xd0\xb7\xd0\xb0\xd0\xbf\xd0\xb8\xd1\x81\xd1\x8c',
+'No databases in this application': '\xd0\x92 \xd0\xbf\xd1\x80\xd0\xb8\xd0\xbb\xd0\xbe\xd0\xb6\xd0\xb5\xd0\xbd\xd0\xb8\xd0\xb8 \xd0\xbd\xd0\xb5\xd1\x82 \xd0\xb1\xd0\xb0\xd0\xb7 \xd0\xb4\xd0\xb0\xd0\xbd\xd0\xbd\xd1\x8b\xd1\x85',
+"Password fields don't match": '\xd0\x9f\xd0\xb0\xd1\x80\xd0\xbe\xd0\xbb\xd0\xb8 \xd0\xbd\xd0\xb5 \xd1\x81\xd0\xbe\xd0\xb2\xd0\xbf\xd0\xb0\xd0\xb4\xd0\xb0\xd1\x8e\xd1\x82',
+'Powered by': 'Powered by',
+'Query:': '\xd0\x97\xd0\xb0\xd0\xbf\xd1\x80\xd0\xbe\xd1\x81:',
+'Register': '\xd0\x97\xd0\xb0\xd1\x80\xd0\xb5\xd0\xb3\xd0\xb8\xd1\x81\xd1\x82\xd1\x80\xd0\xb8\xd1\x80\xd0\xbe\xd0\xb2\xd0\xb0\xd1\x82\xd1\x8c\xd1\x81\xd1\x8f',
+'Rows in table': '\xd0\xa1\xd1\x82\xd1\x80\xd0\xbe\xd0\xba \xd0\xb2 \xd1\x82\xd0\xb0\xd0\xb1\xd0\xbb\xd0\xb8\xd1\x86\xd0\xb5',
+'Rows selected': '\xd0\x92\xd1\x8b\xd0\xb4\xd0\xb5\xd0\xbb\xd0\xb5\xd0\xbd\xd0\xbe \xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xba',
+'Stylesheet': 'Stylesheet',
+'Submit': '\xd0\x9e\xd1\x82\xd0\xbf\xd1\x80\xd0\xb0\xd0\xb2\xd0\xb8\xd1\x82\xd1\x8c',
+'Sure you want to delete this object?': '\xd0\x9f\xd0\xbe\xd0\xb4\xd1\x82\xd0\xb2\xd0\xb5\xd1\x80\xd0\xb4\xd0\xb8\xd1\x82\xd0\xb5 \xd1\x83\xd0\xb4\xd0\xb0\xd0\xbb\xd0\xb5\xd0\xbd\xd0\xb8\xd0\xb5 \xd0\xbe\xd0\xb1\xd1\x8a\xd0\xb5\xd0\xba\xd1\x82\xd0\xb0',
+'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': '"\xd0\x97\xd0\xb0\xd0\xbf\xd1\x80\xd0\xbe\xd1\x81" - \xd1\x8d\xd1\x82\xd0\xbe \xd1\x83\xd1\x81\xd0\xbb\xd0\xbe\xd0\xb2\xd0\xb8\xd0\xb5 \xd0\xb2\xd0\xb8\xd0\xb4\xd0\xb0 "db.table1.field1==\'\xd0\xb7\xd0\xbd\xd0\xb0\xd1\x87\xd0\xb5\xd0\xbd\xd0\xb8\xd0\xb5\'". \xd0\x92\xd1\x8b\xd1\x80\xd0\xb0\xd0\xb6\xd0\xb5\xd0\xbd\xd0\xb8\xd0\xb5 \xd0\xb2\xd0\xb8\xd0\xb4\xd0\xb0 "db.table1.field1==db.table2.field2" \xd1\x84\xd0\xbe\xd1\x80\xd0\xbc\xd0\xb8\xd1\x80\xd1\x83\xd0\xb5\xd1\x82 SQL JOIN.',
+'Update:': '\xd0\x98\xd0\xb7\xd0\xbc\xd0\xb5\xd0\xbd\xd0\xb8\xd1\x82\xd1\x8c:',
+'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': '\xd0\x94\xd0\xbb\xd1\x8f \xd0\xbf\xd0\xbe\xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xb5\xd0\xbd\xd0\xb8\xd0\xb5 \xd1\x81\xd0\xbb\xd0\xbe\xd0\xb6\xd0\xbd\xd1\x8b\xd1\x85 \xd0\xb7\xd0\xb0\xd0\xbf\xd1\x80\xd0\xbe\xd1\x81\xd0\xbe\xd0\xb2 \xd0\xb8\xd1\x81\xd0\xbf\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xb7\xd1\x83\xd0\xb9\xd1\x82\xd0\xb5 \xd0\xbe\xd0\xbf\xd0\xb5\xd1\x80\xd0\xb0\xd1\x82\xd0\xbe\xd1\x80\xd1\x8b "\xd0\x98": (...)&(...), "\xd0\x98\xd0\x9b\xd0\x98": (...)|(...), "\xd0\x9d\xd0\x95": ~(...).',
+'User %(id)s Registered': '\xd0\x9f\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xb7\xd0\xbe\xd0\xb2\xd0\xb0\xd1\x82\xd0\xb5\xd0\xbb\xd1\x8c %(id)s \xd0\xb7\xd0\xb0\xd1\x80\xd0\xb5\xd0\xb3\xd0\xb8\xd1\x81\xd1\x82\xd1\x80\xd0\xb8\xd1\x80\xd0\xbe\xd0\xb2\xd0\xb0\xd0\xbd',
+'Verify Password': '\xd0\x9f\xd0\xbe\xd0\xb2\xd1\x82\xd0\xbe\xd1\x80\xd0\xb8\xd1\x82\xd0\xb5 \xd0\xbf\xd0\xb0\xd1\x80\xd0\xbe\xd0\xbb\xd1\x8c',
+'View': 'View',
+'Welcome %s': 'Welcome %s',
+'Welcome to web2py': '\xd0\x94\xd0\xbe\xd0\xb1\xd1\x80\xd0\xbe \xd0\xbf\xd0\xbe\xd0\xb6\xd0\xb0\xd0\xbb\xd0\xbe\xd0\xb2\xd0\xb0\xd1\x82\xd1\x8c \xd0\xb2 web2py',
+'appadmin is disabled because insecure channel': 'appadmin is disabled because insecure channel',
+'cache': 'cache',
+'change password': 'change password',
+'click here for online examples': '\xd0\xbf\xd1\x80\xd0\xb8\xd0\xbc\xd0\xb5\xd1\x80\xd1\x8b \xd0\xbe\xd0\xbd-\xd0\xbb\xd0\xb0\xd0\xb9\xd0\xbd',
+'click here for the administrative interface': '\xd0\xb0\xd0\xb4\xd0\xbc\xd0\xb8\xd0\xbd\xd0\xb8\xd1\x81\xd1\x82\xd1\x80\xd0\xb0\xd1\x82\xd0\xb8\xd0\xb2\xd0\xbd\xd1\x8b\xd0\xb9 \xd0\xb8\xd0\xbd\xd1\x82\xd0\xb5\xd1\x80\xd1\x84\xd0\xb5\xd0\xb9\xd1\x81',
+'customize me!': '\xd0\xbd\xd0\xb0\xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xb9\xd1\x82\xd0\xb5 \xd0\xb2\xd0\xbd\xd0\xb5\xd1\x88\xd0\xbd\xd0\xb8\xd0\xb9 \xd0\xb2\xd0\xb8\xd0\xb4!',
+'data uploaded': '\xd0\xb4\xd0\xb0\xd0\xbd\xd0\xbd\xd1\x8b\xd0\xb5 \xd0\xb7\xd0\xb0\xd0\xb3\xd1\x80\xd1\x83\xd0\xb6\xd0\xb5\xd0\xbd\xd1\x8b',
+'database': '\xd0\xb1\xd0\xb0\xd0\xb7\xd0\xb0 \xd0\xb4\xd0\xb0\xd0\xbd\xd0\xbd\xd1\x8b\xd1\x85',
+'database %s select': '\xd0\xb2\xd1\x8b\xd0\xb1\xd0\xbe\xd1\x80 \xd0\xb1\xd0\xb0\xd0\xb7\xd1\x8b \xd0\xb4\xd0\xb0\xd0\xbd\xd0\xbd\xd1\x8b\xd1\x85 %s',
+'db': '\xd0\x91\xd0\x94',
+'design': '\xd0\xb4\xd0\xb8\xd0\xb7\xd0\xb0\xd0\xb9\xd0\xbd',
+'done!': '\xd0\xb3\xd0\xbe\xd1\x82\xd0\xbe\xd0\xb2\xd0\xbe!',
+'edit profile': 'edit profile',
+'export as csv file': '\xd1\x8d\xd0\xba\xd1\x81\xd0\xbf\xd0\xbe\xd1\x80\xd1\x82 \xd0\xb2 csv-\xd1\x84\xd0\xb0\xd0\xb9\xd0\xbb',
+'insert new': '\xd0\xb4\xd0\xbe\xd0\xb1\xd0\xb0\xd0\xb2\xd0\xb8\xd1\x82\xd1\x8c',
+'insert new %s': '\xd0\xb4\xd0\xbe\xd0\xb1\xd0\xb0\xd0\xb2\xd0\xb8\xd1\x82\xd1\x8c %s',
+'invalid request': '\xd0\xbd\xd0\xb5\xd0\xb2\xd0\xb5\xd1\x80\xd0\xbd\xd1\x8b\xd0\xb9 \xd0\xb7\xd0\xb0\xd0\xbf\xd1\x80\xd0\xbe\xd1\x81',
+'login': 'login',
+'logout': 'logout',
+'new record inserted': '\xd0\xbd\xd0\xbe\xd0\xb2\xd0\xb0\xd1\x8f \xd0\xb7\xd0\xb0\xd0\xbf\xd0\xb8\xd1\x81\xd1\x8c \xd0\xb4\xd0\xbe\xd0\xb1\xd0\xb0\xd0\xb2\xd0\xbb\xd0\xb5\xd0\xbd\xd0\xb0',
+'next 100 rows': '\xd1\x81\xd0\xbb\xd0\xb5\xd0\xb4\xd1\x83\xd1\x8e\xd1\x89\xd0\xb8\xd0\xb5 100 \xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xba',
+'or import from csv file': '\xd0\xb8\xd0\xbb\xd0\xb8 \xd0\xb8\xd0\xbc\xd0\xbf\xd0\xbe\xd1\x80\xd1\x82 \xd0\xb8\xd0\xb7 csv-\xd1\x84\xd0\xb0\xd0\xb9\xd0\xbb\xd0\xb0',
+'previous 100 rows': '\xd0\xbf\xd1\x80\xd0\xb5\xd0\xb4\xd1\x8b\xd0\xb4\xd1\x83\xd1\x89\xd0\xb8\xd0\xb5 100 \xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xba',
+'record': 'record',
+'record does not exist': '\xd0\xb7\xd0\xb0\xd0\xbf\xd0\xb8\xd1\x81\xd1\x8c \xd0\xbd\xd0\xb5 \xd0\xbd\xd0\xb0\xd0\xb9\xd0\xb4\xd0\xb5\xd0\xbd\xd0\xb0',
+'record id': 'id \xd0\xb7\xd0\xb0\xd0\xbf\xd0\xb8\xd1\x81\xd0\xb8',
+'register': 'register',
+'selected': '\xd0\xb2\xd1\x8b\xd0\xb1\xd1\x80\xd0\xb0\xd0\xbd\xd0\xbe',
+'state': '\xd1\x81\xd0\xbe\xd1\x81\xd1\x82\xd0\xbe\xd1\x8f\xd0\xbd\xd0\xb8\xd0\xb5',
+'table': '\xd1\x82\xd0\xb0\xd0\xb1\xd0\xbb\xd0\xb8\xd1\x86\xd0\xb0',
+'unable to parse csv file': '\xd0\xbd\xd0\xb5\xd1\x87\xd0\xb8\xd1\x82\xd0\xb0\xd0\xb5\xd0\xbc\xd1\x8b\xd0\xb9 csv-\xd1\x84\xd0\xb0\xd0\xb9\xd0\xbb',
+}
diff --git a/models/db.py b/models/db.py
new file mode 100644
index 0000000..6ce4922
--- /dev/null
+++ b/models/db.py
@@ -0,0 +1,50 @@
+if request.env.web2py_runtime_gae:
+ db = DAL('gae')
+ session.connect(request,response,db=db)
+else:db = DAL("sqlite://storage.db")
+
+db.define_table('image',
+ Field('file', 'upload', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension='ta', error_message="Must be a Turtle Art file")]),
+ Field('title', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, 'image.title', error_message="Title is already taken")]),
+ Field('image_id'),
+ Field('creator', requires=IS_NOT_EMPTY(error_message="You must include your name")),
+ Field('description', 'text'),
+ Field('views'),
+ Field('newimage', 'upload', requires=[IS_NOT_EMPTY(error_message="Please select a image to upload"), IS_UPLOAD_FILENAME(extension='png', error_message="Must be a PNG image")]))
+
+db.define_table('comment',
+ Field('image_id', db.image),
+ Field('author'),
+ Field('body', 'text'))
+
+from gluon.tools import Auth
+auth = Auth(globals(),db)
+auth_table = db.define_table(
+ auth.settings.table_user_name,
+ Field('username', length=128, default="", unique = True),
+ Field('email', length=128, default="", unique=True),
+ Field('password', 'password', length=256,
+ readable=False, label='Password'),
+ Field('registration_key', length=128, default= "",
+ writable=False, readable=False),
+ Field('reset_password_key', length=128, default="",readable=False))
+
+db.comment.image_id.requires = IS_IN_DB(db, db.image.image_id, '%(title)s')
+db.comment.author.requires = IS_NOT_EMPTY()
+db.comment.body.requires = IS_NOT_EMPTY()
+
+auth_table.username.requires = [IS_EXPR('str(value).count(" ") == 0', error_message='Username must be one word'), IS_NOT_IN_DB(db, auth_table.username)]
+auth_table.password.requires = [CRYPT()]
+auth_table.email.requires = [
+ IS_EMAIL(error_message=auth.messages.invalid_email),
+ IS_NOT_IN_DB(db, auth_table.email)]
+auth.settings.table_user = auth_table
+auth.define_tables()
+
+from gluon.tools import Mail
+mail = Mail()
+mail.settings.server = 'gae'
+mail.settings.sender = 'turtlesite.authentication@gmail.com'
+mail.settings.login = None
+auth.settings.mailer = mail
+
diff --git a/models/db.py.1 b/models/db.py.1
new file mode 100644
index 0000000..cd792cf
--- /dev/null
+++ b/models/db.py.1
@@ -0,0 +1,8 @@
+db = DAL("sqlite://storage.db")
+
+db.define_table('comment',
+ Field('file', 'upload', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension='ta', error_message="Must be a Turtle Art file")]),
+ Field('title', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, 'comment.title', error_message="Title is already taken")]),
+ Field('image_id'),
+ Field('creator', requires=IS_NOT_EMPTY(error_message="You must include your name")),
+ Field('description', 'text'))
diff --git a/models/db.py.bak b/models/db.py.bak
new file mode 100644
index 0000000..17bc391
--- /dev/null
+++ b/models/db.py.bak
@@ -0,0 +1,9 @@
+db = DAL("sqlite://storage.db")
+
+db.define_table('comment',
+ Field('file', 'upload', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension='ta', error_message="Must be a Turtle Art file")]),
+ Field('title', requires=[IS_NOT_EMPTY(error_message="You must include a title"), IS_NOT_IN_DB(db, 'comment.title', error_message="Title is already taken")]),
+ Field('image_id'),
+ Field('creator', requires=IS_NOT_EMPTY(error_message="You must include your name")),
+ Field('description', 'text'),
+ Field('newimage'))
diff --git a/models/menu.py b/models/menu.py
new file mode 100644
index 0000000..c387154
--- /dev/null
+++ b/models/menu.py
@@ -0,0 +1,52 @@
+# -*- coding: utf-8 -*-
+
+#########################################################################
+## Customize your APP title, subtitle and menus here
+#########################################################################
+
+response.title = request.application
+response.subtitle = T('customize me!')
+
+##########################################
+## this is the main application menu
+## add/remove items as required
+##########################################
+
+response.menu = [
+ [T('Index'), False,
+ URL(request.application,'default','index'), []],
+ ]
+
+
+##########################################
+## this is here to provide shortcuts
+## during development. remove in production
+##########################################
+
+response.menu_edit=[
+ [T('Edit'), False, URL('admin', 'default', 'design/%s' % request.application),
+ [
+ [T('Controller'), False,
+ URL('admin', 'default', 'edit/%s/controllers/%s.py' \
+ % (request.application,request.controller=='appadmin' and
+ 'default' or request.controller))],
+ [T('View'), False,
+ URL('admin', 'default', 'edit/%s/views/%s' \
+ % (request.application,response.view))],
+ [T('Layout'), False,
+ URL('admin', 'default', 'edit/%s/views/layout.html' \
+ % request.application)],
+ [T('Stylesheet'), False,
+ URL('admin', 'default', 'edit/%s/static/base.css' \
+ % request.application)],
+ [T('DB Model'), False,
+ URL('admin', 'default', 'edit/%s/models/db.py' \
+ % request.application)],
+ [T('Menu Model'), False,
+ URL('admin', 'default', 'edit/%s/models/menu.py' \
+ % request.application)],
+ [T('Database'), False,
+ URL(request.application, 'appadmin', 'index')],
+ ]
+ ],
+ ]
diff --git a/sessions/127-0-0-1-17b977ab-c09a-46a4-a5d3-479063196e05 b/sessions/127-0-0-1-17b977ab-c09a-46a4-a5d3-479063196e05
new file mode 100644
index 0000000..af24356
--- /dev/null
+++ b/sessions/127-0-0-1-17b977ab-c09a-46a4-a5d3-479063196e05
@@ -0,0 +1,87 @@
+(dp1
+S'_formkey[comment_create]'
+p2
+S'cb54fbf8-268a-4d65-9654-50fc4f9c84e0'
+p3
+sS'flash'
+p4
+NsS'_formkey[login]'
+p5
+S'8c663ee9-5627-40a0-b162-a7210e8a4850'
+p6
+sS'auth'
+p7
+ccopy_reg
+_reconstructor
+p8
+(cgluon.storage
+Storage
+p9
+c__builtin__
+dict
+p10
+(dp11
+S'remember'
+p12
+I00
+sS'expiration'
+p13
+I3600
+sS'last_visit'
+p14
+cdatetime
+datetime
+p15
+(S'\x07\xda\x07\r\x10-\x03\n\x1d\xcf'
+tRp16
+sS'user'
+p17
+g8
+(g9
+g10
+(dp18
+S'username'
+p19
+S'jboisture'
+p20
+sS'password'
+p21
+S'e2d399b0a5da6b18f3209e68295d62dc'
+p22
+sS'registration_key'
+p23
+S''
+sS'email'
+p24
+S'jamieboisture@gmail.com'
+p25
+sS'id'
+p26
+I1
+stRp27
+(dp28
+g19
+g20
+sg21
+g22
+sg23
+S''
+sg24
+g25
+sg26
+I1
+sbstRp29
+(dp30
+g12
+I00
+sg13
+I3600
+sg14
+g16
+sg17
+g27
+sbs.
+sbs.
+sg18
+g28
+sbs. \ No newline at end of file
diff --git a/sessions/127-0-0-1-2fc3e1b4-be47-4229-a6b3-065be0301418 b/sessions/127-0-0-1-2fc3e1b4-be47-4229-a6b3-065be0301418
new file mode 100644
index 0000000..3506aac
--- /dev/null
+++ b/sessions/127-0-0-1-2fc3e1b4-be47-4229-a6b3-065be0301418
@@ -0,0 +1,13 @@
+(dp1
+S'_formkey[comment_create]'
+p2
+S'efb7fff0-202b-4ef0-ad53-d92ff3b16bad'
+p3
+sS'new_image'
+p4
+(icgi
+FieldStorage
+p5
+(dp6
+S'fp'
+p7
diff --git a/sessions/127-0-0-1-31641b63-f0a4-478a-b72b-ec62f607c565 b/sessions/127-0-0-1-31641b63-f0a4-478a-b72b-ec62f607c565
new file mode 100644
index 0000000..1d59c2e
--- /dev/null
+++ b/sessions/127-0-0-1-31641b63-f0a4-478a-b72b-ec62f607c565
@@ -0,0 +1,97 @@
+(dp1
+S'_formkey[comment_create]'
+p2
+S'82b81991-bafc-43f2-ad93-8ded37257bf5'
+p3
+sS'auth'
+p4
+NsS'_formkey[register]'
+p5
+S'576acb3d-7ef0-4763-b376-dabefb859891'
+p6
+sS'creator'
+p7
+NsS'flash'
+p8
+NsS'new_image_title'
+p9
+S'image'
+p10
+sS'_formkey[login]'
+p11
+S'55d9e06e-2a35-44ab-90bd-6c7684a12548'
+p12
+s.a6e39ba5c'
+p13
+s.sername'
+p15
+S'tester'
+p16
+sS'password'
+p17
+S'e2d399b0a5da6b18f3209e68295d62dc'
+p18
+sS'registration_key'
+p19
+S''
+sS'email'
+p20
+S'jamestpb@vt.edu'
+p21
+sS'id'
+p22
+I2
+stRp23
+(dp24
+g15
+g16
+sg17
+g18
+sg19
+S''
+sg20
+g21
+sg22
+I2
+sbstRp25
+(dp26
+g9
+I3600
+sg10
+g12
+sg13
+g23
+sbsS'_formkey[register]'
+p27
+S'e198d390-3b2e-4399-8067-b9204d087114'
+p28
+sS'creator'
+p29
+NsS'flash'
+p30
+NsS'new_image_title'
+p31
+S'image'
+p32
+sS'_formkey[login]'
+p33
+S'bb502859-4852-46e0-9264-610a6e39ba5c'
+p34
+s..s.
+s.p34
+s.s.fc-6fba91b7368b'
+p35
+s.p35
+s.
+s..
+p36
+s..0a73d6df7a'
+p36
+s.
+s.
+s.
+s.18
+g20
+sg21
+g34
+sbs. \ No newline at end of file
diff --git a/sessions/127-0-0-1-33368913-e2d5-437e-848c-9630afa03fe6 b/sessions/127-0-0-1-33368913-e2d5-437e-848c-9630afa03fe6
new file mode 100644
index 0000000..fcd3675
--- /dev/null
+++ b/sessions/127-0-0-1-33368913-e2d5-437e-848c-9630afa03fe6
@@ -0,0 +1,13 @@
+(dp1
+S'_formkey[comment_create]'
+p2
+S'2d05729c-780c-4383-9c92-6478b621214f'
+p3
+sS'new_image'
+p4
+(icgi
+FieldStorage
+p5
+(dp6
+S'fp'
+p7
diff --git a/sessions/127-0-0-1-5b53cc8d-5988-4a95-a3fb-2bfc97b0c12b b/sessions/127-0-0-1-5b53cc8d-5988-4a95-a3fb-2bfc97b0c12b
new file mode 100644
index 0000000..12ce32e
--- /dev/null
+++ b/sessions/127-0-0-1-5b53cc8d-5988-4a95-a3fb-2bfc97b0c12b
@@ -0,0 +1,94 @@
+(dp1
+S'_formkey[comment_create]'
+p2
+S'35b4a82c-7ca3-4f61-a218-968ead5bdf8d'
+p3
+sS'auth'
+p4
+ccopy_reg
+_reconstructor
+p5
+(cgluon.storage
+Storage
+p6
+c__builtin__
+dict
+p7
+(dp8
+S'remember'
+p9
+I00
+sS'expiration'
+p10
+I3600
+sS'last_visit'
+p11
+cdatetime
+datetime
+p12
+(S'\x07\xda\x07\x07\x17\x13(\x04\x1cJ'
+tRp13
+sS'user'
+p14
+g5
+(g6
+g7
+(dp15
+S'username'
+p16
+S'jboisture'
+p17
+sS'password'
+p18
+S'e2d399b0a5da6b18f3209e68295d62dc'
+p19
+sS'registration_key'
+p20
+S''
+sS'email'
+p21
+S'jamieboisture@gmail.com'
+p22
+sS'id'
+p23
+I1
+stRp24
+(dp25
+g16
+g17
+sg18
+g19
+sg20
+S''
+sg21
+g22
+sg23
+I1
+sbstRp26
+(dp27
+g9
+I00
+sg10
+I3600
+sg11
+g13
+sg14
+g24
+sbsS'_formkey[register]'
+p28
+S'91fae828-4f40-4fb4-b7de-7d1037e0df2b'
+p29
+sS'flash'
+p30
+NsS'new_image_title'
+p31
+S'color wheel'
+p32
+sS'_formkey[login]'
+p33
+S'3e534ec8-0de3-45fb-b89d-c63fe731def6'
+p34
+s.
+s.
+s.s.p35
+s. \ No newline at end of file
diff --git a/sessions/127-0-0-1-5c75c2ab-740a-4917-98e7-68ee08593b54 b/sessions/127-0-0-1-5c75c2ab-740a-4917-98e7-68ee08593b54
new file mode 100644
index 0000000..95ac38b
--- /dev/null
+++ b/sessions/127-0-0-1-5c75c2ab-740a-4917-98e7-68ee08593b54
@@ -0,0 +1,13 @@
+(dp1
+S'_formkey[comment_create]'
+p2
+S'f294e68e-c9f7-43ed-a401-2ad9a95639f2'
+p3
+sS'new_image'
+p4
+(icgi
+FieldStorage
+p5
+(dp6
+S'fp'
+p7
diff --git a/sessions/127-0-0-1-5ea3cc27-0619-489f-b5d8-01f498ca2206 b/sessions/127-0-0-1-5ea3cc27-0619-489f-b5d8-01f498ca2206
new file mode 100644
index 0000000..00412c7
--- /dev/null
+++ b/sessions/127-0-0-1-5ea3cc27-0619-489f-b5d8-01f498ca2206
@@ -0,0 +1,13 @@
+(dp1
+S'_formkey[comment_create]'
+p2
+S'1ea5cb55-f560-4cd2-9dfc-58dab6341b7b'
+p3
+sS'new_image'
+p4
+(icgi
+FieldStorage
+p5
+(dp6
+S'fp'
+p7
diff --git a/sessions/127-0-0-1-67192e32-196b-4b82-9983-6ad070fe7650 b/sessions/127-0-0-1-67192e32-196b-4b82-9983-6ad070fe7650
new file mode 100644
index 0000000..078f415
--- /dev/null
+++ b/sessions/127-0-0-1-67192e32-196b-4b82-9983-6ad070fe7650
@@ -0,0 +1,26 @@
+(dp1
+S'_formkey[comment_create]'
+p2
+S'7f637931-7874-4c8d-9ba6-6404307c3d9e'
+p3
+sS'new_image'
+p4
+S'comment.file.92a63c5d1605151b.747572746c65617274746573742e7461.ta'
+p5
+sS'new_image_id'
+p6
+S'comment.file.904f1323fa9305e5.747572746c65617274746573742e7461.ta'
+p7
+sS'image_file'
+p8
+S'comment.file.83019d08d76b2cc5.747572746c65617274746573742e7461.ta'
+p9
+sS'new_image_title'
+p10
+S'Boxy'
+p11
+sS'viewed_image_title'
+p12
+S'Boxy'
+p13
+s. \ No newline at end of file
diff --git a/sessions/127-0-0-1-7c07d1f2-c718-4fc5-a095-74a6279342a6 b/sessions/127-0-0-1-7c07d1f2-c718-4fc5-a095-74a6279342a6
new file mode 100644
index 0000000..81a4841
--- /dev/null
+++ b/sessions/127-0-0-1-7c07d1f2-c718-4fc5-a095-74a6279342a6
@@ -0,0 +1,11 @@
+(dp1
+S'_formkey[comment_create]'
+p2
+S'ec376ddf-6492-4bed-8961-5efbf6c533bc'
+p3
+sS'new_image_title'
+p4
+S'random2'
+p5
+s.p5
+s. \ No newline at end of file
diff --git a/sessions/127-0-0-1-8ce5f553-b5e8-4c4e-ba1c-77b71bd12d53 b/sessions/127-0-0-1-8ce5f553-b5e8-4c4e-ba1c-77b71bd12d53
new file mode 100644
index 0000000..e96a834
--- /dev/null
+++ b/sessions/127-0-0-1-8ce5f553-b5e8-4c4e-ba1c-77b71bd12d53
@@ -0,0 +1,13 @@
+(dp1
+S'_formkey[comment_create]'
+p2
+S'6918765f-f5d6-4871-803a-f3d0bca9eb1b'
+p3
+sS'new_image'
+p4
+(icgi
+FieldStorage
+p5
+(dp6
+S'fp'
+p7
diff --git a/sessions/127-0-0-1-90ce4596-0740-4a89-a451-427611419c3d b/sessions/127-0-0-1-90ce4596-0740-4a89-a451-427611419c3d
new file mode 100644
index 0000000..f41d58b
--- /dev/null
+++ b/sessions/127-0-0-1-90ce4596-0740-4a89-a451-427611419c3d
@@ -0,0 +1,13 @@
+(dp1
+S'_formkey[comment_create]'
+p2
+S'ed2cc6fa-e093-47a7-a2f9-515e1bfa2607'
+p3
+sS'new_image'
+p4
+(icgi
+FieldStorage
+p5
+(dp6
+S'fp'
+p7
diff --git a/sessions/127-0-0-1-9e3ea9c1-5743-4a5a-baa0-196902fc7bb9 b/sessions/127-0-0-1-9e3ea9c1-5743-4a5a-baa0-196902fc7bb9
new file mode 100644
index 0000000..6f7776c
--- /dev/null
+++ b/sessions/127-0-0-1-9e3ea9c1-5743-4a5a-baa0-196902fc7bb9
@@ -0,0 +1,98 @@
+(dp1
+S'_formkey[comment_create]'
+p2
+S'7cdff7ae-f64f-462b-a45a-01bb06b0e16b'
+p3
+sS'auth'
+p4
+ccopy_reg
+_reconstructor
+p5
+(cgluon.storage
+Storage
+p6
+c__builtin__
+dict
+p7
+(dp8
+S'remember'
+p9
+I00
+sS'expiration'
+p10
+I3600
+sS'last_visit'
+p11
+cdatetime
+datetime
+p12
+(S'\x07\xda\x07\x08\x10- \x0eN\x96'
+tRp13
+sS'user'
+p14
+g5
+(g6
+g7
+(dp15
+S'username'
+p16
+S'jboisture'
+p17
+sS'password'
+p18
+S'e2d399b0a5da6b18f3209e68295d62dc'
+p19
+sS'registration_key'
+p20
+S''
+sS'email'
+p21
+S'jamieboisture@gmail.com'
+p22
+sS'id'
+p23
+I1
+stRp24
+(dp25
+g16
+g17
+sg18
+g19
+sg20
+S''
+sg21
+g22
+sg23
+I1
+sbstRp26
+(dp27
+g9
+I00
+sg10
+I3600
+sg11
+g13
+sg14
+g24
+sbsS'_formkey[image_create]'
+p28
+S'bc8d1f9f-d2c5-412e-b4a5-320db77dd39a'
+p29
+sS'_formkey[register]'
+p30
+S'ba16dfdb-7793-43c2-aab0-9b6a0a8fd64f'
+p31
+sS'flash'
+p32
+NsS'new_image_title'
+p33
+S'pattern3'
+p34
+sS'_formkey[login]'
+p35
+S'58ec610f-9f83-4a72-aa36-6715b87a0402'
+p36
+s..36
+s.p37
+s.37
+s. \ No newline at end of file
diff --git a/sessions/127-0-0-1-b8c059ab-c97c-4aac-a21d-750e685bb15a b/sessions/127-0-0-1-b8c059ab-c97c-4aac-a21d-750e685bb15a
new file mode 100644
index 0000000..fc59fa3
--- /dev/null
+++ b/sessions/127-0-0-1-b8c059ab-c97c-4aac-a21d-750e685bb15a
@@ -0,0 +1,13 @@
+(dp1
+S'_formkey[comment_create]'
+p2
+S'19a2ac9b-eadb-4932-a3ba-47dba6ec636b'
+p3
+sS'converting'
+p4
+I01
+sS'file'
+p5
+S'comment.file.bffc6b17b88f098d.747572746c65617274746573742e7461.ta'
+p6
+s. \ No newline at end of file
diff --git a/sessions/127-0-0-1-cba64c5b-ec3b-405e-9c5e-8e3d8b2b7aa3 b/sessions/127-0-0-1-cba64c5b-ec3b-405e-9c5e-8e3d8b2b7aa3
new file mode 100644
index 0000000..89102c1
--- /dev/null
+++ b/sessions/127-0-0-1-cba64c5b-ec3b-405e-9c5e-8e3d8b2b7aa3
@@ -0,0 +1,11 @@
+(dp1
+S'_formkey[comment_create]'
+p2
+S'fe98506e-9b0a-480a-9e7e-59731e31f9e3'
+p3
+sS'new_image_title'
+p4
+S'colors'
+p5
+s.5
+s. \ No newline at end of file
diff --git a/static/background.gif b/static/background.gif
new file mode 100644
index 0000000..6f14615
--- /dev/null
+++ b/static/background.gif
Binary files differ
diff --git a/static/base.css b/static/base.css
new file mode 100644
index 0000000..8291175
--- /dev/null
+++ b/static/base.css
@@ -0,0 +1,636 @@
+@charset "UTF-8";
+
+.header, .statusbar, .column1, .expandable, .footer {
+ padding-left: 0.5em;
+ padding-right: 0.5em;
+ padding-top: 0.3em;
+ padding-bottom: 0.2em;
+}
+body, table, tr, td, th, thead, tfoot, label, h1, h2, h3, h4, h5, h6, p, ul, li, ol, pre, textarea {
+ background: transparent;
+ /**/
+ border: 0;
+ margin: 0;
+ outline: 0;
+ padding: 0;
+
+ color: inherit;
+ font-weight: inherit;
+ font-style: inherit;
+ font-family: inherit;
+ vertical-align: baseline;
+ font-size: 100%;
+}
+
+body {
+ background: transparent;
+ width:100%;
+ min-width: 600px;
+}
+
+table {
+ border-spacing: 0;
+ border-collapse: collapse;
+}
+
+label,
+th,
+td {
+ text-align: left;
+ vertical-align: top;
+ padding-left: 0.5em;
+ padding-right: 0.5em;
+ padding-top: 0.3em;
+ padding-bottom: 0.2em;
+}
+
+th,
+thead td,
+tfoot td {
+ font-weight: bold;
+ text-align: center;
+}
+
+b {
+ font-weight: bold;
+}
+
+i {
+ font-style: italic;
+}
+
+pre {
+ font-size: 0.8em;
+ font-family: monospace, courier;
+ padding-left: 2em;
+ padding-top: 1em;
+}
+
+tt {
+ font-size: 0.8em;
+ font-family: monospace, courier;
+}
+
+h1 {
+ padding-top: 0.5em;
+ font-size: 2em;
+}
+
+h2 {
+ padding-top: 0.4em;
+ font-size: 1.3em;
+}
+
+h3 {
+ padding-top: 0.3em;
+ font-size: 1em;
+}
+
+p {
+ padding-top: 0.2em;
+ text-align: justify;
+}
+
+ol,
+ul {
+ padding-top: 0.3em;
+ padding-left: 1.5em;
+}
+
+label {
+ font-weight: bold;
+}
+
+a {
+ text-decoration: none;
+}
+
+a:hover {
+ text-decoration: underline;
+}
+
+input,
+textarea {
+ border: 1px #666666 solid;
+}
+
+button {
+ background: url('menu.gif');
+}
+
+input:focus,
+textarea:focus {
+ background: #ffcccc;
+}
+
+input.string {
+ width: 420px;
+}
+
+textarea.text {
+ width: 420px;
+ height: 200px;
+}
+
+html {
+ font-size: 10pt;
+ font-family: Arial,Helvetica;
+ color: #333333;
+ background: url('background.gif') repeat-x #3A3A3A;
+}
+
+a {
+ color: #FF5C1F;
+}
+
+div.flash {
+ position: absolute;
+ float: right;
+ padding: 10px;
+ top: 0px;
+ right: 0px;
+ opacity: 0.75;
+ margin: 10px 10px 10px 10px;
+ text-align: center;
+ clear: both;
+ color: #fff;
+ font-size: 11pt;
+ text-align: center;
+ vertical-align: middle;
+ cursor: pointer;
+ background: black;
+ border: 2px solid #fff;
+ -moz-border-radius: 5px;
+ -webkit-border-radius: 5px;
+ z-index: 2;
+}
+
+div.error {
+ -moz-border-radius: 5px;
+ -webkit-border-radius: 5px;
+ background-color: red;
+ color: white;
+ padding: 3px;
+ border: 1px solid #666;
+}
+
+.warn {
+ background-color: yellow;
+ color: black;
+ padding: 5px;
+}
+
+.info {
+ background-color: #E5FFE5;
+ color: black;
+ padding: 5px;
+}
+
+.error {
+ background-color: red;
+ color: white; padding: 5px;
+}
+
+.wrapper {
+ position: absolute;
+ top: 20px;
+ left: 20px;
+ /*
+ padding-top: 20px;
+ padding-left: 20px;
+ */
+}
+
+.layout {
+ width: 95%;
+ padding: 0;
+ border: 1px #99f solid;
+ border-spacing: 0;
+ background: #fff;
+ z-index: 1;
+}
+
+.header {
+ background: url('header.gif');
+ color: white;
+ border-bottom: 1px #99f solid;
+}
+
+.statusbar {
+ background: url('menu.gif');
+ border-bottom: 1px #99f solid;
+}
+
+.footer {
+ background: url('header.gif');
+ color: white;
+ border-top: 1px #99f solid;
+}
+
+.column1 {
+ border-right: 1px #99f solid;
+}
+
+.width10em {
+ width: 10em;
+ background: transparent;
+}
+
+.expandable {
+ background: transparent;
+}
+
+ul.web2py-menu,
+ul.web2py-menu ul,
+ul.web2py-menu li,
+ul.web2py-menu a
+{
+ -moz-border-radius: 5px;
+ -webkit-border-radius: 5px;
+ display: block;
+ margin: 0;
+ padding: 0;
+}
+
+ul.web2py-menu {
+ background: transparent;
+}
+
+ul.web2py-menu,
+ul.web2py-menu li,
+ul.web2py-menu ul
+{
+ list-style: none;
+}
+
+ul.web2py-menu ul
+{
+ display: none;
+}
+
+ul.web2py-menu li
+{
+ position: relative;
+ z-index: 1;
+}
+
+ul.web2py-menu li:hover
+{
+ z-index: 999;
+}
+
+ul.web2py-menu li:hover > ul
+{
+ display: block;
+ position: absolute;
+}
+
+ul.web2py-menu-horizontal li
+{
+ float: left;
+ width: auto;
+}
+
+ul.web2py-menu-hRight li
+{
+ float: right;
+}
+
+ul.web2py-menu-vertical li
+{
+ float: none;
+}
+
+ul.web2py-menu-vertical,
+ul.web2py-menu-vertical ul
+{
+ width: 10em;
+}
+
+ul.web2py-menu-wide
+{
+ width: 100%;
+}
+
+ul.web2py-menu-vRight
+{
+ float: right;
+}
+
+ul.web2py-menu-lFloat
+{
+ float: left;
+}
+
+ul.web2py-menu-noFloat
+{
+ float: none;
+}
+
+div.web2py-menu-center ul.web2py-menu
+{
+ float: left;
+ position: relative;
+ left: 50%;
+}
+
+div.web2py-menu-center ul.web2py-menu li
+{
+ position: relative;
+ left: -50%;
+}
+
+div.web2py-menu-center ul.web2py-menu li li
+{
+ left: auto;
+}
+
+ul.web2py-menu-horizontal ul
+{
+ top: auto;
+ right: auto;
+ left: auto;
+ margin-top: -1px;
+}
+
+ul.web2py-menu-vertical ul
+{
+ left: 60%;
+ right: auto;
+ top: auto;
+ margin-top: -0.5em;
+}
+
+ul.web2py-menu-vRight ul,
+ul.web2py-menu-hRight ul.web2py-menu-vertical ul,
+ul.web2py-menu-dRight,
+ul.web2py-menu-dRight ul
+{
+ left: -60%;
+ right: auto;
+ top: auto;
+ margin-top: -0.5em;
+}
+
+ul.web2py-menu-hRight ul
+{
+ left: auto;
+ right: 0;
+ top: auto;
+ margin-top: -1px;
+}
+
+ul.web2py-menu li a
+{
+ border: solid 1px #99f
+}
+
+ul.web2py-menu-horizontal li
+{
+ margin-bottom: -1px;
+ margin-left: -1px;
+}
+
+ul.web2py-menu-horizontal
+{
+ padding-left: 1px ;
+}
+
+ul.web2py-menu-vertical li
+{
+ margin-left: 0;
+ margin-top: -1px;
+}
+
+ul.web2py-menu-vertical
+{
+ border-top: solid 1px #fff;
+}
+
+ul.web2py-menu li a
+{
+ padding: 2px 5px 3px;
+}
+
+ul.web2py-menu li a:link,
+ul.web2py-menu li a:hover,
+ul.web2py-menu li a:visited,
+ul.web2py-menu li a:active
+{
+ text-decoration: none;
+}
+
+ul.web2py-menu li.sfhover a:active,
+ul.web2py-menu li:hover a:active
+{
+ color: #fff;
+ background-color: #c00;
+}
+
+ul.web2py-menu li
+{
+ background: url('menu.gif');
+}
+
+ul.web2py-menu li:hover,
+ul.web2py-menu li.sfhover
+{
+ background-color: #eda;
+}
+
+ul.web2py-menu li a:hover
+{
+ background-color: #ffc;
+}
+
+.web2py-menu-active a {
+ background-color: white;
+}
+
+ul.web2py-menu li.web2py-menu-expand a,
+ul.web2py-menu li.web2py-menu-expand li.web2py-menu-expand a,
+ul.web2py-menu li.web2py-menu-expand li.web2py-menu-expand li.web2py-menu-expand a
+{
+ padding-right: 25px;
+ /*
+ background-image: url("expand-right.gif");
+ background-repeat: no-repeat;
+ background-position: 100% 50%;
+ */
+}
+
+ul.web2py-menu-vRight li.web2py-menu-expand a,
+ul.web2py-menu-vRight li.web2py-menu-expand li.web2py-menu-expand a,
+ul.web2py-menu-vRight li.web2py-menu-expand li.web2py-menu-expand li.web2py-menu-expand a,
+ul.web2py-menu-hRight li.web2py-menu-expand a,
+ul.web2py-menu-hRight li.web2py-menu-expand li.web2py-menu-expand a,
+ul.web2py-menu-hRight li.web2py-menu-expand li.web2py-menu-expand li.web2py-menu-expand a
+{
+ padding-right: 5px;
+ padding-left: 20px;
+ /*
+ background-image: url("expand-left.gif");
+ background-repeat: no-repeat;
+ background-position: -5px 50%;
+ */
+}
+
+ul.web2py-menu-horizontal li.web2py-menu-expand a
+{
+ padding-left: 5px;
+ padding-right: 15px;
+ /*
+ background-image: url("expand-down.gif");
+ background-position: 100% 50%;
+ */
+}
+
+ul.web2py-menu li.web2py-menu-expand li a,
+ul.web2py-menu li.web2py-menu-expand li.web2py-menu-expand li a,
+ul.web2py-menu li.web2py-menu-expand li.web2py-menu-expand li.web2py-menu-expand li a
+{
+ background-image: none;
+ padding-right: 5px;
+ padding-left: 5px;
+}
+
+* html ul.web2py-menu
+{
+ display: inline-block;
+ display: block;
+ position: relative;
+ position: static;
+}
+
+* html ul.web2py-menu ul
+{
+ float: left;
+ float: none;
+}
+
+ul.web2py-menu ul
+{
+ background-color: #fff;
+}
+
+* html ul.web2py-menu-vertical li,
+* html ul.web2py-menu-horizontal li ul.web2py-menu-vertical li
+{
+
+ width: 100%;
+ float: left;
+ clear: left;
+}
+
+*:first-child+html ul.web2py-menu-vertical > li:hover ul
+{
+ min-width: 0;
+}
+
+ul.web2py-menu li a
+{
+ position: relative;
+ min-width: 0;
+}
+
+* html ul.web2py-menu-horizontal li
+{
+ width: 6em;
+ width: auto;
+}
+
+* html div.web2py-menu-center
+{
+ position: relative;
+ z-index: 1;
+}
+
+html:not([lang*=""]) div.web2py-menu-center ul.web2py-menu li a:hover {
+ height: 100%;
+}
+
+html:not([lang*=""]) div.web2py-menu-center ul.web2py-menu li a:hover {
+ height: auto;
+}
+
+* html ul.web2py-menu ul
+{
+ display: block;
+ position: absolute;
+}
+
+* html ul.web2py-menu ul,
+* html ul.web2py-menu-horizontal ul,
+* html ul.web2py-menu-vertical ul,
+* html ul.web2py-menu-vRight ul,
+* html ul.web2py-menu-hRight ul.web2py-menu-vertical ul,
+* html ul.web2py-menu-hRight ul
+{
+ left: -10000px;
+}
+
+* html ul.web2py-menu li.sfhover
+{
+ z-index: 999;
+}
+
+* html ul.web2py-menu li.sfhover ul
+{
+ left: auto;
+}
+
+* html ul.web2py-menu li.sfhover ul ul,
+* html ul.web2py-menu li.sfhover ul ul ul
+{
+ display: none;
+}
+
+* html ul.web2py-menu li.sfhover ul,
+* html ul.web2py-menu li li.sfhover ul,
+* html ul.web2py-menu li li li.sfhover ul
+{
+ display: block;
+}
+
+* html ul.web2py-menu-vertical li.sfhover ul
+{
+ left: 60%;
+}
+
+* html ul.web2py-menu-vRight li.sfhover ul,
+* html ul.web2py-menu-hRight ul.web2py-menu-vertical li.sfhover ul
+{
+ left: -60%;
+}
+
+* html ul.web2py-menu iframe
+{
+
+
+ position: absolute;
+ left: 0;
+ top: 0;
+ z-index: -1;
+}
+
+.clearfix:after
+{
+ content: ".";
+ display: block;
+ height: 0;
+ clear: both;
+ visibility: hidden;
+}
+
+.clearfix
+{
+ min-width: 0;
+ display: inline-block;
+ display: block;
+}
+
+* html .clearfix
+{
+ height: 1%;
+}
+
diff --git a/static/calendar.css b/static/calendar.css
new file mode 100644
index 0000000..d09cbb2
--- /dev/null
+++ b/static/calendar.css
@@ -0,0 +1 @@
+.calendar{z-index:99;position:relative;display:none;border-top:2px solid #fff;border-right:2px solid #000;border-bottom:2px solid #000;border-left:2px solid #fff;font-size:11px;color:#000;cursor:default;background:#d4d0c8;font-family:tahoma,verdana,sans-serif;}.calendar table{border-top:1px solid #000;border-right:1px solid #fff;border-bottom:1px solid #fff;border-left:1px solid #000;font-size:11px;color:#000;cursor:default;background:#d4d0c8;font-family:tahoma,verdana,sans-serif;}.calendar .button{text-align:center;padding:1px;border-top:1px solid #fff;border-right:1px solid #000;border-bottom:1px solid #000;border-left:1px solid #fff;}.calendar .nav{background:transparent}.calendar thead .title{font-weight:bold;padding:1px;border:1px solid #000;background:#848078;color:#fff;text-align:center;}.calendar thead .name{border-bottom:1px solid #000;padding:2px;text-align:center;background:#f4f0e8;}.calendar thead .weekend{color:#f00;}.calendar thead .hilite{border-top:2px solid #fff;border-right:2px solid #000;border-bottom:2px solid #000;border-left:2px solid #fff;padding:0;background-color:#e4e0d8;}.calendar thead .active{padding:2px 0 0 2px;border-top:1px solid #000;border-right:1px solid #fff;border-bottom:1px solid #fff;border-left:1px solid #000;background-color:#c4c0b8;}.calendar tbody .day{width:2em;text-align:right;padding:2px 4px 2px 2px;}.calendar tbody .day.othermonth{font-size:80%;color:#aaa;}.calendar tbody .day.othermonth.oweekend{color:#faa;}.calendar table .wn{padding:2px 3px 2px 2px;border-right:1px solid #000;background:#f4f0e8;}.calendar tbody .rowhilite td{background:#e4e0d8;}.calendar tbody .rowhilite td.wn{background:#d4d0c8;}.calendar tbody td.hilite{padding:1px 3px 1px 1px;border-top:1px solid #fff;border-right:1px solid #000;border-bottom:1px solid #000;border-left:1px solid #fff;}.calendar tbody td.active{padding:2px 2px 0 2px;border-top:1px solid #000;border-right:1px solid #fff;border-bottom:1px solid #fff;border-left:1px solid #000;}.calendar tbody td.selected{font-weight:bold;border-top:1px solid #000;border-right:1px solid #fff;border-bottom:1px solid #fff;border-left:1px solid #000;padding:2px 2px 0 2px;background:#e4e0d8;}.calendar tbody td.weekend{color:#f00;}.calendar tbody td.today{font-weight:bold;color:#00f;}.calendar tbody .disabled{color:#999;}.calendar tbody .emptycell{visibility:hidden;}.calendar tbody .emptyrow{display:none;}.calendar tfoot .ttip{background:#f4f0e8;padding:1px;border:1px solid #000;background:#848078;color:#fff;text-align:center;}.calendar tfoot .hilite{border-top:1px solid #fff;border-right:1px solid #000;border-bottom:1px solid #000;border-left:1px solid #fff;padding:1px;background:#e4e0d8;}.calendar tfoot .active{padding:2px 0 0 2px;border-top:1px solid #000;border-right:1px solid #fff;border-bottom:1px solid #fff;border-left:1px solid #000;}.calendar .combo{position:absolute;display:none;width:4em;top:0;left:0;cursor:default;border-top:1px solid #fff;border-right:1px solid #000;border-bottom:1px solid #000;border-left:1px solid #fff;background:#e4e0d8;font-size:90%;padding:1px;z-index:100;}.calendar .combo .label,.calendar .combo .label-IEfix{text-align:center;padding:1px;}.calendar .combo .label-IEfix{width:4em;}.calendar .combo .active{background:#c4c0b8;padding:0;border-top:1px solid #000;border-right:1px solid #fff;border-bottom:1px solid #fff;border-left:1px solid #000;}.calendar .combo .hilite{background:#048;color:#fea;}.calendar td.time{border-top:1px solid #000;padding:1px 0;text-align:center;background-color:#f4f0e8;}.calendar td.time .hour,.calendar td.time .minute,.calendar td.time .ampm{padding:0 3px 0 4px;border:1px solid #889;font-weight:bold;background-color:#fff;}.calendar td.time .ampm{text-align:center;}.calendar td.time .colon{padding:0 2px 0 3px;font-weight:bold;}.calendar td.time span.hilite{border-color:#000;background-color:#766;color:#fff;}.calendar td.time span.active{border-color:#f00;background-color:#000;color:#0f0;}#CP_hourcont{z-index:99;padding:0;position:absolute;border:1px dashed #666;background-color:#eee;display:none;}#CP_minutecont{z-index:99;background-color:#ddd;padding:1px;position:absolute;width:45px;display:none;}.floatleft{float:left;}.CP_hour{z-index:99;padding:1px;font-family:Arial,Helvetica,sans-serif;font-size:9px;white-space:nowrap;cursor:pointer;width:35px;}.CP_minute{z-index:99;padding:1px;font-family:Arial,Helvetica,sans-serif;font-size:9px;white-space:nowrap;cursor:pointer;width:auto;}.CP_over{background-color:#fff;z-index:99} \ No newline at end of file
diff --git a/static/calendar.js b/static/calendar.js
new file mode 100644
index 0000000..425a363
--- /dev/null
+++ b/static/calendar.js
@@ -0,0 +1,80 @@
+/* Copyright Notice for Dynarch Date Time Picker */
+/* Copyright Mihai Bazon, 2002-2005 | www.bazon.net/mishoo
+ * -----------------------------------------------------------
+ *
+ * The DHTML Calendar, version 1.0 "It is happening again"
+ *
+ * Details and latest version at:
+ * www.dynarch.com/projects/calendar
+ *
+ * This script is developed by Dynarch.com. Visit us at www.dynarch.com.
+ *
+ * This script is distributed under the GNU Lesser General Public License.
+ * Read the entire license text here: http://www.gnu.org/licenses/lgpl.html
+ */
+
+// Calendar EN language
+// Author: Mihai Bazon, <mihai_bazon@yahoo.com>
+// Encoding: any
+// Distributed under the same terms as the calendar itself.
+/* End Copyright Notice for Dynarch Date Time Picker */
+
+/*
+ClockPick, by Josh Nathanson
+Version 1.2.4
+Timepicker plugin for jQuery
+See copyright at end of file
+Complete documentation at http://www.oakcitygraphics.com/jquery/clockpick/trunk/ClockPick.cfm
+
+name clockpick
+type jQuery
+param options hash object containing config options
+param options[starthour] int starting hour (use military int)
+param options[endhour] int ending hour (use military int)
+param options[showminutes] bool show minutes
+param options[minutedivisions] int number of divisions, i.e. 4 = :00, :15, :30, :45
+param options[military] bool use 24hr time if true
+param options[event] string mouse event to trigger plugin
+param options[layout] string set div layout to vertical or horizontal
+ ('vertical','horizontal')
+param options[valuefield] string field to insert time value, if not same as click field
+ (name of input field)
+param options[useBgiframe] bool set true if using bgIframe plugin
+param options[hoursopacity] float set opacity of hours container
+param options[minutesopacity] float set opacity of minutes container
+param callback function callback function - gets passed back the time value as a
+ string
+*/
+
+/* Copyright Notice for jQuery Clockpick */
+/*
++-----------------------------------------------------------------------+
+| Copyright (c) 2007 Josh Nathanson |
+| All rights reserved. |
+| |
+| Redistribution and use in source and binary forms, with or without |
+| modification, are permitted provided that the following conditions |
+| are met: |
+| |
+| o Redistributions of source code must retain the above copyright |
+| notice, this list of conditions and the following disclaimer. |
+| o Redistributions in binary form must reproduce the above copyright |
+| notice, this list of conditions and the following disclaimer in the |
+| documentation and/or other materials provided with the distribution.|
+| |
+| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
+| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
+| LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
+| A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
+| OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
+| SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
+| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
+| DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
+| THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
+| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
+| |
++-----------------------------------------------------------------------+
+*/
+/* End Copyright Notice for jQuery Clockpick below */
+Calendar=function(J,K,H,G){this.activeDiv=null;this.currentDateEl=null;this.getDateStatus=null;this.getDateToolTip=null;this.getDateText=null;this.timeout=null;this.onSelected=H||null;this.onClose=G||null;this.dragging=false;this.hidden=false;this.minYear=1970;this.maxYear=2050;this.dateFormat=Calendar._TT.DEF_DATE_FORMAT;this.ttDateFormat=Calendar._TT.TT_DATE_FORMAT;this.isPopup=true;this.weekNumbers=true;this.firstDayOfWeek=typeof J=="number"?J:Calendar._FD;this.showsOtherMonths=false;this.dateStr=K;this.ar_days=null;this.showsTime=false;this.time24=true;this.yearStep=2;this.hiliteToday=true;this.multiple=null;this.table=null;this.element=null;this.tbody=null;this.firstdayname=null;this.monthsCombo=null;this.yearsCombo=null;this.hilitedMonth=null;this.activeMonth=null;this.hilitedYear=null;this.activeYear=null;this.dateClicked=false;if(typeof Calendar._SDN=="undefined"){if(typeof Calendar._SDN_len=="undefined"){Calendar._SDN_len=3}var L=new Array();for(var I=8;I>0;){L[--I]=Calendar._DN[I].substr(0,Calendar._SDN_len)}Calendar._SDN=L;if(typeof Calendar._SMN_len=="undefined"){Calendar._SMN_len=3}L=new Array();for(var I=12;I>0;){L[--I]=Calendar._MN[I].substr(0,Calendar._SMN_len)}Calendar._SMN=L}};Calendar._C=null;Calendar.is_ie=(/msie/i.test(navigator.userAgent)&&!/opera/i.test(navigator.userAgent));Calendar.is_ie5=(Calendar.is_ie&&/msie 5\.0/i.test(navigator.userAgent));Calendar.is_opera=/opera/i.test(navigator.userAgent);Calendar.is_khtml=/Konqueror|Safari|KHTML/i.test(navigator.userAgent);Calendar.getAbsolutePos=function(I){var G=0,J=0;var K=/^div$/i.test(I.tagName);if(K&&I.scrollLeft){G=I.scrollLeft}if(K&&I.scrollTop){J=I.scrollTop}var H={x:I.offsetLeft-G,y:I.offsetTop-J};if(I.offsetParent){var L=this.getAbsolutePos(I.offsetParent);H.x+=L.x;H.y+=L.y}return H};Calendar.isRelated=function(G,E){var F=E.relatedTarget;if(!F){var H=E.type;if(H=="mouseover"){F=E.fromElement}else{if(H=="mouseout"){F=E.toElement}}}while(F){if(F==G){return true}F=F.parentNode}return false};Calendar.removeClass=function(G,H){if(!(G&&G.className)){return }var F=G.className.split(" ");var J=new Array();for(var I=F.length;I>0;){if(F[--I]!=H){J[J.length]=F[I]}}G.className=J.join(" ")};Calendar.addClass=function(D,C){Calendar.removeClass(D,C);D.className+=" "+C};Calendar.getElement=function(C){var D=Calendar.is_ie?window.event.srcElement:C.currentTarget;while(D.nodeType!=1||/^div$/i.test(D.tagName)){D=D.parentNode}return D};Calendar.getTargetElement=function(C){var D=Calendar.is_ie?window.event.srcElement:C.target;while(D.nodeType!=1){D=D.parentNode}return D};Calendar.stopEvent=function(B){B||(B=window.event);if(Calendar.is_ie){B.cancelBubble=true;B.returnValue=false}else{B.preventDefault();B.stopPropagation()}return false};Calendar.addEvent=function(D,E,F){if(D.attachEvent){D.attachEvent("on"+E,F)}else{if(D.addEventListener){D.addEventListener(E,F,true)}else{D["on"+E]=F}}};Calendar.removeEvent=function(D,E,F){if(D.detachEvent){D.detachEvent("on"+E,F)}else{if(D.removeEventListener){D.removeEventListener(E,F,true)}else{D["on"+E]=null}}};Calendar.createElement=function(E,F){var D=null;if(document.createElementNS){D=document.createElementNS("http://www.w3.org/1999/xhtml",E)}else{D=document.createElement(E)}if(typeof F!="undefined"){F.appendChild(D)}return D};Calendar._add_evs=function(el){with(Calendar){addEvent(el,"mouseover",dayMouseOver);addEvent(el,"mousedown",dayMouseDown);addEvent(el,"mouseout",dayMouseOut);if(is_ie){addEvent(el,"dblclick",dayMouseDblClick);el.setAttribute("unselectable",true)}}};Calendar.findMonth=function(B){if(typeof B.month!="undefined"){return B}else{if(typeof B.parentNode.month!="undefined"){return B.parentNode}}return null};Calendar.findYear=function(B){if(typeof B.year!="undefined"){return B}else{if(typeof B.parentNode.year!="undefined"){return B.parentNode}}return null};Calendar.showMonthsCombo=function(){var I=Calendar._C;if(!I){return false}var I=I;var H=I.activeDiv;var J=I.monthsCombo;if(I.hilitedMonth){Calendar.removeClass(I.hilitedMonth,"hilite")}if(I.activeMonth){Calendar.removeClass(I.activeMonth,"active")}var K=I.monthsCombo.getElementsByTagName("div")[I.date.getMonth()];Calendar.addClass(K,"active");I.activeMonth=K;var L=J.style;L.display="block";if(H.navtype<0){L.left=H.offsetLeft+"px"}else{var G=J.offsetWidth;if(typeof G=="undefined"){G=50}L.left=(H.offsetLeft+H.offsetWidth-G)+"px"}L.top=(H.offsetTop+H.offsetHeight)+"px"};Calendar.showYearsCombo=function(K){var N=Calendar._C;if(!N){return false}var N=N;var L=N.activeDiv;var S=N.yearsCombo;if(N.hilitedYear){Calendar.removeClass(N.hilitedYear,"hilite")}if(N.activeYear){Calendar.removeClass(N.activeYear,"active")}N.activeYear=null;var M=N.date.getFullYear()+(K?1:-1);var P=S.firstChild;var Q=false;for(var T=12;T>0;--T){if(M>=N.minYear&&M<=N.maxYear){P.innerHTML=M;P.year=M;P.style.display="block";Q=true}else{P.style.display="none"}P=P.nextSibling;M+=K?N.yearStep:-N.yearStep}if(Q){var O=S.style;O.display="block";if(L.navtype<0){O.left=L.offsetLeft+"px"}else{var R=S.offsetWidth;if(typeof R=="undefined"){R=50}O.left=(L.offsetLeft+L.offsetWidth-R)+"px"}O.top=(L.offsetTop+L.offsetHeight)+"px"}};Calendar.tableMouseUp=function(ev){var cal=Calendar._C;if(!cal){return false}if(cal.timeout){clearTimeout(cal.timeout)}var el=cal.activeDiv;if(!el){return false}var target=Calendar.getTargetElement(ev);ev||(ev=window.event);Calendar.removeClass(el,"active");if(target==el||target.parentNode==el){Calendar.cellClick(el,ev)}var mon=Calendar.findMonth(target);var date=null;if(mon){date=new Date(cal.date);if(mon.month!=date.getMonth()){date.setMonth(mon.month);cal.setDate(date);cal.dateClicked=false;cal.callHandler()}}else{var year=Calendar.findYear(target);if(year){date=new Date(cal.date);if(year.year!=date.getFullYear()){date.setFullYear(year.year);cal.setDate(date);cal.dateClicked=false;cal.callHandler()}}}with(Calendar){removeEvent(document,"mouseup",tableMouseUp);removeEvent(document,"mouseover",tableMouseOver);removeEvent(document,"mousemove",tableMouseOver);cal._hideCombos();_C=null;return stopEvent(ev)}};Calendar.tableMouseOver=function(X){var T=Calendar._C;if(!T){return }var R=T.activeDiv;var b=Calendar.getTargetElement(X);if(b==R||b.parentNode==R){Calendar.addClass(R,"hilite active");Calendar.addClass(R.parentNode,"rowhilite")}else{if(typeof R.navtype=="undefined"||(R.navtype!=50&&(R.navtype==0||Math.abs(R.navtype)>2))){Calendar.removeClass(R,"active")}Calendar.removeClass(R,"hilite");Calendar.removeClass(R.parentNode,"rowhilite")}X||(X=window.event);if(R.navtype==50&&b!=R){var Y=Calendar.getAbsolutePos(R);var V=R.offsetWidth;var W=X.clientX;var U;var Z=true;if(W>Y.x+V){U=W-Y.x-V;Z=false}else{U=Y.x-W}if(U<0){U=0}var e=R._range;var c=R._current;var d=Math.floor(U/10)%e.length;for(var f=e.length;--f>=0;){if(e[f]==c){break}}while(d-->0){if(Z){if(--f<0){f=e.length-1}}else{if(++f>=e.length){f=0}}}var S=e[f];R.innerHTML=S;T.onUpdateTime()}var Q=Calendar.findMonth(b);if(Q){if(Q.month!=T.date.getMonth()){if(T.hilitedMonth){Calendar.removeClass(T.hilitedMonth,"hilite")}Calendar.addClass(Q,"hilite");T.hilitedMonth=Q}else{if(T.hilitedMonth){Calendar.removeClass(T.hilitedMonth,"hilite")}}}else{if(T.hilitedMonth){Calendar.removeClass(T.hilitedMonth,"hilite")}var a=Calendar.findYear(b);if(a){if(a.year!=T.date.getFullYear()){if(T.hilitedYear){Calendar.removeClass(T.hilitedYear,"hilite")}Calendar.addClass(a,"hilite");T.hilitedYear=a}else{if(T.hilitedYear){Calendar.removeClass(T.hilitedYear,"hilite")}}}else{if(T.hilitedYear){Calendar.removeClass(T.hilitedYear,"hilite")}}}return Calendar.stopEvent(X)};Calendar.tableMouseDown=function(B){if(Calendar.getTargetElement(B)==Calendar.getElement(B)){return Calendar.stopEvent(B)}};Calendar.calDragIt=function(J){var I=Calendar._C;if(!(I&&I.dragging)){return false}var G;var H;if(Calendar.is_ie){H=window.event.clientY+document.body.scrollTop;G=window.event.clientX+document.body.scrollLeft}else{G=J.pageX;H=J.pageY}I.hideShowCovered();var F=I.element.style;F.left=(G-I.xOffs)+"px";F.top=(H-I.yOffs)+"px";return Calendar.stopEvent(J)};Calendar.calDragEnd=function(ev){var cal=Calendar._C;if(!cal){return false}cal.dragging=false;with(Calendar){removeEvent(document,"mousemove",calDragIt);removeEvent(document,"mouseup",calDragEnd);tableMouseUp(ev)}cal.hideShowCovered()};Calendar.dayMouseDown=function(ev){var el=Calendar.getElement(ev);if(el.disabled){return false}var cal=el.calendar;cal.activeDiv=el;Calendar._C=cal;if(el.navtype!=300){with(Calendar){if(el.navtype==50){el._current=el.innerHTML;addEvent(document,"mousemove",tableMouseOver)}else{addEvent(document,Calendar.is_ie5?"mousemove":"mouseover",tableMouseOver)}addClass(el,"hilite active");addEvent(document,"mouseup",tableMouseUp)}}else{if(cal.isPopup){cal._dragStart(ev)}}if(el.navtype==-1||el.navtype==1){if(cal.timeout){clearTimeout(cal.timeout)}cal.timeout=setTimeout("Calendar.showMonthsCombo()",250)}else{if(el.navtype==-2||el.navtype==2){if(cal.timeout){clearTimeout(cal.timeout)}cal.timeout=setTimeout((el.navtype>0)?"Calendar.showYearsCombo(true)":"Calendar.showYearsCombo(false)",250)}else{cal.timeout=null}}return Calendar.stopEvent(ev)};Calendar.dayMouseDblClick=function(B){Calendar.cellClick(Calendar.getElement(B),B||window.event);if(Calendar.is_ie){document.selection.empty()}};Calendar.dayMouseOver=function(D){var C=Calendar.getElement(D);if(Calendar.isRelated(C,D)||Calendar._C||C.disabled){return false}if(C.ttip){if(C.ttip.substr(0,1)=="_"){C.ttip=C.caldate.print(C.calendar.ttDateFormat)+C.ttip.substr(1)}C.calendar.tooltips.innerHTML=C.ttip}if(C.navtype!=300){Calendar.addClass(C,"hilite");if(C.caldate){Calendar.addClass(C.parentNode,"rowhilite")}}return Calendar.stopEvent(D)};Calendar.dayMouseOut=function(ev){with(Calendar){var el=getElement(ev);if(isRelated(el,ev)||_C||el.disabled){return false}removeClass(el,"hilite");if(el.caldate){removeClass(el.parentNode,"rowhilite")}if(el.calendar){el.calendar.tooltips.innerHTML=_TT.SEL_DATE}return stopEvent(ev)}};Calendar.cellClick=function(d,U){var Q=d.calendar;var a=false;var X=false;var c=null;if(typeof d.navtype=="undefined"){if(Q.currentDateEl){Calendar.removeClass(Q.currentDateEl,"selected");Calendar.addClass(d,"selected");a=(Q.currentDateEl==d);if(!a){Q.currentDateEl=d}}Q.date.setDateOnly(d.caldate);c=Q.date;var R=!(Q.dateClicked=!d.otherMonth);if(!R&&!Q.currentDateEl){Q._toggleMultipleDate(new Date(c))}else{X=!d.disabled}if(R){Q._init(Q.firstDayOfWeek,c)}}else{if(d.navtype==200){Calendar.removeClass(d,"hilite");Q.callCloseHandler();return }c=new Date(Q.date);if(d.navtype==0){c.setDateOnly(new Date())}Q.dateClicked=false;var V=c.getFullYear();var b=c.getMonth();function S(B){var A=c.getDate();var C=c.getMonthDays(B);if(A>C){c.setDate(C)}c.setMonth(B)}switch(d.navtype){case 400:Calendar.removeClass(d,"hilite");var T=Calendar._TT.ABOUT;if(typeof T!="undefined"){T+=Q.showsTime?Calendar._TT.ABOUT_TIME:""}else{T='Help and about box text is not translated into this language.\nIf you know this language and you feel generous please update\nthe corresponding file in "lang" subdir to match calendar-en.js\nand send it back to <mihai_bazon@yahoo.com> to get it into the distribution ;-)\n\nThank you!\nhttp://dynarch.com/mishoo/calendar.epl\n'}alert(T);return ;case -2:if(V>Q.minYear){c.setFullYear(V-1)}break;case -1:if(b>0){S(b-1)}else{if(V-->Q.minYear){c.setFullYear(V);S(11)}}break;case 1:if(b<11){S(b+1)}else{if(V<Q.maxYear){c.setFullYear(V+1);S(0)}}break;case 2:if(V<Q.maxYear){c.setFullYear(V+1)}break;case 100:Q.setFirstDayOfWeek(d.fdow);return ;case 50:var Y=d._range;var W=d.innerHTML;for(var Z=Y.length;--Z>=0;){if(Y[Z]==W){break}}if(U&&U.shiftKey){if(--Z<0){Z=Y.length-1}}else{if(++Z>=Y.length){Z=0}}var P=Y[Z];d.innerHTML=P;Q.onUpdateTime();return ;case 0:if((typeof Q.getDateStatus=="function")&&Q.getDateStatus(c,c.getFullYear(),c.getMonth(),c.getDate())){return false}break}if(!c.equalsTo(Q.date)){Q.setDate(c);X=true}else{if(d.navtype==0){X=a=true}}}if(X){U&&Q.callHandler()}if(a){Calendar.removeClass(d,"hilite");U&&Q.callCloseHandler()}};Calendar.prototype.create=function(Y){var Z=null;if(!Y){Z=document.getElementsByTagName("body")[0];this.isPopup=true}else{Z=Y;this.isPopup=false}this.date=this.dateStr?new Date(this.dateStr):new Date();var V=Calendar.createElement("table");this.table=V;V.cellSpacing=0;V.cellPadding=0;V.calendar=this;Calendar.addEvent(V,"mousedown",Calendar.tableMouseDown);var T=Calendar.createElement("div");this.element=T;T.className="calendar";if(this.isPopup){T.style.position="absolute";T.style.display="none"}T.appendChild(V);var b=Calendar.createElement("thead",V);var X=null;var U=null;var S=this;var f=function(A,B,C){X=Calendar.createElement("td",U);X.colSpan=B;X.className="button";if(C!=0&&Math.abs(C)<=2){X.className+=" nav"}Calendar._add_evs(X);X.calendar=S;X.navtype=C;X.innerHTML="<div unselectable='on'>"+A+"</div>";return X};U=Calendar.createElement("tr",b);var R=6;(this.isPopup)&&--R;(this.weekNumbers)&&++R;f("?",1,400).ttip=Calendar._TT.INFO;this.title=f("",R,300);this.title.className="title";if(this.isPopup){this.title.ttip=Calendar._TT.DRAG_TO_MOVE;this.title.style.cursor="move";f("&#x00d7;",1,200).ttip=Calendar._TT.CLOSE}U=Calendar.createElement("tr",b);U.className="headrow";this._nav_py=f("&#x00ab;",1,-2);this._nav_py.ttip=Calendar._TT.PREV_YEAR;this._nav_pm=f("&#x2039;",1,-1);this._nav_pm.ttip=Calendar._TT.PREV_MONTH;this._nav_now=f(Calendar._TT.TODAY,this.weekNumbers?4:3,0);this._nav_now.ttip=Calendar._TT.GO_TODAY;this._nav_nm=f("&#x203a;",1,1);this._nav_nm.ttip=Calendar._TT.NEXT_MONTH;this._nav_ny=f("&#x00bb;",1,2);this._nav_ny.ttip=Calendar._TT.NEXT_YEAR;U=Calendar.createElement("tr",b);U.className="daynames";if(this.weekNumbers){X=Calendar.createElement("td",U);X.className="name wn";X.innerHTML=Calendar._TT.WK}for(var c=7;c>0;--c){X=Calendar.createElement("td",U);if(!c){X.navtype=100;X.calendar=this;Calendar._add_evs(X)}}this.firstdayname=(this.weekNumbers)?U.firstChild.nextSibling:U.firstChild;this._displayWeekdays();var d=Calendar.createElement("tbody",V);this.tbody=d;for(c=6;c>0;--c){U=Calendar.createElement("tr",d);if(this.weekNumbers){X=Calendar.createElement("td",U)}for(var e=7;e>0;--e){X=Calendar.createElement("td",U);X.calendar=this;Calendar._add_evs(X)}}if(this.showsTime){U=Calendar.createElement("tr",d);U.className="time";X=Calendar.createElement("td",U);X.className="time";X.colSpan=2;X.innerHTML=Calendar._TT.TIME||"&nbsp;";X=Calendar.createElement("td",U);X.className="time";X.colSpan=this.weekNumbers?4:3;(function(){function F(P,N,O,L){var K=Calendar.createElement("span",X);K.className=P;K.innerHTML=N;K.calendar=S;K.ttip=Calendar._TT.TIME_PART;K.navtype=50;K._range=[];if(typeof O!="number"){K._range=O}else{for(var J=O;J<=L;++J){var M;if(J<10&&L>=10){M="0"+J}else{M=""+J}K._range[K._range.length]=M}}Calendar._add_evs(K);return K}var B=S.date.getHours();var I=S.date.getMinutes();var A=!S.time24;var H=(B>12);if(A&&H){B-=12}var D=F("hour",B,A?1:0,A?12:23);var E=Calendar.createElement("span",X);E.innerHTML=":";E.className="colon";var G=F("minute",I,0,59);var C=null;X=Calendar.createElement("td",U);X.className="time";X.colSpan=2;if(A){C=F("ampm",H?"pm":"am",["am","pm"])}else{X.innerHTML="&nbsp;"}S.onSetTime=function(){var K,L=this.date.getHours(),J=this.date.getMinutes();if(A){K=(L>=12);if(K){L-=12}if(L==0){L=12}C.innerHTML=K?"pm":"am"}D.innerHTML=(L<10)?("0"+L):L;G.innerHTML=(J<10)?("0"+J):J};S.onUpdateTime=function(){var K=this.date;var J=parseInt(D.innerHTML,10);if(A){if(/pm/i.test(C.innerHTML)&&J<12){J+=12}else{if(/am/i.test(C.innerHTML)&&J==12){J=0}}}var N=K.getDate();var M=K.getMonth();var L=K.getFullYear();K.setHours(J);K.setMinutes(parseInt(G.innerHTML,10));K.setFullYear(L);K.setMonth(M);K.setDate(N);this.dateClicked=false;this.callHandler()}})()}else{this.onSetTime=this.onUpdateTime=function(){}}var a=Calendar.createElement("tfoot",V);U=Calendar.createElement("tr",a);U.className="footrow";X=f(Calendar._TT.SEL_DATE,this.weekNumbers?8:7,300);X.className="ttip";if(this.isPopup){X.ttip=Calendar._TT.DRAG_TO_MOVE;X.style.cursor="move"}this.tooltips=X;T=Calendar.createElement("div",this.element);this.monthsCombo=T;T.className="combo";for(c=0;c<Calendar._MN.length;++c){var Q=Calendar.createElement("div");Q.className=Calendar.is_ie?"label-IEfix":"label";Q.month=c;Q.innerHTML=Calendar._SMN[c];T.appendChild(Q)}T=Calendar.createElement("div",this.element);this.yearsCombo=T;T.className="combo";for(c=12;c>0;--c){var W=Calendar.createElement("div");W.className=Calendar.is_ie?"label-IEfix":"label";T.appendChild(W)}this._init(this.firstDayOfWeek,this.date);Z.appendChild(this.element)};Calendar._keyEvent=function(T){var Q=window._dynarch_popupCalendar;if(!Q||Q.multiple){return false}(Calendar.is_ie)&&(T=window.event);var V=(Calendar.is_ie||T.type=="keypress"),S=T.keyCode;if(T.ctrlKey){switch(S){case 37:V&&Calendar.cellClick(Q._nav_pm);break;case 38:V&&Calendar.cellClick(Q._nav_py);break;case 39:V&&Calendar.cellClick(Q._nav_nm);break;case 40:V&&Calendar.cellClick(Q._nav_ny);break;default:return false}}else{switch(S){case 32:Calendar.cellClick(Q._nav_now);break;case 27:V&&Q.callCloseHandler();break;case 37:case 38:case 39:case 40:if(V){var Z,R,U,X,O,K;Z=S==37||S==38;K=(S==37||S==39)?1:7;function P(){O=Q.currentDateEl;var A=O.pos;R=A&15;U=A>>4;X=Q.ar_days[U][R]}P();function Y(){var A=new Date(Q.date);A.setDate(A.getDate()-K);Q.setDate(A)}function W(){var A=new Date(Q.date);A.setDate(A.getDate()+K);Q.setDate(A)}while(1){switch(S){case 37:if(--R>=0){X=Q.ar_days[U][R]}else{R=6;S=38;continue}break;case 38:if(--U>=0){X=Q.ar_days[U][R]}else{Y();P()}break;case 39:if(++R<7){X=Q.ar_days[U][R]}else{R=0;S=40;continue}break;case 40:if(++U<Q.ar_days.length){X=Q.ar_days[U][R]}else{W();P()}break}break}if(X){if(!X.disabled){Calendar.cellClick(X)}else{if(Z){Y()}else{W()}}}}break;case 13:if(V){Calendar.cellClick(Q.currentDateEl,T)}break;default:return false}}return Calendar.stopEvent(T)};Calendar.prototype._init=function(q,e){var f=new Date(),l=f.getFullYear(),c=f.getMonth(),AB=f.getDate();this.table.style.visibility="hidden";var v=e.getFullYear();if(v<this.minYear){v=this.minYear;e.setFullYear(v)}else{if(v>this.maxYear){v=this.maxYear;e.setFullYear(v)}}this.firstDayOfWeek=q;this.date=new Date(e);var d=e.getMonth();var a=e.getDate();var b=e.getMonthDays();e.setDate(1);var k=(e.getDay()-this.firstDayOfWeek)%7;if(k<0){k+=7}e.setDate(-k);e.setDate(e.getDate()+1);var y=this.tbody.firstChild;var s=Calendar._SMN[d];var o=this.ar_days=new Array();var p=Calendar._TT.WEEKEND;var z=this.multiple?(this.datesCells={}):null;for(var i=0;i<6;++i,y=y.nextSibling){var AC=y.firstChild;if(this.weekNumbers){AC.className="day wn";AC.innerHTML=e.getWeekNumber();AC=AC.nextSibling}y.className="daysrow";var g=false,x,AA=o[i]=[];for(var j=0;j<7;++j,AC=AC.nextSibling,e.setDate(x+1)){x=e.getDate();var w=e.getDay();AC.className="day";AC.pos=i<<4|j;AA[j]=AC;var r=(e.getMonth()==d);if(!r){if(this.showsOtherMonths){AC.className+=" othermonth";AC.otherMonth=true}else{AC.className="emptycell";AC.innerHTML="&nbsp;";AC.disabled=true;continue}}else{AC.otherMonth=false;g=true}AC.disabled=false;AC.innerHTML=this.getDateText?this.getDateText(e,x):x;if(z){z[e.print("%Y%m%d")]=AC}if(this.getDateStatus){var n=this.getDateStatus(e,v,d,x);if(this.getDateToolTip){var u=this.getDateToolTip(e,v,d,x);if(u){AC.title=u}}if(n===true){AC.className+=" disabled";AC.disabled=true}else{if(/disabled/i.test(n)){AC.disabled=true}AC.className+=" "+n}}if(!AC.disabled){AC.caldate=new Date(e);AC.ttip="_";if(!this.multiple&&r&&x==a&&this.hiliteToday){AC.className+=" selected";this.currentDateEl=AC}if(e.getFullYear()==l&&e.getMonth()==c&&x==AB){AC.className+=" today";AC.ttip+=Calendar._TT.PART_TODAY}if(p.indexOf(w.toString())!=-1){AC.className+=AC.otherMonth?" oweekend":" weekend"}}}if(!(g||this.showsOtherMonths)){y.className="emptyrow"}}this.title.innerHTML=Calendar._MN[d]+", "+v;this.onSetTime();this.table.style.visibility="visible";this._initMultipleDates()};Calendar.prototype._initMultipleDates=function(){if(this.multiple){for(var F in this.multiple){var D=this.datesCells[F];var E=this.multiple[F];if(!E){continue}if(D){D.className+=" selected"}}}};Calendar.prototype._toggleMultipleDate=function(H){if(this.multiple){var G=H.print("%Y%m%d");var E=this.datesCells[G];if(E){var F=this.multiple[G];if(!F){Calendar.addClass(E,"selected");this.multiple[G]=H}else{Calendar.removeClass(E,"selected");delete this.multiple[G]}}}};Calendar.prototype.setDateToolTipHandler=function(B){this.getDateToolTip=B};Calendar.prototype.setDate=function(B){if(!B.equalsTo(this.date)){this._init(this.firstDayOfWeek,B)}};Calendar.prototype.refresh=function(){this._init(this.firstDayOfWeek,this.date)};Calendar.prototype.setFirstDayOfWeek=function(B){this._init(B,this.date);this._displayWeekdays()};Calendar.prototype.setDateStatusHandler=Calendar.prototype.setDisabledHandler=function(B){this.getDateStatus=B};Calendar.prototype.setRange=function(C,D){this.minYear=C;this.maxYear=D};Calendar.prototype.callHandler=function(){if(this.onSelected){this.onSelected(this,this.date.print(this.dateFormat))}};Calendar.prototype.callCloseHandler=function(){if(this.onClose){this.onClose(this)}this.hideShowCovered()};Calendar.prototype.destroy=function(){var B=this.element.parentNode;B.removeChild(this.element);Calendar._C=null;window._dynarch_popupCalendar=null};Calendar.prototype.reparent=function(D){var C=this.element;C.parentNode.removeChild(C);D.appendChild(C)};Calendar._checkCalendar=function(F){var E=window._dynarch_popupCalendar;if(!E){return false}var D=Calendar.is_ie?Calendar.getElement(F):Calendar.getTargetElement(F);for(;D!=null&&D!=E.element;D=D.parentNode){}if(D==null){window._dynarch_popupCalendar.callCloseHandler();return Calendar.stopEvent(F)}};Calendar.prototype.show=function(){var I=this.table.getElementsByTagName("tr");for(var J=I.length;J>0;){var H=I[--J];Calendar.removeClass(H,"rowhilite");var K=H.getElementsByTagName("td");for(var L=K.length;L>0;){var G=K[--L];Calendar.removeClass(G,"hilite");Calendar.removeClass(G,"active")}}this.element.style.display="block";this.hidden=false;if(this.isPopup){window._dynarch_popupCalendar=this;Calendar.addEvent(document,"keydown",Calendar._keyEvent);Calendar.addEvent(document,"keypress",Calendar._keyEvent);Calendar.addEvent(document,"mousedown",Calendar._checkCalendar)}this.hideShowCovered()};Calendar.prototype.hide=function(){if(this.isPopup){Calendar.removeEvent(document,"keydown",Calendar._keyEvent);Calendar.removeEvent(document,"keypress",Calendar._keyEvent);Calendar.removeEvent(document,"mousedown",Calendar._checkCalendar)}this.element.style.display="none";this.hidden=true;this.hideShowCovered()};Calendar.prototype.showAt=function(D,E){var F=this.element.style;F.left=D+"px";F.top=E+"px";this.show()};Calendar.prototype.showAtElement=function(I,H){var F=this;var G=Calendar.getAbsolutePos(I);if(!H||typeof H!="string"){this.showAt(G.x,G.y+I.offsetHeight);return true}function J(B){if(B.x<0){B.x=0}if(B.y<0){B.y=0}var A=document.createElement("div");var C=A.style;C.position="absolute";C.right=C.bottom=C.width=C.height="0px";document.body.appendChild(A);var D=Calendar.getAbsolutePos(A);document.body.removeChild(A);if(Calendar.is_ie){D.y+=document.body.scrollTop;D.x+=document.body.scrollLeft}else{D.y+=window.scrollY;D.x+=window.scrollX}var E=B.x+B.width-D.x;if(E>0){B.x-=E}E=B.y+B.height-D.y;if(E>0){B.y-=E}}this.element.style.display="block";Calendar.continuation_for_the_fucking_khtml_browser=function(){var D=F.element.offsetWidth;var B=F.element.offsetHeight;F.element.style.display="none";var C=H.substr(0,1);var A="l";if(H.length>1){A=H.substr(1,1)}switch(C){case"T":G.y-=B;break;case"B":G.y+=I.offsetHeight;break;case"C":G.y+=(I.offsetHeight-B)/2;break;case"t":G.y+=I.offsetHeight-B;break;case"b":break}switch(A){case"L":G.x-=D;break;case"R":G.x+=I.offsetWidth;break;case"C":G.x+=(I.offsetWidth-D)/2;break;case"l":G.x+=I.offsetWidth-D;break;case"r":break}G.width=D;G.height=B+40;F.monthsCombo.style.display="none";J(G);F.showAt(G.x,G.y)};if(Calendar.is_khtml){setTimeout("Calendar.continuation_for_the_fucking_khtml_browser()",10)}else{Calendar.continuation_for_the_fucking_khtml_browser()}};Calendar.prototype.setDateFormat=function(B){this.dateFormat=B};Calendar.prototype.setTtDateFormat=function(B){this.ttDateFormat=B};Calendar.prototype.parseDate=function(D,C){if(!C){C=this.dateFormat}this.setDate(Date.parseDate(D,C))};Calendar.prototype.hideShowCovered=function(){if(!Calendar.is_ie&&!Calendar.is_opera){return }function S(A){var B=A.style.visibility;if(!B){if(document.defaultView&&typeof (document.defaultView.getComputedStyle)=="function"){if(!Calendar.is_khtml){B=document.defaultView.getComputedStyle(A,"").getPropertyValue("visibility")}else{B=""}}else{if(A.currentStyle){B=A.currentStyle.visibility}else{B=""}}}return B}var U=new Array("applet","iframe","select");var R=this.element;var T=Calendar.getAbsolutePos(R);var e=T.x;var Q=R.offsetWidth+e;var V=T.y;var W=R.offsetHeight+V;for(var c=U.length;c>0;){var d=document.getElementsByTagName(U[--c]);var f=null;for(var a=d.length;a>0;){f=d[--a];T=Calendar.getAbsolutePos(f);var X=T.x;var Y=f.offsetWidth+X;var Z=T.y;var b=f.offsetHeight+Z;if(this.hidden||(X>Q)||(Y<e)||(Z>W)||(b<V)){if(!f.__msh_save_visibility){f.__msh_save_visibility=S(f)}f.style.visibility=f.__msh_save_visibility}else{if(!f.__msh_save_visibility){f.__msh_save_visibility=S(f)}f.style.visibility="hidden"}}}};Calendar.prototype._displayWeekdays=function(){var J=this.firstDayOfWeek;var F=this.firstdayname;var H=Calendar._TT.WEEKEND;for(var I=0;I<7;++I){F.className="day name";var G=(I+J)%7;if(I){F.ttip=Calendar._TT.DAY_FIRST.replace("%s",Calendar._DN[G]);F.navtype=100;F.calendar=this;F.fdow=G;Calendar._add_evs(F)}if(H.indexOf(G.toString())!=-1){Calendar.addClass(F,"weekend")}F.innerHTML=Calendar._SDN[(I+J)%7];F=F.nextSibling}};Calendar.prototype._hideCombos=function(){this.monthsCombo.style.display="none";this.yearsCombo.style.display="none"};Calendar.prototype._dragStart=function(ev){if(this.dragging){return }this.dragging=true;var posX;var posY;if(Calendar.is_ie){posY=window.event.clientY+document.body.scrollTop;posX=window.event.clientX+document.body.scrollLeft}else{posY=ev.clientY+window.scrollY;posX=ev.clientX+window.scrollX}var st=this.element.style;this.xOffs=posX-parseInt(st.left);this.yOffs=posY-parseInt(st.top);with(Calendar){addEvent(document,"mousemove",calDragIt);addEvent(document,"mouseup",calDragEnd)}};Date._MD=new Array(31,28,31,30,31,30,31,31,30,31,30,31);Date.SECOND=1000;Date.MINUTE=60*Date.SECOND;Date.HOUR=60*Date.MINUTE;Date.DAY=24*Date.HOUR;Date.WEEK=7*Date.DAY;Date.parseDate=function(X,Q){var W=new Date();var V=0;var P=-1;var Y=0;var T=X.split(/\W+/);var U=Q.match(/%./g);var Z=0,N=0;var S=0;var O=0;for(Z=0;Z<T.length;++Z){if(!T[Z]){continue}switch(U[Z]){case"%d":case"%e":Y=parseInt(T[Z],10);break;case"%m":P=parseInt(T[Z],10)-1;break;case"%Y":case"%y":V=parseInt(T[Z],10);(V<100)&&(V+=(V>29)?1900:2000);break;case"%b":case"%B":for(N=0;N<12;++N){if(Calendar._MN[N].substr(0,T[Z].length).toLowerCase()==T[Z].toLowerCase()){P=N;break}}break;case"%H":case"%I":case"%k":case"%l":S=parseInt(T[Z],10);break;case"%P":case"%p":if(/pm/i.test(T[Z])&&S<12){S+=12}else{if(/am/i.test(T[Z])&&S>=12){S-=12}}break;case"%M":O=parseInt(T[Z],10);break}}if(isNaN(V)){V=W.getFullYear()}if(isNaN(P)){P=W.getMonth()}if(isNaN(Y)){Y=W.getDate()}if(isNaN(S)){S=W.getHours()}if(isNaN(O)){O=W.getMinutes()}if(V!=0&&P!=-1&&Y!=0){return new Date(V,P,Y,S,O,0)}V=0;P=-1;Y=0;for(Z=0;Z<T.length;++Z){if(T[Z].search(/[a-zA-Z]+/)!=-1){var R=-1;for(N=0;N<12;++N){if(Calendar._MN[N].substr(0,T[Z].length).toLowerCase()==T[Z].toLowerCase()){R=N;break}}if(R!=-1){if(P!=-1){Y=P+1}P=R}}else{if(parseInt(T[Z],10)<=12&&P==-1){P=T[Z]-1}else{if(parseInt(T[Z],10)>31&&V==0){V=parseInt(T[Z],10);(V<100)&&(V+=(V>29)?1900:2000)}else{if(Y==0){Y=T[Z]}}}}}if(V==0){V=W.getFullYear()}if(P!=-1&&Y!=0){return new Date(V,P,Y,S,O,0)}return W};Date.prototype.getMonthDays=function(D){var C=this.getFullYear();if(typeof D=="undefined"){D=this.getMonth()}if(((0==(C%4))&&((0!=(C%100))||(0==(C%400))))&&D==1){return 29}else{return Date._MD[D]}};Date.prototype.getDayOfYear=function(){var D=new Date(this.getFullYear(),this.getMonth(),this.getDate(),0,0,0);var E=new Date(this.getFullYear(),0,0,0,0,0);var F=D-E;return Math.floor(F/Date.DAY)};Date.prototype.getWeekNumber=function(){var E=new Date(this.getFullYear(),this.getMonth(),this.getDate(),0,0,0);var F=E.getDay();E.setDate(E.getDate()-(F+6)%7+3);var D=E.valueOf();E.setMonth(0);E.setDate(4);return Math.round((D-E.valueOf())/(7*86400000))+1};Date.prototype.equalsTo=function(B){return((this.getFullYear()==B.getFullYear())&&(this.getMonth()==B.getMonth())&&(this.getDate()==B.getDate())&&(this.getHours()==B.getHours())&&(this.getMinutes()==B.getMinutes()))};Date.prototype.setDateOnly=function(C){var D=new Date(C);this.setDate(1);this.setFullYear(D.getFullYear());this.setMonth(D.getMonth());this.setDate(D.getDate())};Date.prototype.print=function(d){var U=this.getMonth();var e=this.getDate();var c=this.getFullYear();var a=this.getWeekNumber();var Z=this.getDay();var V={};var Y=this.getHours();var T=(Y>=12);var g=(T)?(Y-12):Y;var W=this.getDayOfYear();if(g==0){g=12}var S=this.getMinutes();var f=this.getSeconds();V["%a"]=Calendar._SDN[Z];V["%A"]=Calendar._DN[Z];V["%b"]=Calendar._SMN[U];V["%B"]=Calendar._MN[U];V["%C"]=1+Math.floor(c/100);V["%d"]=(e<10)?("0"+e):e;V["%e"]=e;V["%H"]=(Y<10)?("0"+Y):Y;V["%I"]=(g<10)?("0"+g):g;V["%j"]=(W<100)?((W<10)?("00"+W):("0"+W)):W;V["%k"]=Y;V["%l"]=g;V["%m"]=(U<9)?("0"+(1+U)):(1+U);V["%M"]=(S<10)?("0"+S):S;V["%n"]="\n";V["%p"]=T?"PM":"AM";V["%P"]=T?"pm":"am";V["%s"]=Math.floor(this.getTime()/1000);V["%S"]=(f<10)?("0"+f):f;V["%t"]="\t";V["%U"]=V["%W"]=V["%V"]=(a<10)?("0"+a):a;V["%u"]=Z+1;V["%w"]=Z;V["%y"]=(""+c).substr(2,2);V["%Y"]=c;V["%%"]="%";var X=/%./g;if(!Calendar.is_ie5&&!Calendar.is_khtml){return d.replace(X,function(A){return V[A]||A})}var b=d.match(X);for(var i=0;i<b.length;i++){var R=V[b[i]];if(R){X=new RegExp(b[i],"g");d=d.replace(X,R)}}return d};Date.prototype.__msh_oldSetFullYear=Date.prototype.setFullYear;Date.prototype.setFullYear=function(D){var C=new Date(this);C.__msh_oldSetFullYear(D);if(C.getMonth()!=this.getMonth()){this.setDate(28)}this.__msh_oldSetFullYear(D)};window._dynarch_popupCalendar=null;Calendar._DN=new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday");Calendar._SDN=new Array("Sun","Mon","Tue","Wed","Thu","Fri","Sat","Sun");Calendar._FD=0;Calendar._MN=new Array("January","February","March","April","May","June","July","August","September","October","November","December");Calendar._SMN=new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");Calendar._TT={};Calendar._TT.INFO="About the calendar";Calendar._TT.ABOUT="DHTML Date/Time Selector\n(c) dynarch.com 2002-2005 / Author: Mihai Bazon\nFor latest version visit: http://www.dynarch.com/projects/calendar/\nDistributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details.\n\nDate selection:\n- Use the \xab, \xbb buttons to select year\n- Use the "+String.fromCharCode(8249)+", "+String.fromCharCode(8250)+" buttons to select month\n- Hold mouse button on any of the above buttons for faster selection.";Calendar._TT.ABOUT_TIME="\n\nTime selection:\n- Click on any of the time parts to increase it\n- or Shift-click to decrease it\n- or click and drag for faster selection.";Calendar._TT.PREV_YEAR="Prev. year (hold for menu)";Calendar._TT.PREV_MONTH="Prev. month (hold for menu)";Calendar._TT.GO_TODAY="Go Today";Calendar._TT.NEXT_MONTH="Next month (hold for menu)";Calendar._TT.NEXT_YEAR="Next year (hold for menu)";Calendar._TT.SEL_DATE="Select date";Calendar._TT.DRAG_TO_MOVE="Drag to move";Calendar._TT.PART_TODAY=" (today)";Calendar._TT.DAY_FIRST="Display %s first";Calendar._TT.WEEKEND="0,6";Calendar._TT.CLOSE="Close";Calendar._TT.TODAY="Today";Calendar._TT.TIME_PART="(Shift-)Click or drag to change value";Calendar._TT.DEF_DATE_FORMAT="%Y-%m-%d";Calendar._TT.TT_DATE_FORMAT="%a, %b %e";Calendar._TT.WK="wk";Calendar._TT.TIME="Time:";Calendar.setup=function(I){function J(B,A){if(typeof I[B]=="undefined"){I[B]=A}}J("inputField",null);J("displayArea",null);J("button",null);J("eventName","click");J("ifFormat","%Y/%m/%d");J("daFormat","%Y/%m/%d");J("singleClick",true);J("disableFunc",null);J("dateStatusFunc",I.disableFunc);J("dateText",null);J("firstDay",null);J("align","Br");J("range",[1900,2999]);J("weekNumbers",true);J("flat",null);J("flatCallback",null);J("onSelect",null);J("onClose",null);J("onUpdate",null);J("date",null);J("showsTime",false);J("timeFormat","24");J("electric",true);J("step",2);J("position",null);J("cache",false);J("showOthers",false);J("multiple",null);var M=["inputField","displayArea","button"];for(var N in M){if(typeof I[M[N]]=="string"){I[M[N]]=document.getElementById(I[M[N]])}}if(!(I.flat||I.multiple||I.inputField||I.displayArea||I.button)){alert("Calendar.setup:\n Nothing to setup (no fields found). Please check your code");return false}function H(B){var C=B.params;var A=(B.dateClicked||C.electric);if(A&&C.inputField){C.inputField.value=B.date.print(C.ifFormat);if(typeof C.inputField.onchange=="function"){C.inputField.onchange()}}if(A&&C.displayArea){C.displayArea.innerHTML=B.date.print(C.daFormat)}if(A&&typeof C.onUpdate=="function"){C.onUpdate(B)}if(A&&C.flat){if(typeof C.flatCallback=="function"){C.flatCallback(B)}}if(A&&C.singleClick&&B.dateClicked){B.callCloseHandler()}}if(I.flat!=null){if(typeof I.flat=="string"){I.flat=document.getElementById(I.flat)}if(!I.flat){alert("Calendar.setup:\n Flat specified but can't find parent.");return false}var K=new Calendar(I.firstDay,I.date,I.onSelect||H);K.showsOtherMonths=I.showOthers;K.showsTime=I.showsTime;K.time24=(I.timeFormat=="24");K.params=I;K.weekNumbers=I.weekNumbers;K.setRange(I.range[0],I.range[1]);K.setDateStatusHandler(I.dateStatusFunc);K.getDateText=I.dateText;if(I.ifFormat){K.setDateFormat(I.ifFormat)}if(I.inputField&&typeof I.inputField.value=="string"){K.parseDate(I.inputField.value)}K.create(I.flat);K.show();return false}var L=I.button||I.displayArea||I.inputField;L["on"+I.eventName]=function(){var E=I.inputField||I.displayArea;var C=I.inputField?I.ifFormat:I.daFormat;var F=false;var A=window.calendar;if(E){I.date=Date.parseDate(E.value||E.innerHTML,C)}if(!(A&&I.cache)){window.calendar=A=new Calendar(I.firstDay,I.date,I.onSelect||H,I.onClose||function(P){P.hide()});A.showsTime=I.showsTime;A.time24=(I.timeFormat=="24");A.weekNumbers=I.weekNumbers;F=true}else{if(I.date){A.setDate(I.date)}A.hide()}if(I.multiple){A.multiple={};for(var D=I.multiple.length;--D>=0;){var G=I.multiple[D];var B=G.print("%Y%m%d");A.multiple[B]=G}}A.showsOtherMonths=I.showOthers;A.yearStep=I.step;A.setRange(I.range[0],I.range[1]);A.params=I;A.setDateStatusHandler(I.dateStatusFunc);A.getDateText=I.dateText;A.setDateFormat(C);if(F){A.create()}A.refresh();if(!I.position){A.showAtElement(I.button||I.displayArea||I.inputField,I.align)}else{A.showAt(I.position[0],I.position[1])}return false};return K};jQuery.fn.clockpick=function(options,callback){var settings={starthour:8,endhour:18,showminutes:true,minutedivisions:4,military:false,event:"click",layout:"vertical",valuefield:null,useBgiframe:false,hoursopacity:1,minutesopacity:1};if(options){jQuery.extend(settings,options)}var callback=callback||function(){},v=(settings.layout=="vertical");errorcheck();jQuery(this)[settings.event](function(e){var self=this,$self=jQuery(this),$body=jQuery("body");if(!settings.valuefield){$self.unbind("keydown").bind("keydown",keyhandler)}else{jQuery("[name="+settings.valuefield+"]").unbind("keydown").bind("keydown",keyhandler)[0].focus()}jQuery("#CP_hourcont,#CP_minutecont").remove();$hourcont=jQuery("<div id='CP_hourcont' class='CP' />").appendTo($body);!settings.useBgiframe?$hourcont.css("opacity",settings.hoursopacity):null;binder($hourcont);$hourcol1=jQuery("<div class='CP_hourcol' id='hourcol1' />").appendTo($body);$hourcol2=jQuery("<div class='CP_hourcol' id='hourcol2' />").appendTo($body);if(settings.showminutes){$mc=jQuery("<div id='CP_minutecont' class='CP' />").appendTo($body);!settings.useBgiframe?$mc.css("opacity",settings.minutesopacity):null;binder($mc)}if(!v){$hourcont.css("width","auto");$mc.css("width","auto")}else{$hourcol1.addClass("floatleft");$hourcol2.addClass("floatleft")}renderhours();putcontainer();function renderhours(){var c=1;for(h=settings.starthour;h<=settings.endhour;h++){if(h==12){c=1}displayhours=((!settings.military&&h>12)?h-12:h)+set_tt(h);if(!settings.military&&h==0){displayhours="12"+set_tt(h)}$hd=jQuery("<div class='CP_hour' id='hr_"+h+"_"+c+"'>"+displayhours+"</div>");if(settings.military){$hd.width(20)}binder($hd);if(!v){$hd.css("float","left")}(h<12)?$hourcol1.append($hd):$hourcol2.append($hd);c++}$hourcont.append($hourcol1);!v?$hourcont.append("<div style='clear:left' />"):"";$hourcont.append($hourcol2)}function renderminutes(h){realhours=h;displayhours=(!settings.military&&h>12)?h-12:h;if(!settings.military&&h==0){displayhours="12"}$mc.empty();var n=60/settings.minutedivisions,tt=set_tt(realhours),counter=1;for(m=0;m<60;m=m+n){$md=jQuery("<div class='CP_minute' id='"+realhours+"_"+m+"'>"+displayhours+":"+((m<10)?"0":"")+m+tt+"</div>");if(!v){$md.css("float","left");if(settings.minutedivisions>6&&counter==settings.minutedivisions/2+1){$mc.append("<div style='clear:left' />")}}$mc.append($md);binder($md);counter++}}function set_tt(realhours){if(!settings.military){return(realhours>=12)?" PM":" AM"}else{return""}}function putcontainer(){if(!jQuery.browser.safari&&e.type!="focus"){$hourcont.css("left",e.pageX-5).css("top",e.pageY-(Math.floor($hourcont.height()/2)));rectify($hourcont)}else{$self.after($hourcont)}$hourcont.show();if(settings.useBgiframe){bgi($hourcont)}}function rectify($obj){var ph=document.documentElement.clientHeight?document.documentElement.clientHeight:document.body.clientHeight;var pw=document.documentElement.clientWidth?document.documentElement.clientWidth:document.body.clientWidth;if(!jQuery.browser.safari){var t=parseInt($obj.css("top"));var l=parseInt($obj.css("left"))}else{var t=$obj[0].offsetTop;var l=$obj[0].offsetLeft}var st=document.documentElement.scrollTop?document.documentElement.scrollTop:document.body.scrollTop;if(t<=st&&!$obj.is("#CP_minutecont")){$obj.css("top",st+10+"px")}else{if(t+$obj.height()-st>ph){$obj.css("top",st+ph-$obj.height()-10+"px")}}if(l<=0){$obj.css("left","10px")}}function bgi(ob){if(typeof jQuery.fn.bgIframe=="function"){ob.bgIframe()}else{alert("bgIframe plugin not loaded.")}}function binder($obj){if($obj.attr("id")=="CP_hourcont"){$obj.mouseout(function(e){hourcont_out(e)})}else{if($obj.attr("id")=="CP_minutecont"){$obj.mouseout(function(e){minutecont_out(e)})}else{if($obj.attr("class")=="CP_hour"){$obj.mouseover(function(e){hourdiv_over($obj,e)});$obj.mouseout(function(){hourdiv_out($obj)});$obj.click(function(){hourdiv_click($obj)})}else{if($obj.attr("class")=="CP_minute"){$obj.mouseover(function(){minutediv_over($obj)});$obj.mouseout(function(){minutediv_out($obj)});$obj.click(function(){minutediv_click($obj)})}}}}}function hourcont_out(e){try{t=(e.toElement)?e.toElement:e.relatedTarget;if(!(jQuery(t).is("div[@class^=CP], iframe"))){if(!jQuery.browser.safari){cleardivs()}}}catch(e){cleardivs()}}function minutecont_out(e){try{t=(e.toElement)?e.toElement:e.relatedTarget;if(!(jQuery(t).is("div[@class^=CP], iframe"))){if(!jQuery.browser.safari){cleardivs()}}}catch(e){cleardivs()}}function hourdiv_over($obj,e){var h=$obj.attr("id").split("_")[1],i=$obj.attr("id").split("_")[2],l,t;$obj.addClass("CP_over");if(settings.showminutes){$mc.hide();renderminutes(h);if(v){t=e.type=="mouseover"?e.pageY-15:$hourcont.offset().top+2+($obj.height()*i);if(h<12){if(!jQuery.browser.safari){l=$hourcont.offset().left-$mc.width()}else{l=$hourcont[0].offsetLeft-$mc.width()}}else{if(!jQuery.browser.safari){l=$hourcont.offset().left+$hourcont.width()}else{l=$hourcont[0].offsetLeft+$hourcont.width()}}}else{l=(e.type=="mouseover")?e.pageX-10:$hourcont.offset().left+($obj.width()-5)*i;if(h<12){if(!jQuery.browser.safari){t=$hourcont.offset().top-$mc.height()}else{t=$hourcont[0].offsetTop-$mc.height()}}else{if(!jQuery.browser.safari){t=$hourcont.offset().top+$hourcont.height()}else{t=$hourcont[0].offsetTop+$hourcont.height()}}}$mc.css("left",l+"px").css("top",t+"px");rectify($mc);$mc.show();if(settings.useBgiframe){bgi($mc)}}return false}function hourdiv_out($obj){$obj.removeClass("CP_over");return false}function hourdiv_click($obj){h=$obj.attr("id").split("_")[1];tt=set_tt(h);str=$obj.text();if(str.indexOf(" ")!=-1){cleanstr=str.substring(0,str.indexOf(" "))}else{cleanstr=str}$obj.text(cleanstr+":00"+tt);setval($obj);cleardivs()}function minutediv_over($obj){$obj.addClass("CP_over");return false}function minutediv_out($obj){$obj.removeClass("CP_over");return false}function minutediv_click($obj){setval($obj);cleardivs()}function setval($obj){if(!settings.valuefield){self.value=$obj.text()}else{jQuery("input[@name="+settings.valuefield+"]").val($obj.text())}callback.apply($self,[$obj.text()]);$self.unbind("keydown",keyhandler)}function cleardivs(){if(settings.showminutes){$mc.remove()}$hourcont.remove();$self.unbind("keydown",keyhandler)}function keyhandler(e){var $obj=$("div.CP_over").size()?$("div.CP_over"):$("div.CP_hour:first"),divtype=$obj.is(".CP_hour")?"hour":"minute",hi=(divtype=="hour")?$obj[0].id.split("_")[2]:0,h=(divtype=="minute")?$obj[0].id.split("_")[0]:$obj[0].id.split("_")[1];if(divtype=="minute"){var curloc=h<12?"m1":"m2"}else{var curloc=h<12?"h1":"h2"}function divprev($obj){if($obj.prev().size()){eval(divtype+"div_out($obj)");eval(divtype+"div_over($obj.prev(), e)")}else{return false}}function divnext($obj){if($obj.next().size()){eval(divtype+"div_out($obj)");eval(divtype+"div_over($obj.next(), e)")}else{return false}}function hourtohour($obj){var ctx=h>=12?"#hourcol1":"#hourcol2";$newobj=jQuery(".CP_hour[@id$=_"+hi+"]",ctx);if($newobj.size()){hourdiv_out($obj);hourdiv_over($newobj,e)}else{return false}}function hourtominute($obj){hourdiv_out($obj);minutediv_over($(".CP_minute:first"))}function minutetohour($obj){minutediv_out($obj);var ctx=h>=12?"#hourcol2":"#hourcol1";var $newobj=jQuery(".CP_hour[@id^=hr_"+h+"]",ctx);hourdiv_over($newobj,e)}switch(e.keyCode){case 37:if(v){switch(curloc){case"m1":return false;break;case"m2":minutetohour($obj);break;case"h1":hourtominute($obj);break;case"h2":hourtohour($obj);break}}else{divprev($obj)}break;case 38:if(v){divprev($obj)}else{switch(curloc){case"m1":return false;break;case"m2":minutetohour($obj);break;case"h1":hourtominute($obj);break;case"h2":hourtohour($obj);break}}break;case 39:if(v){switch(curloc){case"m1":minutetohour($obj);break;case"m2":return false;break;case"h1":hourtohour($obj);break;case"h2":hourtominute($obj);break}}else{divnext($obj)}break;case 40:if(v){divnext($obj)}else{switch(curloc){case"m1":minutetohour($obj);break;case"m2":return false;break;case"h1":hourtohour($obj);break;case"h2":hourtominute($obj);break}}break;case 13:eval(divtype+"div_click($obj)");break}return false}return false});function errorcheck(){if(settings.starthour>=settings.endhour){alert("Error - start hour must be less than end hour.");return false}else{if(60%settings.minutedivisions!=0){alert("Error - param minutedivisions must divide evenly into 60.");return false}}}return this}; \ No newline at end of file
diff --git a/static/ez-plug-min.css b/static/ez-plug-min.css
new file mode 100644
index 0000000..3cedcc3
--- /dev/null
+++ b/static/ez-plug-min.css
@@ -0,0 +1,4 @@
+/* 2009 -2010 (c) | ez-css.org
+ * ez-plug-min.css :: version 1.1 :: 01182010
+ */
+.ez-wr:after,.ez-box:after{content:".";display:block;height:0;clear:both;visibility:hidden}.ez-wr,.ez-box,.ez-last{display:inline-block;min-height:0}/* \*/ * html .ez-wr,* html .ez-box,* html .ez-last{height:1%}.ez-wr,.ez-box,.ez-last{display:block}/* */.ez-oh{overflow:hidden}* html .ez-oh{overflow:visible}.ez-oa{overflow:auto}.ez-dt{display:table}.ez-it{display:inline-table}.ez-tc{display:table-cell}.ez-ib{display:inline-block}.ez-fl{float:left}* html .ez-fl{margin-right:-3px}.ez-fr{float:right}* html .ez-fr{margin-left:-3px}.ez-25{width:25%}.ez-33{width:33.33%}.ez-50{width:50%}.ez-66{width:66.66%}.ez-75{width:75%}.ez-negmr{margin-right:-1px}* html .ez-negmr{margin-right:-4px}.ez-negmx{margin-right:-1px}.ez-negml{margin-left:-1px}* html .ez-negml{margin-left:-4px}
diff --git a/static/ez-plug.css b/static/ez-plug.css
new file mode 100644
index 0000000..4cb3413
--- /dev/null
+++ b/static/ez-plug.css
@@ -0,0 +1,147 @@
+/* 2009 -2010 (c) | ez-css.org
+ * ez-plug.css :: version 1.1 :: 01182010
+ *
+ * This style sheet can be added to any document (there is no styling of HTML elements)
+ * With this style sheet, use the code snippets from http://www.ez-css.org/layouts
+ */
+
+/*
+ * this is the clearfix method
+ * we rely on this to contain floats in "stand-alone" modules
+ */
+
+.ez-wr:after,
+.ez-box:after {
+ content: ".";
+ display: block;
+ height: 0;
+ clear: both;
+ visibility: hidden;
+}
+
+/*
+ * hacks for IE 5 (Win and Mac)
+ * (min-height is the "hasLayout" trigger used for IE7)
+ */
+
+.ez-wr,.ez-box,.ez-last {display: inline-block;min-height: 0;}
+/* hides from IE-mac \*/
+* html .ez-wr,
+* html .ez-box,
+* html .ez-last {height: 1%;}
+.ez-wr,.ez-box,.ez-last {display: block;}
+/* end hide from IE-mac */
+
+/*
+ * the last DIV in the HTML flow (a column) must create a new block formatting context.
+ * by default, we rely on "overflow:hidden", but if this creates an issue with your design, then try one of these classes instead:
+ * ez-oa
+ * ez-dt
+ * ez-it
+ * ez-tc
+ * ez-ib
+ */
+
+.ez-oh {
+ overflow: hidden;
+}
+
+* html .ez-oh {
+ overflow: visible;
+}
+
+.ez-oa {
+ overflow: auto;
+}
+.ez-dt {
+ display: table;
+}
+
+.ez-it {
+ display: inline-table;
+}
+.ez-tc {
+ display: table-cell;
+}
+
+.ez-ib {
+ display: inline-block;
+}
+
+/*
+ * DIVs to be columns
+ * we float them left or right depending on module or layout
+ * the negative margin is used to fix a IE6 bug (3px jog).
+ */
+.ez-fl {
+ float: left;
+}
+
+* html .ez-fl {
+ margin-right: -3px;
+}
+
+.ez-fr {
+ float: right;
+}
+
+* html .ez-fr {
+ margin-left: -3px;
+}
+
+/*
+ * every floated column in a module or layout needs a width
+ * here we have 5 default values: 1/4, 1/3, 1/2, 2/3 and 3/4
+ */
+
+.ez-25 {width: 25%;}
+.ez-33 {width: 33.33%;}
+.ez-50 {width: 50%;}
+.ez-66 {width: 66.66%;}
+.ez-75 {width: 75%;}
+
+/*
+ * the following classes are used to make columns that are siblings overlap by 1 pixel (to vertically align 1 pixel borders between containers)
+ * for this to work, this class must be applied to the following elements:
+ * - column 1 of Module 2A,
+ * - column 2 of Module 3A,
+ * - column 1 of Module 3B,
+ * - column 3 of Module 4A,
+ * - column 1 of Module 4B,
+ * - column 1 in column 1 of Module 4B,
+ * - column 2 in column 1 of Module 4B
+ */
+
+.ez-negmr {
+ margin-right: -1px;
+}
+
+* html .ez-negmr {
+ margin-right:-4px;
+}
+
+/*
+ * same as above, but for these elements:
+ * - column 1 of Module 3A,
+ * - column 1 of Module 4A,
+ * - column 2 of Module 4A
+ */
+
+.ez-negmx {
+ margin-right: -1px;
+}
+
+/*
+ * same as above, but for these elements:
+ * - column 1 of Module 2B,
+ * - column 2 of Module 3B
+ */
+
+.ez-negml {
+ margin-left: -1px;
+}
+
+* html .ez-negml {
+ margin-left:-4px;
+}
+
diff --git a/static/glike.css b/static/glike.css
new file mode 100644
index 0000000..ea9841b
--- /dev/null
+++ b/static/glike.css
@@ -0,0 +1,69 @@
+body {
+ font-family: arial, san-serif;
+}
+
+table {
+ border-collapse: collapse;
+ border: 1px solid black;
+}
+
+th {
+ text-align: left;
+ border: 1px solid black;
+ background: gray;
+ color: white;
+ padding: 0.2em;
+}
+
+td {
+ border: 1px solid black;
+ padding: 0.2em;
+}
+
+#header {
+ height: 10%;
+ overflow:hidden;
+ background-color: #3ac;
+ border-top: 4px solid #111;
+ border-right: 3px solid #121;
+ border-left: 3px solid #121;
+ text-align: right;
+}
+
+#header h1 {
+ font-size: 20px;
+ float: left;
+ vertical-align: middle;
+}
+
+#header li{
+ font-size: 14px;
+ padding-right:10px;
+ display:inline;
+}
+
+#header u1 {
+ list-style: none;
+ float:right;
+ vertical-align: middle;
+}
+
+a {
+ color: blue;
+}
+#header h1 a {
+ text-decoration: none;
+ color: black;
+}
+
+#bodycontent {
+ text-decoration: none;
+ color: black;
+}
+
+#navlist li
+{
+display: inline;
+list-style-type: none;
+padding-right: 10px;
+}
diff --git a/static/glike.css.bak b/static/glike.css.bak
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/static/glike.css.bak
diff --git a/static/header.gif b/static/header.gif
new file mode 100644
index 0000000..a3015ef
--- /dev/null
+++ b/static/header.gif
Binary files differ
diff --git a/static/jquery.js b/static/jquery.js
new file mode 100644
index 0000000..0c7294c
--- /dev/null
+++ b/static/jquery.js
@@ -0,0 +1,152 @@
+/*!
+ * jQuery JavaScript Library v1.4.1
+ * http://jquery.com/
+ *
+ * Copyright 2010, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2010, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Mon Jan 25 19:43:33 2010 -0500
+ */
+(function(z,v){function la(){if(!c.isReady){try{r.documentElement.doScroll("left")}catch(a){setTimeout(la,1);return}c.ready()}}function Ma(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,i){var j=a.length;if(typeof b==="object"){for(var n in b)X(a,n,b[n],f,e,d);return a}if(d!==v){f=!i&&f&&c.isFunction(d);for(n=0;n<j;n++)e(a[n],b,f?d.call(a[n],n,e(a[n],b)):d,i);return a}return j?
+e(a[0],b):null}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function ma(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function na(a){var b,d=[],f=[],e=arguments,i,j,n,o,m,s,x=c.extend({},c.data(this,"events").live);if(!(a.button&&a.type==="click")){for(o in x){j=x[o];if(j.live===a.type||j.altLive&&c.inArray(a.type,j.altLive)>-1){i=j.data;i.beforeFilter&&i.beforeFilter[a.type]&&!i.beforeFilter[a.type](a)||f.push(j.selector)}else delete x[o]}i=c(a.target).closest(f,
+a.currentTarget);m=0;for(s=i.length;m<s;m++)for(o in x){j=x[o];n=i[m].elem;f=null;if(i[m].selector===j.selector){if(j.live==="mouseenter"||j.live==="mouseleave")f=c(a.relatedTarget).closest(j.selector)[0];if(!f||f!==n)d.push({elem:n,fn:j})}}m=0;for(s=d.length;m<s;m++){i=d[m];a.currentTarget=i.elem;a.data=i.fn.data;if(i.fn.apply(i.elem,e)===false){b=false;break}}return b}}function oa(a,b){return"live."+(a?a+".":"")+b.replace(/\./g,"`").replace(/ /g,"&")}function pa(a){return!a||!a.parentNode||a.parentNode.nodeType===
+11}function qa(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var i in f)for(var j in f[i])c.event.add(this,i,f[i][j],f[i][j].data)}}})}function ra(a,b,d){var f,e,i;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&a[0].indexOf("<option")<0&&(c.support.checkClone||!sa.test(a[0]))){e=true;if(i=c.fragments[a[0]])if(i!==1)f=i}if(!f){b=b&&b[0]?b[0].ownerDocument||b[0]:r;f=b.createDocumentFragment();
+c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=i?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(ta.concat.apply([],ta.slice(0,b)),function(){d[this]=a});return d}function ua(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Na=z.jQuery,Oa=z.$,r=z.document,S,Pa=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Qa=/^.[^:#\[\.,]*$/,Ra=/\S/,Sa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Ta=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,O=navigator.userAgent,
+va=false,P=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,Q=Array.prototype.slice,wa=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(typeof a==="string")if((d=Pa.exec(a))&&(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:r;if(a=Ta.exec(a))if(c.isPlainObject(b)){a=[r.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=ra([d[1]],
+[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}}else{if(b=r.getElementById(d[2])){if(b.id!==d[2])return S.find(a);this.length=1;this[0]=b}this.context=r;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=r;a=r.getElementsByTagName(a)}else return!b||b.jquery?(b||S).find(a):c(b).find(a);else if(c.isFunction(a))return S.ready(a);if(a.selector!==v){this.selector=a.selector;this.context=a.context}return c.isArray(a)?this.setArray(a):c.makeArray(a,
+this)},selector:"",jquery:"1.4.1",length:0,size:function(){return this.length},toArray:function(){return Q.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){a=c(a||null);a.prevObject=this;a.context=this.context;if(b==="find")a.selector=this.selector+(this.selector?" ":"")+d;else if(b)a.selector=this.selector+"."+b+"("+d+")";return a},setArray:function(a){this.length=0;ba.apply(this,a);return this},each:function(a,b){return c.each(this,
+a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(r,c);else P&&P.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(Q.apply(this,arguments),"slice",Q.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};
+c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,i,j,n;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(i in e){j=a[i];n=e[i];if(a!==n)if(f&&n&&(c.isPlainObject(n)||c.isArray(n))){j=j&&(c.isPlainObject(j)||c.isArray(j))?j:c.isArray(n)?[]:{};a[i]=c.extend(f,j,n)}else if(n!==v)a[i]=n}return a};c.extend({noConflict:function(a){z.$=
+Oa;if(a)z.jQuery=Na;return c},isReady:false,ready:function(){if(!c.isReady){if(!r.body)return setTimeout(c.ready,13);c.isReady=true;if(P){for(var a,b=0;a=P[b++];)a.call(r,c);P=null}c.fn.triggerHandler&&c(r).triggerHandler("ready")}},bindReady:function(){if(!va){va=true;if(r.readyState==="complete")return c.ready();if(r.addEventListener){r.addEventListener("DOMContentLoaded",L,false);z.addEventListener("load",c.ready,false)}else if(r.attachEvent){r.attachEvent("onreadystatechange",L);z.attachEvent("onload",
+c.ready);var a=false;try{a=z.frameElement==null}catch(b){}r.documentElement.doScroll&&a&&la()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,"isPrototypeOf"))return false;var b;for(b in a);return b===v||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;
+return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return z.JSON&&z.JSON.parse?z.JSON.parse(a):(new Function("return "+a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Ra.test(a)){var b=r.getElementsByTagName("head")[0]||
+r.documentElement,d=r.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(r.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,i=a.length,j=i===v||c.isFunction(a);if(d)if(j)for(f in a){if(b.apply(a[f],d)===false)break}else for(;e<i;){if(b.apply(a[e++],d)===false)break}else if(j)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=
+a[0];e<i&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Sa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]===a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==
+v;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,i=a.length;e<i;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,i=0,j=a.length;i<j;i++){e=b(a[i],i,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=v}else if(b&&!c.isFunction(b)){d=b;b=v}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},
+uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});O=c.uaMatch(O);if(O.browser){c.browser[O.browser]=true;c.browser.version=O.version}if(c.browser.webkit)c.browser.safari=true;if(wa)c.inArray=function(a,b){return wa.call(b,a)};S=c(r);if(r.addEventListener)L=function(){r.removeEventListener("DOMContentLoaded",
+L,false);c.ready()};else if(r.attachEvent)L=function(){if(r.readyState==="complete"){r.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=r.documentElement,b=r.createElement("script"),d=r.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML=" <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";var e=d.getElementsByTagName("*"),i=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!i)){c.support=
+{leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(i.getAttribute("style")),hrefNormalized:i.getAttribute("href")==="/a",opacity:/^0.55$/.test(i.style.opacity),cssFloat:!!i.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:r.createElement("select").appendChild(r.createElement("option")).selected,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};
+b.type="text/javascript";try{b.appendChild(r.createTextNode("window."+f+"=1;"))}catch(j){}a.insertBefore(b,a.firstChild);if(z[f]){c.support.scriptEval=true;delete z[f]}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function n(){c.support.noCloneEvent=false;d.detachEvent("onclick",n)});d.cloneNode(true).fireEvent("onclick")}d=r.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=r.createDocumentFragment();a.appendChild(d.firstChild);
+c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var n=r.createElement("div");n.style.width=n.style.paddingLeft="1px";r.body.appendChild(n);c.boxModel=c.support.boxModel=n.offsetWidth===2;r.body.removeChild(n).style.display="none"});a=function(n){var o=r.createElement("div");n="on"+n;var m=n in o;if(!m){o.setAttribute(n,"return;");m=typeof o[n]==="function"}return m};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=i=null}})();c.props=
+{"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ua=0,xa={},Va={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==z?xa:a;var f=a[G],e=c.cache;if(!b&&!f)return null;f||(f=++Ua);if(typeof b==="object"){a[G]=f;e=e[f]=c.extend(true,
+{},b)}else e=e[f]?e[f]:typeof d==="undefined"?Va:(e[f]={});if(d!==v){a[G]=f;e[b]=d}return typeof b==="string"?e[b]:e}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==z?xa:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{try{delete a[G]}catch(i){a.removeAttribute&&a.removeAttribute(G)}delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,
+a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===v){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===v&&this.length)f=c.data(this[0],a);return f===v&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);
+return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===v)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||
+a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var ya=/[\n\t]/g,ca=/\s+/,Wa=/\r/g,Xa=/href|src|style/,Ya=/(button|input)/i,Za=/(button|input|object|select|textarea)/i,$a=/^(a|area)$/i,za=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(o){var m=
+c(this);m.addClass(a.call(this,o,m.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className)for(var i=" "+e.className+" ",j=0,n=b.length;j<n;j++){if(i.indexOf(" "+b[j]+" ")<0)e.className+=" "+b[j]}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(o){var m=c(this);m.removeClass(a.call(this,o,m.attr("class")))});if(a&&typeof a==="string"||a===v)for(var b=(a||"").split(ca),
+d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var i=(" "+e.className+" ").replace(ya," "),j=0,n=b.length;j<n;j++)i=i.replace(" "+b[j]+" "," ");e.className=i.substring(1,i.length-1)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var i=c(this);i.toggleClass(a.call(this,e,i.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,i=0,j=c(this),n=b,o=
+a.split(ca);e=o[i++];){n=f?n:!j.hasClass(e);j[n?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(ya," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===v){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||
+{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var i=b?d:0;for(d=b?d+1:e.length;i<d;i++){var j=e[i];if(j.selected){a=c(j).val();if(b)return a;f.push(a)}}return f}if(za.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Wa,"")}return v}var n=c.isFunction(a);return this.each(function(o){var m=c(this),s=a;if(this.nodeType===1){if(n)s=a.call(this,o,m.val());
+if(typeof s==="number")s+="";if(c.isArray(s)&&za.test(this.type))this.checked=c.inArray(m.val(),s)>=0;else if(c.nodeName(this,"select")){var x=c.makeArray(s);c("option",this).each(function(){this.selected=c.inArray(c(this).val(),x)>=0});if(!x.length)this.selectedIndex=-1}else this.value=s}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return v;if(f&&b in c.attrFn)return c(a)[b](d);
+f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==v;b=f&&c.props[b]||b;if(a.nodeType===1){var i=Xa.test(b);if(b in a&&f&&!i){if(e){b==="type"&&Ya.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:Za.test(a.nodeName)||$a.test(a.nodeName)&&a.href?0:v;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=
+""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&i?a.getAttribute(b,2):a.getAttribute(b);return a===null?v:a}return c.style(a,b,d)}});var ab=function(a){return a.replace(/[^\w\s\.\|`]/g,function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==z&&!a.frameElement)a=z;if(!d.guid)d.guid=c.guid++;if(f!==v){d=c.proxy(d);d.data=f}var e=c.data(a,"events")||c.data(a,"events",{}),i=c.data(a,"handle"),j;if(!i){j=
+function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(j.elem,arguments):v};i=c.data(a,"handle",j)}if(i){i.elem=a;b=b.split(/\s+/);for(var n,o=0;n=b[o++];){var m=n.split(".");n=m.shift();if(o>1){d=c.proxy(d);if(f!==v)d.data=f}d.type=m.slice(0).sort().join(".");var s=e[n],x=this.special[n]||{};if(!s){s=e[n]={};if(!x.setup||x.setup.call(a,f,m,d)===false)if(a.addEventListener)a.addEventListener(n,i,false);else a.attachEvent&&a.attachEvent("on"+n,i)}if(x.add)if((m=x.add.call(a,
+d,f,m,s))&&c.isFunction(m)){m.guid=m.guid||d.guid;m.data=m.data||d.data;m.type=m.type||d.type;d=m}s[d.guid]=d;this.global[n]=true}a=null}}},global:{},remove:function(a,b,d){if(!(a.nodeType===3||a.nodeType===8)){var f=c.data(a,"events"),e,i,j;if(f){if(b===v||typeof b==="string"&&b.charAt(0)===".")for(i in f)this.remove(a,i+(b||""));else{if(b.type){d=b.handler;b=b.type}b=b.split(/\s+/);for(var n=0;i=b[n++];){var o=i.split(".");i=o.shift();var m=!o.length,s=c.map(o.slice(0).sort(),ab);s=new RegExp("(^|\\.)"+
+s.join("\\.(?:.*\\.)?")+"(\\.|$)");var x=this.special[i]||{};if(f[i]){if(d){j=f[i][d.guid];delete f[i][d.guid]}else for(var A in f[i])if(m||s.test(f[i][A].type))delete f[i][A];x.remove&&x.remove.call(a,o,j);for(e in f[i])break;if(!e){if(!x.teardown||x.teardown.call(a,o)===false)if(a.removeEventListener)a.removeEventListener(i,c.data(a,"handle"),false);else a.detachEvent&&a.detachEvent("on"+i,c.data(a,"handle"));e=null;delete f[i]}}}}for(e in f)break;if(!e){if(A=c.data(a,"handle"))A.elem=null;c.removeData(a,
+"events");c.removeData(a,"handle")}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();this.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return v;a.result=v;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,
+b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(i){}if(!a.isPropagationStopped()&&f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){d=a.target;var j;if(!(c.nodeName(d,"a")&&e==="click")&&!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()])){try{if(d[e]){if(j=d["on"+e])d["on"+e]=null;this.triggered=true;d[e]()}}catch(n){}if(j)d["on"+e]=j;this.triggered=false}}},handle:function(a){var b,
+d;a=arguments[0]=c.event.fix(a||z.event);a.currentTarget=this;d=a.type.split(".");a.type=d.shift();b=!d.length&&!a.exclusive;var f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)");d=(c.data(this,"events")||{})[a.type];for(var e in d){var i=d[e];if(b||f.test(i.type)){a.handler=i;a.data=i.data;i=i.apply(this,arguments);if(i!==v){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
+fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||r;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=r.documentElement;d=r.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
+d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==v)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a,b){c.extend(a,b||{});a.guid+=b.selector+b.live;b.liveProxy=a;c.event.add(this,b.live,na,b)},remove:function(a){if(a.length){var b=
+0,d=new RegExp("(^|\\.)"+a[0]+"(\\.|$)");c.each(c.data(this,"events").live||{},function(){d.test(this.type)&&b++});b<1&&c.event.remove(this,a[0],na)}},special:{}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};
+c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y,isImmediatePropagationStopped:Y};var Aa=function(a){for(var b=
+a.relatedTarget;b&&b!==this;)try{b=b.parentNode}catch(d){break}if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}},Ba=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ba:Aa,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ba:Aa)}}});if(!c.support.submitBubbles)c.event.special.submit={setup:function(a,b,d){if(this.nodeName.toLowerCase()!==
+"form"){c.event.add(this,"click.specialSubmit."+d.guid,function(f){var e=f.target,i=e.type;if((i==="submit"||i==="image")&&c(e).closest("form").length)return ma("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit."+d.guid,function(f){var e=f.target,i=e.type;if((i==="text"||i==="password")&&c(e).closest("form").length&&f.keyCode===13)return ma("submit",this,arguments)})}else return false},remove:function(a,b){c.event.remove(this,"click.specialSubmit"+(b?"."+b.guid:""));c.event.remove(this,
+"keypress.specialSubmit"+(b?"."+b.guid:""))}};if(!c.support.changeBubbles){var da=/textarea|input|select/i;function Ca(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d}function ea(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Ca(d);if(a.type!=="focusout"||
+d.type!=="radio")c.data(d,"_change_data",e);if(!(f===v||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}}c.event.special.change={filters:{focusout:ea,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return ea.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return ea.call(this,a)},beforeactivate:function(a){a=
+a.target;a.nodeName.toLowerCase()==="input"&&a.type==="radio"&&c.data(a,"_change_data",Ca(a))}},setup:function(a,b,d){for(var f in T)c.event.add(this,f+".specialChange."+d.guid,T[f]);return da.test(this.nodeName)},remove:function(a,b){for(var d in T)c.event.remove(this,d+".specialChange"+(b?"."+b.guid:""),T[d]);return da.test(this.nodeName)}};var T=c.event.special.change.filters}r.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,
+f)}c.event.special[b]={setup:function(){this.addEventListener(a,d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var i in d)this[b](i,f,d[i],e);return this}if(c.isFunction(f)){e=f;f=v}var j=b==="one"?c.proxy(e,function(n){c(this).unbind(n,j);return e.apply(this,arguments)}):e;return d==="unload"&&b!=="one"?this.one(d,f,e):this.each(function(){c.event.add(this,d,j,f)})}});c.fn.extend({unbind:function(a,
+b){if(typeof a==="object"&&!a.preventDefault){for(var d in a)this.unbind(d,a[d]);return this}return this.each(function(){c.event.remove(this,a,b)})},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+
+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e){var i,j=0;if(c.isFunction(f)){e=f;f=v}for(d=(d||"").split(/\s+/);(i=d[j++])!=null;){i=i==="focus"?"focusin":i==="blur"?"focusout":i==="hover"?d.push("mouseleave")&&"mouseenter":i;b==="live"?c(this.context).bind(oa(i,this.selector),{data:f,selector:this.selector,
+live:i},e):c(this.context).unbind(oa(i,this.selector),e?{guid:e.guid+this.selector+i}:null)}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});z.attachEvent&&!z.addEventListener&&z.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});
+(function(){function a(g){for(var h="",k,l=0;g[l];l++){k=g[l];if(k.nodeType===3||k.nodeType===4)h+=k.nodeValue;else if(k.nodeType!==8)h+=a(k.childNodes)}return h}function b(g,h,k,l,q,p){q=0;for(var u=l.length;q<u;q++){var t=l[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===k){y=l[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=k;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}l[q]=y}}}function d(g,h,k,l,q,p){q=0;for(var u=l.length;q<u;q++){var t=l[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===
+k){y=l[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=k;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(o.filter(h,[t]).length>0){y=t;break}}t=t[g]}l[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,i=Object.prototype.toString,j=false,n=true;[0,0].sort(function(){n=false;return 0});var o=function(g,h,k,l){k=k||[];var q=h=h||r;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||
+typeof g!=="string")return k;for(var p=[],u,t,y,R,H=true,M=w(h),I=g;(f.exec(""),u=f.exec(I))!==null;){I=u[3];p.push(u[1]);if(u[2]){R=u[3];break}}if(p.length>1&&s.exec(g))if(p.length===2&&m.relative[p[0]])t=fa(p[0]+p[1],h);else for(t=m.relative[p[0]]?[h]:o(p.shift(),h);p.length;){g=p.shift();if(m.relative[g])g+=p.shift();t=fa(g,t)}else{if(!l&&p.length>1&&h.nodeType===9&&!M&&m.match.ID.test(p[0])&&!m.match.ID.test(p[p.length-1])){u=o.find(p.shift(),h,M);h=u.expr?o.filter(u.expr,u.set)[0]:u.set[0]}if(h){u=
+l?{expr:p.pop(),set:A(l)}:o.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=u.expr?o.filter(u.expr,u.set):u.set;if(p.length>0)y=A(t);else H=false;for(;p.length;){var D=p.pop();u=D;if(m.relative[D])u=p.pop();else D="";if(u==null)u=h;m.relative[D](y,u,M)}}else y=[]}y||(y=t);y||o.error(D||g);if(i.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))k.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&
+y[g].nodeType===1&&k.push(t[g]);else k.push.apply(k,y);else A(y,k);if(R){o(R,q,k,l);o.uniqueSort(k)}return k};o.uniqueSort=function(g){if(C){j=n;g.sort(C);if(j)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};o.matches=function(g,h){return o(g,null,null,h)};o.find=function(g,h,k){var l,q;if(!g)return[];for(var p=0,u=m.order.length;p<u;p++){var t=m.order[p];if(q=m.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");l=m.find[t](q,
+h,k);if(l!=null){g=g.replace(m.match[t],"");break}}}}l||(l=h.getElementsByTagName("*"));return{set:l,expr:g}};o.filter=function(g,h,k,l){for(var q=g,p=[],u=h,t,y,R=h&&h[0]&&w(h[0]);g&&h.length;){for(var H in m.filter)if((t=m.leftMatch[H].exec(g))!=null&&t[2]){var M=m.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length-1)!=="\\"){if(u===p)p=[];if(m.preFilter[H])if(t=m.preFilter[H](t,u,k,p,l,R)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=u[U])!=null;U++)if(D){I=M(D,t,U,u);var Da=
+l^!!I;if(k&&I!=null)if(Da)y=true;else u[U]=false;else if(Da){p.push(D);y=true}}if(I!==v){k||(u=p);g=g.replace(m.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)o.error(g);else break;q=g}return u};o.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var m=o.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,
+TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},relative:{"+":function(g,h){var k=typeof h==="string",l=k&&!/\W/.test(h);k=k&&!l;if(l)h=h.toLowerCase();l=0;for(var q=g.length,
+p;l<q;l++)if(p=g[l]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[l]=k||p&&p.nodeName.toLowerCase()===h?p||false:p===h}k&&o.filter(h,g,true)},">":function(g,h){var k=typeof h==="string";if(k&&!/\W/.test(h)){h=h.toLowerCase();for(var l=0,q=g.length;l<q;l++){var p=g[l];if(p){k=p.parentNode;g[l]=k.nodeName.toLowerCase()===h?k:false}}}else{l=0;for(q=g.length;l<q;l++)if(p=g[l])g[l]=k?p.parentNode:p.parentNode===h;k&&o.filter(h,g,true)}},"":function(g,h,k){var l=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=
+h=h.toLowerCase();q=b}q("parentNode",h,l,g,p,k)},"~":function(g,h,k){var l=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,l,g,p,k)}},find:{ID:function(g,h,k){if(typeof h.getElementById!=="undefined"&&!k)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var k=[];h=h.getElementsByName(g[1]);for(var l=0,q=h.length;l<q;l++)h[l].getAttribute("name")===g[1]&&k.push(h[l]);return k.length===0?null:k}},
+TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,k,l,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var u;(u=h[p])!=null;p++)if(u)if(q^(u.className&&(" "+u.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))k||l.push(u);else if(k)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&
+"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,k,l,q,p){h=g[1].replace(/\\/g,"");if(!p&&m.attrMap[h])g[1]=m.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,k,l,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=o(g[3],null,null,h);else{g=o.filter(g[3],h,k,true^q);k||l.push.apply(l,g);return false}else if(m.match.POS.test(g[0])||m.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);
+return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,k){return!!o(k[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===
+g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},setFilters:{first:function(g,h){return h===0},last:function(g,h,k,l){return h===l.length-1},even:function(g,h){return h%2===
+0},odd:function(g,h){return h%2===1},lt:function(g,h,k){return h<k[3]-0},gt:function(g,h,k){return h>k[3]-0},nth:function(g,h,k){return k[3]-0===h},eq:function(g,h,k){return k[3]-0===h}},filter:{PSEUDO:function(g,h,k,l){var q=h[1],p=m.filters[q];if(p)return p(g,k,h,l);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=h[3];k=0;for(l=h.length;k<l;k++)if(h[k]===g)return false;return true}else o.error("Syntax error, unrecognized expression: "+
+q)},CHILD:function(g,h){var k=h[1],l=g;switch(k){case "only":case "first":for(;l=l.previousSibling;)if(l.nodeType===1)return false;if(k==="first")return true;l=g;case "last":for(;l=l.nextSibling;)if(l.nodeType===1)return false;return true;case "nth":k=h[2];var q=h[3];if(k===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var u=0;for(l=p.firstChild;l;l=l.nextSibling)if(l.nodeType===1)l.nodeIndex=++u;p.sizcache=h}g=g.nodeIndex-q;return k===0?g===0:g%k===0&&g/k>=
+0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var k=h[1];g=m.attrHandle[k]?m.attrHandle[k](g):g[k]!=null?g[k]:g.getAttribute(k);k=g+"";var l=h[2];h=h[4];return g==null?l==="!=":l==="="?k===h:l==="*="?k.indexOf(h)>=0:l==="~="?(" "+k+" ").indexOf(h)>=0:!h?k&&g!==false:l==="!="?k!==h:l==="^="?
+k.indexOf(h)===0:l==="$="?k.substr(k.length-h.length)===h:l==="|="?k===h||k.substr(0,h.length+1)===h+"-":false},POS:function(g,h,k,l){var q=m.setFilters[h[2]];if(q)return q(g,k,h,l)}}},s=m.match.POS;for(var x in m.match){m.match[x]=new RegExp(m.match[x].source+/(?![^\[]*\])(?![^\(]*\))/.source);m.leftMatch[x]=new RegExp(/(^(?:.|\r|\n)*?)/.source+m.match[x].source.replace(/\\(\d+)/g,function(g,h){return"\\"+(h-0+1)}))}var A=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};
+try{Array.prototype.slice.call(r.documentElement.childNodes,0)}catch(B){A=function(g,h){h=h||[];if(i.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var k=0,l=g.length;k<l;k++)h.push(g[k]);else for(k=0;g[k];k++)h.push(g[k]);return h}}var C;if(r.documentElement.compareDocumentPosition)C=function(g,h){if(!g.compareDocumentPosition||!h.compareDocumentPosition){if(g==h)j=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===
+h?0:1;if(g===0)j=true;return g};else if("sourceIndex"in r.documentElement)C=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)j=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)j=true;return g};else if(r.createRange)C=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)j=true;return g.ownerDocument?-1:1}var k=g.ownerDocument.createRange(),l=h.ownerDocument.createRange();k.setStart(g,0);k.setEnd(g,0);l.setStart(h,0);l.setEnd(h,0);g=k.compareBoundaryPoints(Range.START_TO_END,
+l);if(g===0)j=true;return g};(function(){var g=r.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var k=r.documentElement;k.insertBefore(g,k.firstChild);if(r.getElementById(h)){m.find.ID=function(l,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(l[1]))?q.id===l[1]||typeof q.getAttributeNode!=="undefined"&&q.getAttributeNode("id").nodeValue===l[1]?[q]:v:[]};m.filter.ID=function(l,q){var p=typeof l.getAttributeNode!=="undefined"&&l.getAttributeNode("id");
+return l.nodeType===1&&p&&p.nodeValue===q}}k.removeChild(g);k=g=null})();(function(){var g=r.createElement("div");g.appendChild(r.createComment(""));if(g.getElementsByTagName("*").length>0)m.find.TAG=function(h,k){k=k.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var l=0;k[l];l++)k[l].nodeType===1&&h.push(k[l]);k=h}return k};g.innerHTML="<a href='#'></a>";if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")m.attrHandle.href=function(h){return h.getAttribute("href",
+2)};g=null})();r.querySelectorAll&&function(){var g=o,h=r.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){o=function(l,q,p,u){q=q||r;if(!u&&q.nodeType===9&&!w(q))try{return A(q.querySelectorAll(l),p)}catch(t){}return g(l,q,p,u)};for(var k in g)o[k]=g[k];h=null}}();(function(){var g=r.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===
+0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){m.order.splice(1,0,"CLASS");m.find.CLASS=function(h,k,l){if(typeof k.getElementsByClassName!=="undefined"&&!l)return k.getElementsByClassName(h[1])};g=null}}})();var E=r.compareDocumentPosition?function(g,h){return g.compareDocumentPosition(h)&16}:function(g,h){return g!==h&&(g.contains?g.contains(h):true)},w=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},fa=function(g,h){var k=[],
+l="",q;for(h=h.nodeType?[h]:h;q=m.match.PSEUDO.exec(g);){l+=q[0];g=g.replace(m.match.PSEUDO,"")}g=m.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)o(g,h[q],k);return o.filter(l,k)};c.find=o;c.expr=o.selectors;c.expr[":"]=c.expr.filters;c.unique=o.uniqueSort;c.getText=a;c.isXMLDoc=w;c.contains=E})();var bb=/Until$/,cb=/^(?:parents|prevUntil|prevAll)/,db=/,/;Q=Array.prototype.slice;var Ea=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,i){return!!b.call(e,i,e)===d});else if(b.nodeType)return c.grep(a,
+function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Qa.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length;c.find(a,this[f],b);if(f>0)for(var i=d;i<b.length;i++)for(var j=0;j<d;j++)if(b[j]===b[i]){b.splice(i--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=
+0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ea(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ea(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,i={},j;if(f&&a.length){e=0;for(var n=a.length;e<n;e++){j=a[e];i[j]||(i[j]=c.expr.match.POS.test(j)?c(j,b||this.context):j)}for(;f&&f.ownerDocument&&f!==b;){for(j in i){e=i[j];if(e.jquery?e.index(f)>
+-1:c(f).is(e)){d.push({selector:j,elem:f});delete i[j]}}f=f.parentNode}}return d}var o=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(m,s){for(;s&&s.ownerDocument&&s!==b;){if(o?o.index(s)>-1:c(s).is(a))return s;s=s.parentNode}return null})},index:function(a){if(!a||typeof a==="string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),
+a);return this.pushStack(pa(a[0])||pa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},
+nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);bb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):
+e;if((this.length>1||db.test(f))&&cb.test(a))e=e.reverse();return this.pushStack(e,a,Q.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===v||a.nodeType!==1||!c(a).is(d));){a.nodeType===1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==
+b&&d.push(a);return d}});var Fa=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ga=/(<([\w:]+)[^>]*?)\/>/g,eb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,Ha=/<([\w:]+)/,fb=/<tbody/i,gb=/<|&\w+;/,sa=/checked\s*(?:[^=]|=\s*.checked.)/i,Ia=function(a,b,d){return eb.test(d)?a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],
+col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==v)return this.empty().append((this[0]&&this[0].ownerDocument||r).createTextNode(a));return c.getText(this)},
+wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?
+d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,
+false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&
+!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Fa,"").replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){qa(this,b);qa(this.find("*"),b.find("*"))}return b},html:function(a){if(a===v)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Fa,""):null;else if(typeof a==="string"&&!/<script/i.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(Ha.exec(a)||
+["",""])[1].toLowerCase()]){a=a.replace(Ga,Ia);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var i=c(this),j=i.html();i.empty().append(function(){return a.call(this,e,j)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,
+b,f))});else a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(s){return c.nodeName(s,"table")?s.getElementsByTagName("tbody")[0]||s.appendChild(s.ownerDocument.createElement("tbody")):s}var e,i,j=a[0],n=[];if(!c.support.checkClone&&arguments.length===3&&typeof j===
+"string"&&sa.test(j))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(j))return this.each(function(s){var x=c(this);a[0]=j.call(this,s,b?x.html():v);x.domManip(a,b,d)});if(this[0]){e=a[0]&&a[0].parentNode&&a[0].parentNode.nodeType===11?{fragment:a[0].parentNode}:ra(a,this,n);if(i=e.fragment.firstChild){b=b&&c.nodeName(i,"tr");for(var o=0,m=this.length;o<m;o++)d.call(b?f(this[o],i):this[o],e.cacheable||this.length>1||o>0?e.fragment.cloneNode(true):e.fragment)}n&&c.each(n,
+Ma)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);for(var e=0,i=d.length;e<i;e++){var j=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),j);f=f.concat(j)}return this.pushStack(f,a,d.selector)}});c.each({remove:function(a,b){if(!a||c.filter(a,[this]).length){if(!b&&this.nodeType===1){c.cleanData(this.getElementsByTagName("*"));c.cleanData([this])}this.parentNode&&
+this.parentNode.removeChild(this)}},empty:function(){for(this.nodeType===1&&c.cleanData(this.getElementsByTagName("*"));this.firstChild;)this.removeChild(this.firstChild)}},function(a,b){c.fn[a]=function(){return this.each(b,arguments)}});c.extend({clean:function(a,b,d,f){b=b||r;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||r;var e=[];c.each(a,function(i,j){if(typeof j==="number")j+="";if(j){if(typeof j==="string"&&!gb.test(j))j=b.createTextNode(j);else if(typeof j===
+"string"){j=j.replace(Ga,Ia);var n=(Ha.exec(j)||["",""])[1].toLowerCase(),o=F[n]||F._default,m=o[0];i=b.createElement("div");for(i.innerHTML=o[1]+j+o[2];m--;)i=i.lastChild;if(!c.support.tbody){m=fb.test(j);n=n==="table"&&!m?i.firstChild&&i.firstChild.childNodes:o[1]==="<table>"&&!m?i.childNodes:[];for(o=n.length-1;o>=0;--o)c.nodeName(n[o],"tbody")&&!n[o].childNodes.length&&n[o].parentNode.removeChild(n[o])}!c.support.leadingWhitespace&&V.test(j)&&i.insertBefore(b.createTextNode(V.exec(j)[0]),i.firstChild);
+j=c.makeArray(i.childNodes)}if(j.nodeType)e.push(j);else e=c.merge(e,j)}});if(d)for(a=0;e[a];a++)if(f&&c.nodeName(e[a],"script")&&(!e[a].type||e[a].type.toLowerCase()==="text/javascript"))f.push(e[a].parentNode?e[a].parentNode.removeChild(e[a]):e[a]);else{e[a].nodeType===1&&e.splice.apply(e,[a+1,0].concat(c.makeArray(e[a].getElementsByTagName("script"))));d.appendChild(e[a])}return e},cleanData:function(a){for(var b=0,d;(d=a[b])!=null;b++){c.event.remove(d);c.removeData(d)}}});var hb=/z-?index|font-?weight|opacity|zoom|line-?height/i,
+Ja=/alpha\([^)]*\)/,Ka=/opacity=([^)]*)/,ga=/float/i,ha=/-([a-z])/ig,ib=/([A-Z])/g,jb=/^-?\d+(?:px)?$/i,kb=/^-?\d/,lb={position:"absolute",visibility:"hidden",display:"block"},mb=["Left","Right"],nb=["Top","Bottom"],ob=r.defaultView&&r.defaultView.getComputedStyle,La=c.support.cssFloat?"cssFloat":"styleFloat",ia=function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===v)return c.curCSS(d,f);if(typeof e==="number"&&!hb.test(f))e+="px";c.style(d,f,e)})};
+c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return v;if((b==="width"||b==="height")&&parseFloat(d)<0)d=v;var f=a.style||a,e=d!==v;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=Ja.test(a)?a.replace(Ja,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Ka.exec(f.filter)[1])/100+"":""}if(ga.test(b))b=La;b=b.replace(ha,ia);if(e)f[b]=d;return f[b]},css:function(a,
+b,d,f){if(b==="width"||b==="height"){var e,i=b==="width"?mb:nb;function j(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(i,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,"border"+this+"Width",true))||0})}a.offsetWidth!==0?j():c.swap(a,lb,j);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&
+a.currentStyle){f=Ka.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ga.test(b))b=La;if(!d&&e&&e[b])f=e[b];else if(ob){if(ga.test(b))b="float";b=b.replace(ib,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ha,ia);f=a.currentStyle[b]||a.currentStyle[d];if(!jb.test(f)&&kb.test(f)){b=e.left;var i=a.runtimeStyle.left;a.runtimeStyle.left=
+a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=i}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var pb=
+J(),qb=/<script(.|\s)*?\/script>/gi,rb=/select|textarea/i,sb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ja=/\?/,tb=/(\?|&)_=.*?(&|$)/,ub=/^(\w+:)?\/\/([^\/?#]+)/,vb=/%20/g;c.fn.extend({_load:c.fn.load,load:function(a,b,d){if(typeof a!=="string")return this._load(a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=
+c.param(b,c.ajaxSettings.traditional);f="POST"}var i=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(j,n){if(n==="success"||n==="notmodified")i.html(e?c("<div />").append(j.responseText.replace(qb,"")).find(e):j.responseText);d&&i.each(d,[j.responseText,n,j])}});return this},serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&
+(this.checked||rb.test(this.nodeName)||sb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,
+b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:z.XMLHttpRequest&&(z.location.protocol!=="file:"||!z.ActiveXObject)?function(){return new z.XMLHttpRequest}:
+function(){try{return new z.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&&e.success.call(o,n,j,w);e.global&&f("ajaxSuccess",[w,e])}function d(){e.complete&&e.complete.call(o,w,j);e.global&&f("ajaxComplete",[w,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}
+function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),i,j,n,o=a&&a.context||e,m=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(m==="GET")N.test(e.url)||(e.url+=(ja.test(e.url)?"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||
+N.test(e.url))){i=e.jsonpCallback||"jsonp"+pb++;if(e.data)e.data=(e.data+"").replace(N,"="+i+"$1");e.url=e.url.replace(N,"="+i+"$1");e.dataType="script";z[i]=z[i]||function(q){n=q;b();d();z[i]=v;try{delete z[i]}catch(p){}A&&A.removeChild(B)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache===false&&m==="GET"){var s=J(),x=e.url.replace(tb,"$1_="+s+"$2");e.url=x+(x===e.url?(ja.test(e.url)?"&":"?")+"_="+s:"")}if(e.data&&m==="GET")e.url+=(ja.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&
+c.event.trigger("ajaxStart");s=(s=ub.exec(e.url))&&(s[1]&&s[1]!==location.protocol||s[2]!==location.host);if(e.dataType==="script"&&m==="GET"&&s){var A=r.getElementsByTagName("head")[0]||r.documentElement,B=r.createElement("script");B.src=e.url;if(e.scriptCharset)B.charset=e.scriptCharset;if(!i){var C=false;B.onload=B.onreadystatechange=function(){if(!C&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){C=true;b();d();B.onload=B.onreadystatechange=null;A&&B.parentNode&&
+A.removeChild(B)}}}A.insertBefore(B,A.firstChild);return v}var E=false,w=e.xhr();if(w){e.username?w.open(m,e.url,e.async,e.username,e.password):w.open(m,e.url,e.async);try{if(e.data||a&&a.contentType)w.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&w.setRequestHeader("If-Modified-Since",c.lastModified[e.url]);c.etag[e.url]&&w.setRequestHeader("If-None-Match",c.etag[e.url])}s||w.setRequestHeader("X-Requested-With","XMLHttpRequest");w.setRequestHeader("Accept",
+e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(fa){}if(e.beforeSend&&e.beforeSend.call(o,w,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");w.abort();return false}e.global&&f("ajaxSend",[w,e]);var g=w.onreadystatechange=function(q){if(!w||w.readyState===0||q==="abort"){E||d();E=true;if(w)w.onreadystatechange=c.noop}else if(!E&&w&&(w.readyState===4||q==="timeout")){E=true;w.onreadystatechange=c.noop;j=q==="timeout"?"timeout":!c.httpSuccess(w)?
+"error":e.ifModified&&c.httpNotModified(w,e.url)?"notmodified":"success";var p;if(j==="success")try{n=c.httpData(w,e.dataType,e)}catch(u){j="parsererror";p=u}if(j==="success"||j==="notmodified")i||b();else c.handleError(e,w,j,p);d();q==="timeout"&&w.abort();if(e.async)w=null}};try{var h=w.abort;w.abort=function(){w&&h.call(w);g("abort")}}catch(k){}e.async&&e.timeout>0&&setTimeout(function(){w&&!E&&g("timeout")},e.timeout);try{w.send(m==="POST"||m==="PUT"||m==="DELETE"?e.data:null)}catch(l){c.handleError(e,
+w,null,l);d()}e.async||g();return w}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=
+f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b==="json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(j,n){if(c.isArray(n))c.each(n,
+function(o,m){b?f(j,m):d(j+"["+(typeof m==="object"||c.isArray(m)?o:"")+"]",m)});else!b&&n!=null&&typeof n==="object"?c.each(n,function(o,m){d(j+"["+o+"]",m)}):f(j,n)}function f(j,n){n=c.isFunction(n)?n():n;e[e.length]=encodeURIComponent(j)+"="+encodeURIComponent(n)}var e=[];if(b===v)b=c.ajaxSettings.traditional;if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var i in a)d(i,a[i]);return e.join("&").replace(vb,"+")}});var ka={},wb=/toggle|show|hide/,xb=/^([+-]=)?([\d+-.]+)(.*)$/,
+W,ta=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(ka[d])f=ka[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();
+ka[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a],"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&
+c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)},animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var i=c.extend({},e),j,n=this.nodeType===1&&c(this).is(":hidden"),
+o=this;for(j in a){var m=j.replace(ha,ia);if(j!==m){a[m]=a[j];delete a[j];j=m}if(a[j]==="hide"&&n||a[j]==="show"&&!n)return i.complete.call(this);if((j==="height"||j==="width")&&this.style){i.display=c.css(this,"display");i.overflow=this.style.overflow}if(c.isArray(a[j])){(i.specialEasing=i.specialEasing||{})[j]=a[j][1];a[j]=a[j][0]}}if(i.overflow!=null)this.style.overflow="hidden";i.curAnim=c.extend({},a);c.each(a,function(s,x){var A=new c.fx(o,i,s);if(wb.test(x))A[x==="toggle"?n?"show":"hide":x](a);
+else{var B=xb.exec(x),C=A.cur(true)||0;if(B){x=parseFloat(B[2]);var E=B[3]||"px";if(E!=="px"){o.style[s]=(x||1)+E;C=(x||1)/A.cur(true)*C;o.style[s]=C+E}if(B[1])x=(B[1]==="-="?-1:1)*x+C;A.custom(C,x,E)}else A.custom(C,x,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",
+1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration==="number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,
+b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==
+null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(i){return e.step(i)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop===
+"width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=
+this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem,e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=
+c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=
+null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in r.documentElement?function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),
+f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b=this[0];if(a)return this.each(function(s){c.offset.setOffset(this,a,s)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=
+b,e=b.ownerDocument,i,j=e.documentElement,n=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var o=b.offsetTop,m=b.offsetLeft;(b=b.parentNode)&&b!==n&&b!==j;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;i=e?e.getComputedStyle(b,null):b.currentStyle;o-=b.scrollTop;m-=b.scrollLeft;if(b===d){o+=b.offsetTop;m+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){o+=parseFloat(i.borderTopWidth)||
+0;m+=parseFloat(i.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&i.overflow!=="visible"){o+=parseFloat(i.borderTopWidth)||0;m+=parseFloat(i.borderLeftWidth)||0}f=i}if(f.position==="relative"||f.position==="static"){o+=n.offsetTop;m+=n.offsetLeft}if(c.offset.supportsFixedPosition&&f.position==="fixed"){o+=Math.max(j.scrollTop,n.scrollTop);m+=Math.max(j.scrollLeft,n.scrollLeft)}return{top:o,left:m}};c.offset={initialize:function(){var a=r.body,b=r.createElement("div"),
+d,f,e,i=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";a.insertBefore(b,a.firstChild);
+d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i;a.removeChild(b);c.offset.initialize=c.noop},
+bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),i=parseInt(c.curCSS(a,"top",true),10)||0,j=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a,d,e);d={top:b.top-e.top+i,left:b.left-
+e.left+j};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top-f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=
+this.offsetParent||r.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],i;if(!e)return null;if(f!==v)return this.each(function(){if(i=ua(this))i.scrollTo(!a?f:c(i).scrollLeft(),a?f:c(i).scrollTop());else this[d]=f});else return(i=ua(e))?"pageXOffset"in i?i[a?"pageYOffset":"pageXOffset"]:c.support.boxModel&&i.document.documentElement[d]||i.document.body[d]:e[d]}});
+c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(i){var j=c(this);j[d](f.call(this,i,j[d]()))});return"scrollTo"in e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||
+e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===v?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});z.jQuery=z.$=c})(window);
diff --git a/static/menu.gif b/static/menu.gif
new file mode 100644
index 0000000..4d5b2c2
--- /dev/null
+++ b/static/menu.gif
Binary files differ
diff --git a/static/title.png b/static/title.png
new file mode 100644
index 0000000..6b0658a
--- /dev/null
+++ b/static/title.png
Binary files differ
diff --git a/uploads/comment.file.81d7970cbb9e7191.547572746c65417274436f6c6f72732833292e7461.ta b/uploads/comment.file.81d7970cbb9e7191.547572746c65417274436f6c6f72732833292e7461.ta
new file mode 100644
index 0000000..cb6b4e8
--- /dev/null
+++ b/uploads/comment.file.81d7970cbb9e7191.547572746c65417274436f6c6f72732833292e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 73, 77, [null, 2]], [1, "setxy", 984, 310, [9, 34, 13, 5]], [2, "clean", 73, 96, [0, 31]], [3, "seth", 959, 170, [21, 4, 83]], [4, ["number", 90], 994, 170, [3, null]], [5, "forward", 984, 347, [1, 6, 15]], [6, ["number", 50], 1013, 347, [5, null]], [7, "setpensize", 959, 208, [83, 8, 25]], [8, ["number", 1], 994, 208, [7, null]], [9, "repeat", 959, 283, [11, 10, 1, 71]], [10, ["number", 50], 978, 283, [9, null]], [11, "storein", 959, 246, [25, 12, 39, 9]], [12, ["string", "y-start"], 987, 246, [11, null]], [13, "box", 1010, 328, [1, 14, null]], [14, ["string", "y-start"], 1034, 328, [13, null]], [15, "storein", 984, 366, [5, 16, 17, null]], [16, ["string", "y-start"], 1012, 366, [15, null]], [17, "plus2", 1012, 384, [15, 18, 20]], [18, "box", 1036, 384, [17, 19, null]], [19, ["string", "y-start"], 1060, 384, [18, null]], [20, ["number", 1], 1036, 402, [17, null]], [21, "hat", 959, 148, [null, 22, 3]], [22, ["string", "fill box"], 985, 151, [21, null]], [23, "stack", 125, 377, [56, 24, null]], [24, ["string", "fill box"], 151, 377, [23, null]], [25, "setcolor", 959, 227, [7, 29, 11]], [26, "storein", 73, 185, [36, 27, 28, 57]], [27, ["string", "my color"], 101, 185, [26, null]], [28, ["number", "0"], 101, 203, [26, null]], [29, "box", 989, 227, [25, 30, null]], [30, ["string", "my color"], 1013, 227, [29, null]], [31, "storein", 73, 111, [2, 32, 33, 36]], [32, ["string", "lower left x"], 103, 111, [31, null]], [33, ["number", "-300"], 103, 129, [31, null]], [34, "box", 1010, 310, [1, 35, null]], [35, ["string", "lower left x"], 1034, 310, [34, null]], [36, "storein", 73, 148, [31, 37, 38, 26]], [37, ["string", "lower left y"], 103, 148, [36, null]], [38, ["number", "200"], 103, 166, [36, null]], [39, "box", 987, 264, [11, 40, null]], [40, ["string", "lower left y"], 1011, 264, [39, null]], [41, "repeat", 99, 249, [57, 42, 43, 60]], [42, ["number", "10"], 118, 249, [41, null]], [43, "storein", 125, 276, [41, 44, 46, 51]], [44, ["string", "my color"], 155, 276, [43, null]], [45, ["number", "50"], 179, 349, [53, null]], [46, ["identity2", 80.040000000000006], 155, 294, [43, 47]], [47, "plus2", 250, 294, [46, 48, 50]], [48, "box", 274, 294, [47, 49, null]], [49, ["string", "my color"], 298, 294, [48, null]], [50, ["number", "1"], 274, 312, [47, null]], [51, "storein", 125, 313, [43, 52, 53, 56]], [52, ["string", "lower left x"], 155, 313, [51, null]], [53, "plus2", 155, 331, [51, 54, 45]], [54, "box", 179, 331, [53, 55, null]], [55, ["string", "lower left x"], 203, 331, [54, null]], [56, ["vspace", 13.34], 125, 350, [51, 23]], [57, "repeat", 73, 222, [26, 58, 41, 59]], [58, ["number", "10"], 92, 222, [57, null]], [59, ["vspace", 280.0], 73, 257, [57, 95]], [60, ["vspace", 120.04000000000001], 99, 284, [41, 61]], [61, "storein", 99, 404, [60, 62, 63, 67]], [62, ["string", "lower left y"], 129, 404, [61, null]], [63, "minus2", 129, 422, [61, 64, 66]], [64, "box", 153, 422, [63, 65, null]], [65, ["string", "lower left y"], 177, 422, [64, null]], [66, ["number", "50"], 164, 440, [63, null]], [67, ["vspace", 13.34], 99, 441, [61, 68]], [68, "storein", 99, 468, [67, 69, 70, null]], [69, ["string", "lower left x"], 128, 468, [68, null]], [70, ["number", "-300"], 128, 486, [68, null]], [71, ["vspace", 100], 959, 318, [9, 72]], [72, "setxy", 959, 422, [71, 74, 75, 82]], [73, "plus2", 1098, 422, [74, 79, 78]], [74, ["identity2", 100], 985, 422, [72, 73]], [75, "plus2", 985, 440, [72, 76, 81]], [76, "box", 1009, 440, [75, 77, null]], [77, ["string", "lower left y"], 1033, 440, [76, null]], [78, ["number", "5"], 1122, 440, [73, null]], [79, "box", 1122, 422, [73, 80, null]], [80, ["string", "lower left x"], 1146, 422, [79, null]], [81, ["number", "-25"], 1009, 458, [75, null]], [82, ["vspace", 20], 959, 459, [72, 85]], [83, "setshade", 959, 189, [3, 84, 7]], [84, ["number", 50], 994, 189, [83, null]], [85, "setshade", 959, 492, [82, 86, 91]], [86, ["number", "0"], 994, 492, [85, null]], [87, "box", 1086, 511, [93, 88, null]], [88, ["string", "my color"], 1110, 511, [87, null]], [89, "setshade", 959, 530, [91, 90, null]], [90, ["number", 50], 994, 530, [89, null]], [91, "show", 959, 511, [85, 92, 89]], [92, ["identity2", 60], 985, 511, [91, 93]], [93, "minus2", 1062, 511, [92, 87, 94]], [94, ["number", "1"], 1097, 529, [93, null]], [95, "setxy", 73, 521, [59, 96, 97, 100]], [96, ["number", "-90"], 99, 521, [95, null]], [97, ["number", "250"], 99, 539, [95, null]], [98, "show", 73, 577, [100, 99, 102]], [99, ["string", "Colors in TurtleArt"], 99, 577, [98, null]], [100, "setshade", 73, 558, [95, 101, 98]], [101, ["number", "0"], 108, 558, [100, null]], [102, "savesvg", 73, 596, [98, 103, null]], [103, ["string", "TurtleArtColors"], 108, 596, [102, null]], [-1, ["turtle", 1], -90, 250, 90.0, 100.0, 0.0, 1.0]] \ No newline at end of file
diff --git a/uploads/comment.file.82f54d8ce1b21807.6f63742e7461.png b/uploads/comment.file.82f54d8ce1b21807.6f63742e7461.png
new file mode 100644
index 0000000..ea69266
--- /dev/null
+++ b/uploads/comment.file.82f54d8ce1b21807.6f63742e7461.png
Binary files differ
diff --git a/uploads/comment.file.82f54d8ce1b21807.6f63742e7461.ta b/uploads/comment.file.82f54d8ce1b21807.6f63742e7461.ta
new file mode 100644
index 0000000..dc6182a
--- /dev/null
+++ b/uploads/comment.file.82f54d8ce1b21807.6f63742e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 167, 318, [null, 1]], [1, "repeat", 167, 360, [0, 2, 3, null]], [2, ["number", "8"], 215, 360, [1, null]], [3, "forward", 229, 420, [1, 4, 5]], [4, ["number", 100], 301, 420, [3, null]], [5, "right", 229, 462, [3, 6, null]], [6, ["number", "45"], 287, 462, [5, null]], [-1, ["turtle", 1], 0, 0, 0.0, 0, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.8422e8e9993e197a.547572746c65417274436f6c6f72732832292e7461.png b/uploads/comment.file.8422e8e9993e197a.547572746c65417274436f6c6f72732832292e7461.png
new file mode 100644
index 0000000..21d5153
--- /dev/null
+++ b/uploads/comment.file.8422e8e9993e197a.547572746c65417274436f6c6f72732832292e7461.png
Binary files differ
diff --git a/uploads/comment.file.8422e8e9993e197a.547572746c65417274436f6c6f72732832292e7461.ta b/uploads/comment.file.8422e8e9993e197a.547572746c65417274436f6c6f72732832292e7461.ta
new file mode 100644
index 0000000..cb6b4e8
--- /dev/null
+++ b/uploads/comment.file.8422e8e9993e197a.547572746c65417274436f6c6f72732832292e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 73, 77, [null, 2]], [1, "setxy", 984, 310, [9, 34, 13, 5]], [2, "clean", 73, 96, [0, 31]], [3, "seth", 959, 170, [21, 4, 83]], [4, ["number", 90], 994, 170, [3, null]], [5, "forward", 984, 347, [1, 6, 15]], [6, ["number", 50], 1013, 347, [5, null]], [7, "setpensize", 959, 208, [83, 8, 25]], [8, ["number", 1], 994, 208, [7, null]], [9, "repeat", 959, 283, [11, 10, 1, 71]], [10, ["number", 50], 978, 283, [9, null]], [11, "storein", 959, 246, [25, 12, 39, 9]], [12, ["string", "y-start"], 987, 246, [11, null]], [13, "box", 1010, 328, [1, 14, null]], [14, ["string", "y-start"], 1034, 328, [13, null]], [15, "storein", 984, 366, [5, 16, 17, null]], [16, ["string", "y-start"], 1012, 366, [15, null]], [17, "plus2", 1012, 384, [15, 18, 20]], [18, "box", 1036, 384, [17, 19, null]], [19, ["string", "y-start"], 1060, 384, [18, null]], [20, ["number", 1], 1036, 402, [17, null]], [21, "hat", 959, 148, [null, 22, 3]], [22, ["string", "fill box"], 985, 151, [21, null]], [23, "stack", 125, 377, [56, 24, null]], [24, ["string", "fill box"], 151, 377, [23, null]], [25, "setcolor", 959, 227, [7, 29, 11]], [26, "storein", 73, 185, [36, 27, 28, 57]], [27, ["string", "my color"], 101, 185, [26, null]], [28, ["number", "0"], 101, 203, [26, null]], [29, "box", 989, 227, [25, 30, null]], [30, ["string", "my color"], 1013, 227, [29, null]], [31, "storein", 73, 111, [2, 32, 33, 36]], [32, ["string", "lower left x"], 103, 111, [31, null]], [33, ["number", "-300"], 103, 129, [31, null]], [34, "box", 1010, 310, [1, 35, null]], [35, ["string", "lower left x"], 1034, 310, [34, null]], [36, "storein", 73, 148, [31, 37, 38, 26]], [37, ["string", "lower left y"], 103, 148, [36, null]], [38, ["number", "200"], 103, 166, [36, null]], [39, "box", 987, 264, [11, 40, null]], [40, ["string", "lower left y"], 1011, 264, [39, null]], [41, "repeat", 99, 249, [57, 42, 43, 60]], [42, ["number", "10"], 118, 249, [41, null]], [43, "storein", 125, 276, [41, 44, 46, 51]], [44, ["string", "my color"], 155, 276, [43, null]], [45, ["number", "50"], 179, 349, [53, null]], [46, ["identity2", 80.040000000000006], 155, 294, [43, 47]], [47, "plus2", 250, 294, [46, 48, 50]], [48, "box", 274, 294, [47, 49, null]], [49, ["string", "my color"], 298, 294, [48, null]], [50, ["number", "1"], 274, 312, [47, null]], [51, "storein", 125, 313, [43, 52, 53, 56]], [52, ["string", "lower left x"], 155, 313, [51, null]], [53, "plus2", 155, 331, [51, 54, 45]], [54, "box", 179, 331, [53, 55, null]], [55, ["string", "lower left x"], 203, 331, [54, null]], [56, ["vspace", 13.34], 125, 350, [51, 23]], [57, "repeat", 73, 222, [26, 58, 41, 59]], [58, ["number", "10"], 92, 222, [57, null]], [59, ["vspace", 280.0], 73, 257, [57, 95]], [60, ["vspace", 120.04000000000001], 99, 284, [41, 61]], [61, "storein", 99, 404, [60, 62, 63, 67]], [62, ["string", "lower left y"], 129, 404, [61, null]], [63, "minus2", 129, 422, [61, 64, 66]], [64, "box", 153, 422, [63, 65, null]], [65, ["string", "lower left y"], 177, 422, [64, null]], [66, ["number", "50"], 164, 440, [63, null]], [67, ["vspace", 13.34], 99, 441, [61, 68]], [68, "storein", 99, 468, [67, 69, 70, null]], [69, ["string", "lower left x"], 128, 468, [68, null]], [70, ["number", "-300"], 128, 486, [68, null]], [71, ["vspace", 100], 959, 318, [9, 72]], [72, "setxy", 959, 422, [71, 74, 75, 82]], [73, "plus2", 1098, 422, [74, 79, 78]], [74, ["identity2", 100], 985, 422, [72, 73]], [75, "plus2", 985, 440, [72, 76, 81]], [76, "box", 1009, 440, [75, 77, null]], [77, ["string", "lower left y"], 1033, 440, [76, null]], [78, ["number", "5"], 1122, 440, [73, null]], [79, "box", 1122, 422, [73, 80, null]], [80, ["string", "lower left x"], 1146, 422, [79, null]], [81, ["number", "-25"], 1009, 458, [75, null]], [82, ["vspace", 20], 959, 459, [72, 85]], [83, "setshade", 959, 189, [3, 84, 7]], [84, ["number", 50], 994, 189, [83, null]], [85, "setshade", 959, 492, [82, 86, 91]], [86, ["number", "0"], 994, 492, [85, null]], [87, "box", 1086, 511, [93, 88, null]], [88, ["string", "my color"], 1110, 511, [87, null]], [89, "setshade", 959, 530, [91, 90, null]], [90, ["number", 50], 994, 530, [89, null]], [91, "show", 959, 511, [85, 92, 89]], [92, ["identity2", 60], 985, 511, [91, 93]], [93, "minus2", 1062, 511, [92, 87, 94]], [94, ["number", "1"], 1097, 529, [93, null]], [95, "setxy", 73, 521, [59, 96, 97, 100]], [96, ["number", "-90"], 99, 521, [95, null]], [97, ["number", "250"], 99, 539, [95, null]], [98, "show", 73, 577, [100, 99, 102]], [99, ["string", "Colors in TurtleArt"], 99, 577, [98, null]], [100, "setshade", 73, 558, [95, 101, 98]], [101, ["number", "0"], 108, 558, [100, null]], [102, "savesvg", 73, 596, [98, 103, null]], [103, ["string", "TurtleArtColors"], 108, 596, [102, null]], [-1, ["turtle", 1], -90, 250, 90.0, 100.0, 0.0, 1.0]] \ No newline at end of file
diff --git a/uploads/comment.file.84504ba1b74b79db.6f63742e7461.ta b/uploads/comment.file.84504ba1b74b79db.6f63742e7461.ta
new file mode 100644
index 0000000..dc6182a
--- /dev/null
+++ b/uploads/comment.file.84504ba1b74b79db.6f63742e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 167, 318, [null, 1]], [1, "repeat", 167, 360, [0, 2, 3, null]], [2, ["number", "8"], 215, 360, [1, null]], [3, "forward", 229, 420, [1, 4, 5]], [4, ["number", 100], 301, 420, [3, null]], [5, "right", 229, 462, [3, 6, null]], [6, ["number", "45"], 287, 462, [5, null]], [-1, ["turtle", 1], 0, 0, 0.0, 0, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.86e1907a57f27ca4.7371756172652e7461.ta b/uploads/comment.file.86e1907a57f27ca4.7371756172652e7461.ta
new file mode 100644
index 0000000..b32ec76
--- /dev/null
+++ b/uploads/comment.file.86e1907a57f27ca4.7371756172652e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 195, 195, [null, 1]], [1, "repeat", 195, 237, [0, 2, 4, 3]], [2, ["number", 4], 243, 237, [1, null]], [3, ["vspace", 0], 195, 315, [1, null]], [4, "forward", 257, 297, [1, 5, 6]], [5, ["number", 100], 329, 297, [4, null]], [6, "right", 257, 339, [4, 7, null]], [7, ["number", 90], 315, 339, [6, null]], [-1, ["turtle", 1], 0, 0, 0.0, 0, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.8713cec71bc2c47e.72616e646f6d2e7461.ta b/uploads/comment.file.8713cec71bc2c47e.72616e646f6d2e7461.ta
new file mode 100644
index 0000000..69343c8
--- /dev/null
+++ b/uploads/comment.file.8713cec71bc2c47e.72616e646f6d2e7461.ta
@@ -0,0 +1 @@
+[[0, ["start", 2.0], 195, 198, [null, 2]], [1, "forward", 257, 450, [7, 13, 10]], [2, "pendown", 195, 240, [0, 8]], [3, "setcolor", 257, 334, [8, 4, 7]], [4, "random", 335, 334, [3, 5, 6, null]], [5, ["number", 0], 423, 334, [4, null]], [6, ["number", 100], 423, 376, [4, null]], [7, ["vspace", 20], 257, 376, [3, 1]], [8, "repeat", 195, 274, [2, 9, 3, null]], [9, ["number", "10"], 243, 274, [8, null]], [10, ["vspace", 20], 257, 492, [1, 11]], [11, "left", 257, 566, [10, 12, null]], [12, ["number", 90], 315, 566, [11, null]], [13, "random", 329, 450, [1, 14, 15, null]], [14, ["number", 0], 417, 450, [13, null]], [15, ["number", 100], 417, 492, [13, null]], [-1, ["turtle", 1], -102, 169, 0.0, 12, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.871a0f417ec61c9b.636f6c6f72776865656c2e7461.ta b/uploads/comment.file.871a0f417ec61c9b.636f6c6f72776865656c2e7461.ta
new file mode 100644
index 0000000..b6d2e89
--- /dev/null
+++ b/uploads/comment.file.871a0f417ec61c9b.636f6c6f72776865656c2e7461.ta
@@ -0,0 +1 @@
+[[0, ["start", 2.0], 95, 241, [null, 1]], [1, "clean", 95, 283, [0, 13]], [2, "repeat", 95, 443, [17, 3, 5, null]], [3, ["number", "1800"], 143, 443, [2, null]], [4, ["vspace", 20], 157, 545, [5, 11]], [5, "setcolor", 157, 503, [2, 19, 4]], [6, "random", 312, 405, [null, null, 8, null]], [7, ["number", "0.055"], 289, 545, [19, null]], [8, ["number", 100], 400, 447, [6, null]], [9, "left", 157, 661, [11, 10, null]], [10, ["number", "179.9"], 215, 661, [9, null]], [11, "forward", 157, 619, [4, 12, 9]], [12, ["number", "1600"], 229, 619, [11, null]], [13, "left", 95, 317, [1, 14, 15]], [14, ["number", "180"], 153, 317, [13, null]], [15, "forward", 95, 359, [13, 16, 17]], [16, ["number", "700"], 167, 359, [15, null]], [17, "left", 95, 401, [15, 18, 2]], [18, ["number", "180"], 153, 401, [17, null]], [19, "plus2", 235, 503, [5, 20, 7]], [20, "color", 289, 503, [19, null]], [-1, ["turtle", 1], -1, 899, 179.9999999999898, 99.000000000004036, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.8c521e341f67938a.547572746c65417274436f6c6f72732e7461.ta b/uploads/comment.file.8c521e341f67938a.547572746c65417274436f6c6f72732e7461.ta
new file mode 100644
index 0000000..cb6b4e8
--- /dev/null
+++ b/uploads/comment.file.8c521e341f67938a.547572746c65417274436f6c6f72732e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 73, 77, [null, 2]], [1, "setxy", 984, 310, [9, 34, 13, 5]], [2, "clean", 73, 96, [0, 31]], [3, "seth", 959, 170, [21, 4, 83]], [4, ["number", 90], 994, 170, [3, null]], [5, "forward", 984, 347, [1, 6, 15]], [6, ["number", 50], 1013, 347, [5, null]], [7, "setpensize", 959, 208, [83, 8, 25]], [8, ["number", 1], 994, 208, [7, null]], [9, "repeat", 959, 283, [11, 10, 1, 71]], [10, ["number", 50], 978, 283, [9, null]], [11, "storein", 959, 246, [25, 12, 39, 9]], [12, ["string", "y-start"], 987, 246, [11, null]], [13, "box", 1010, 328, [1, 14, null]], [14, ["string", "y-start"], 1034, 328, [13, null]], [15, "storein", 984, 366, [5, 16, 17, null]], [16, ["string", "y-start"], 1012, 366, [15, null]], [17, "plus2", 1012, 384, [15, 18, 20]], [18, "box", 1036, 384, [17, 19, null]], [19, ["string", "y-start"], 1060, 384, [18, null]], [20, ["number", 1], 1036, 402, [17, null]], [21, "hat", 959, 148, [null, 22, 3]], [22, ["string", "fill box"], 985, 151, [21, null]], [23, "stack", 125, 377, [56, 24, null]], [24, ["string", "fill box"], 151, 377, [23, null]], [25, "setcolor", 959, 227, [7, 29, 11]], [26, "storein", 73, 185, [36, 27, 28, 57]], [27, ["string", "my color"], 101, 185, [26, null]], [28, ["number", "0"], 101, 203, [26, null]], [29, "box", 989, 227, [25, 30, null]], [30, ["string", "my color"], 1013, 227, [29, null]], [31, "storein", 73, 111, [2, 32, 33, 36]], [32, ["string", "lower left x"], 103, 111, [31, null]], [33, ["number", "-300"], 103, 129, [31, null]], [34, "box", 1010, 310, [1, 35, null]], [35, ["string", "lower left x"], 1034, 310, [34, null]], [36, "storein", 73, 148, [31, 37, 38, 26]], [37, ["string", "lower left y"], 103, 148, [36, null]], [38, ["number", "200"], 103, 166, [36, null]], [39, "box", 987, 264, [11, 40, null]], [40, ["string", "lower left y"], 1011, 264, [39, null]], [41, "repeat", 99, 249, [57, 42, 43, 60]], [42, ["number", "10"], 118, 249, [41, null]], [43, "storein", 125, 276, [41, 44, 46, 51]], [44, ["string", "my color"], 155, 276, [43, null]], [45, ["number", "50"], 179, 349, [53, null]], [46, ["identity2", 80.040000000000006], 155, 294, [43, 47]], [47, "plus2", 250, 294, [46, 48, 50]], [48, "box", 274, 294, [47, 49, null]], [49, ["string", "my color"], 298, 294, [48, null]], [50, ["number", "1"], 274, 312, [47, null]], [51, "storein", 125, 313, [43, 52, 53, 56]], [52, ["string", "lower left x"], 155, 313, [51, null]], [53, "plus2", 155, 331, [51, 54, 45]], [54, "box", 179, 331, [53, 55, null]], [55, ["string", "lower left x"], 203, 331, [54, null]], [56, ["vspace", 13.34], 125, 350, [51, 23]], [57, "repeat", 73, 222, [26, 58, 41, 59]], [58, ["number", "10"], 92, 222, [57, null]], [59, ["vspace", 280.0], 73, 257, [57, 95]], [60, ["vspace", 120.04000000000001], 99, 284, [41, 61]], [61, "storein", 99, 404, [60, 62, 63, 67]], [62, ["string", "lower left y"], 129, 404, [61, null]], [63, "minus2", 129, 422, [61, 64, 66]], [64, "box", 153, 422, [63, 65, null]], [65, ["string", "lower left y"], 177, 422, [64, null]], [66, ["number", "50"], 164, 440, [63, null]], [67, ["vspace", 13.34], 99, 441, [61, 68]], [68, "storein", 99, 468, [67, 69, 70, null]], [69, ["string", "lower left x"], 128, 468, [68, null]], [70, ["number", "-300"], 128, 486, [68, null]], [71, ["vspace", 100], 959, 318, [9, 72]], [72, "setxy", 959, 422, [71, 74, 75, 82]], [73, "plus2", 1098, 422, [74, 79, 78]], [74, ["identity2", 100], 985, 422, [72, 73]], [75, "plus2", 985, 440, [72, 76, 81]], [76, "box", 1009, 440, [75, 77, null]], [77, ["string", "lower left y"], 1033, 440, [76, null]], [78, ["number", "5"], 1122, 440, [73, null]], [79, "box", 1122, 422, [73, 80, null]], [80, ["string", "lower left x"], 1146, 422, [79, null]], [81, ["number", "-25"], 1009, 458, [75, null]], [82, ["vspace", 20], 959, 459, [72, 85]], [83, "setshade", 959, 189, [3, 84, 7]], [84, ["number", 50], 994, 189, [83, null]], [85, "setshade", 959, 492, [82, 86, 91]], [86, ["number", "0"], 994, 492, [85, null]], [87, "box", 1086, 511, [93, 88, null]], [88, ["string", "my color"], 1110, 511, [87, null]], [89, "setshade", 959, 530, [91, 90, null]], [90, ["number", 50], 994, 530, [89, null]], [91, "show", 959, 511, [85, 92, 89]], [92, ["identity2", 60], 985, 511, [91, 93]], [93, "minus2", 1062, 511, [92, 87, 94]], [94, ["number", "1"], 1097, 529, [93, null]], [95, "setxy", 73, 521, [59, 96, 97, 100]], [96, ["number", "-90"], 99, 521, [95, null]], [97, ["number", "250"], 99, 539, [95, null]], [98, "show", 73, 577, [100, 99, 102]], [99, ["string", "Colors in TurtleArt"], 99, 577, [98, null]], [100, "setshade", 73, 558, [95, 101, 98]], [101, ["number", "0"], 108, 558, [100, null]], [102, "savesvg", 73, 596, [98, 103, null]], [103, ["string", "TurtleArtColors"], 108, 596, [102, null]], [-1, ["turtle", 1], -90, 250, 90.0, 100.0, 0.0, 1.0]] \ No newline at end of file
diff --git a/uploads/comment.file.8d6af2114401515b.72616e646f6d2e7461.ta b/uploads/comment.file.8d6af2114401515b.72616e646f6d2e7461.ta
new file mode 100644
index 0000000..69343c8
--- /dev/null
+++ b/uploads/comment.file.8d6af2114401515b.72616e646f6d2e7461.ta
@@ -0,0 +1 @@
+[[0, ["start", 2.0], 195, 198, [null, 2]], [1, "forward", 257, 450, [7, 13, 10]], [2, "pendown", 195, 240, [0, 8]], [3, "setcolor", 257, 334, [8, 4, 7]], [4, "random", 335, 334, [3, 5, 6, null]], [5, ["number", 0], 423, 334, [4, null]], [6, ["number", 100], 423, 376, [4, null]], [7, ["vspace", 20], 257, 376, [3, 1]], [8, "repeat", 195, 274, [2, 9, 3, null]], [9, ["number", "10"], 243, 274, [8, null]], [10, ["vspace", 20], 257, 492, [1, 11]], [11, "left", 257, 566, [10, 12, null]], [12, ["number", 90], 315, 566, [11, null]], [13, "random", 329, 450, [1, 14, 15, null]], [14, ["number", 0], 417, 450, [13, null]], [15, ["number", 100], 417, 492, [13, null]], [-1, ["turtle", 1], -102, 169, 0.0, 12, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.8de211ac973fc023.547572746c65417274436f6c6f72732e7461.png b/uploads/comment.file.8de211ac973fc023.547572746c65417274436f6c6f72732e7461.png
new file mode 100644
index 0000000..21d5153
--- /dev/null
+++ b/uploads/comment.file.8de211ac973fc023.547572746c65417274436f6c6f72732e7461.png
Binary files differ
diff --git a/uploads/comment.file.8de211ac973fc023.547572746c65417274436f6c6f72732e7461.ta b/uploads/comment.file.8de211ac973fc023.547572746c65417274436f6c6f72732e7461.ta
new file mode 100644
index 0000000..cb6b4e8
--- /dev/null
+++ b/uploads/comment.file.8de211ac973fc023.547572746c65417274436f6c6f72732e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 73, 77, [null, 2]], [1, "setxy", 984, 310, [9, 34, 13, 5]], [2, "clean", 73, 96, [0, 31]], [3, "seth", 959, 170, [21, 4, 83]], [4, ["number", 90], 994, 170, [3, null]], [5, "forward", 984, 347, [1, 6, 15]], [6, ["number", 50], 1013, 347, [5, null]], [7, "setpensize", 959, 208, [83, 8, 25]], [8, ["number", 1], 994, 208, [7, null]], [9, "repeat", 959, 283, [11, 10, 1, 71]], [10, ["number", 50], 978, 283, [9, null]], [11, "storein", 959, 246, [25, 12, 39, 9]], [12, ["string", "y-start"], 987, 246, [11, null]], [13, "box", 1010, 328, [1, 14, null]], [14, ["string", "y-start"], 1034, 328, [13, null]], [15, "storein", 984, 366, [5, 16, 17, null]], [16, ["string", "y-start"], 1012, 366, [15, null]], [17, "plus2", 1012, 384, [15, 18, 20]], [18, "box", 1036, 384, [17, 19, null]], [19, ["string", "y-start"], 1060, 384, [18, null]], [20, ["number", 1], 1036, 402, [17, null]], [21, "hat", 959, 148, [null, 22, 3]], [22, ["string", "fill box"], 985, 151, [21, null]], [23, "stack", 125, 377, [56, 24, null]], [24, ["string", "fill box"], 151, 377, [23, null]], [25, "setcolor", 959, 227, [7, 29, 11]], [26, "storein", 73, 185, [36, 27, 28, 57]], [27, ["string", "my color"], 101, 185, [26, null]], [28, ["number", "0"], 101, 203, [26, null]], [29, "box", 989, 227, [25, 30, null]], [30, ["string", "my color"], 1013, 227, [29, null]], [31, "storein", 73, 111, [2, 32, 33, 36]], [32, ["string", "lower left x"], 103, 111, [31, null]], [33, ["number", "-300"], 103, 129, [31, null]], [34, "box", 1010, 310, [1, 35, null]], [35, ["string", "lower left x"], 1034, 310, [34, null]], [36, "storein", 73, 148, [31, 37, 38, 26]], [37, ["string", "lower left y"], 103, 148, [36, null]], [38, ["number", "200"], 103, 166, [36, null]], [39, "box", 987, 264, [11, 40, null]], [40, ["string", "lower left y"], 1011, 264, [39, null]], [41, "repeat", 99, 249, [57, 42, 43, 60]], [42, ["number", "10"], 118, 249, [41, null]], [43, "storein", 125, 276, [41, 44, 46, 51]], [44, ["string", "my color"], 155, 276, [43, null]], [45, ["number", "50"], 179, 349, [53, null]], [46, ["identity2", 80.040000000000006], 155, 294, [43, 47]], [47, "plus2", 250, 294, [46, 48, 50]], [48, "box", 274, 294, [47, 49, null]], [49, ["string", "my color"], 298, 294, [48, null]], [50, ["number", "1"], 274, 312, [47, null]], [51, "storein", 125, 313, [43, 52, 53, 56]], [52, ["string", "lower left x"], 155, 313, [51, null]], [53, "plus2", 155, 331, [51, 54, 45]], [54, "box", 179, 331, [53, 55, null]], [55, ["string", "lower left x"], 203, 331, [54, null]], [56, ["vspace", 13.34], 125, 350, [51, 23]], [57, "repeat", 73, 222, [26, 58, 41, 59]], [58, ["number", "10"], 92, 222, [57, null]], [59, ["vspace", 280.0], 73, 257, [57, 95]], [60, ["vspace", 120.04000000000001], 99, 284, [41, 61]], [61, "storein", 99, 404, [60, 62, 63, 67]], [62, ["string", "lower left y"], 129, 404, [61, null]], [63, "minus2", 129, 422, [61, 64, 66]], [64, "box", 153, 422, [63, 65, null]], [65, ["string", "lower left y"], 177, 422, [64, null]], [66, ["number", "50"], 164, 440, [63, null]], [67, ["vspace", 13.34], 99, 441, [61, 68]], [68, "storein", 99, 468, [67, 69, 70, null]], [69, ["string", "lower left x"], 128, 468, [68, null]], [70, ["number", "-300"], 128, 486, [68, null]], [71, ["vspace", 100], 959, 318, [9, 72]], [72, "setxy", 959, 422, [71, 74, 75, 82]], [73, "plus2", 1098, 422, [74, 79, 78]], [74, ["identity2", 100], 985, 422, [72, 73]], [75, "plus2", 985, 440, [72, 76, 81]], [76, "box", 1009, 440, [75, 77, null]], [77, ["string", "lower left y"], 1033, 440, [76, null]], [78, ["number", "5"], 1122, 440, [73, null]], [79, "box", 1122, 422, [73, 80, null]], [80, ["string", "lower left x"], 1146, 422, [79, null]], [81, ["number", "-25"], 1009, 458, [75, null]], [82, ["vspace", 20], 959, 459, [72, 85]], [83, "setshade", 959, 189, [3, 84, 7]], [84, ["number", 50], 994, 189, [83, null]], [85, "setshade", 959, 492, [82, 86, 91]], [86, ["number", "0"], 994, 492, [85, null]], [87, "box", 1086, 511, [93, 88, null]], [88, ["string", "my color"], 1110, 511, [87, null]], [89, "setshade", 959, 530, [91, 90, null]], [90, ["number", 50], 994, 530, [89, null]], [91, "show", 959, 511, [85, 92, 89]], [92, ["identity2", 60], 985, 511, [91, 93]], [93, "minus2", 1062, 511, [92, 87, 94]], [94, ["number", "1"], 1097, 529, [93, null]], [95, "setxy", 73, 521, [59, 96, 97, 100]], [96, ["number", "-90"], 99, 521, [95, null]], [97, ["number", "250"], 99, 539, [95, null]], [98, "show", 73, 577, [100, 99, 102]], [99, ["string", "Colors in TurtleArt"], 99, 577, [98, null]], [100, "setshade", 73, 558, [95, 101, 98]], [101, ["number", "0"], 108, 558, [100, null]], [102, "savesvg", 73, 596, [98, 103, null]], [103, ["string", "TurtleArtColors"], 108, 596, [102, null]], [-1, ["turtle", 1], -90, 250, 90.0, 100.0, 0.0, 1.0]] \ No newline at end of file
diff --git a/uploads/comment.file.8e409f405dcce256.72616e646f6d2e7461.ta b/uploads/comment.file.8e409f405dcce256.72616e646f6d2e7461.ta
new file mode 100644
index 0000000..69343c8
--- /dev/null
+++ b/uploads/comment.file.8e409f405dcce256.72616e646f6d2e7461.ta
@@ -0,0 +1 @@
+[[0, ["start", 2.0], 195, 198, [null, 2]], [1, "forward", 257, 450, [7, 13, 10]], [2, "pendown", 195, 240, [0, 8]], [3, "setcolor", 257, 334, [8, 4, 7]], [4, "random", 335, 334, [3, 5, 6, null]], [5, ["number", 0], 423, 334, [4, null]], [6, ["number", 100], 423, 376, [4, null]], [7, ["vspace", 20], 257, 376, [3, 1]], [8, "repeat", 195, 274, [2, 9, 3, null]], [9, ["number", "10"], 243, 274, [8, null]], [10, ["vspace", 20], 257, 492, [1, 11]], [11, "left", 257, 566, [10, 12, null]], [12, ["number", 90], 315, 566, [11, null]], [13, "random", 329, 450, [1, 14, 15, null]], [14, ["number", 0], 417, 450, [13, null]], [15, ["number", 100], 417, 492, [13, null]], [-1, ["turtle", 1], -102, 169, 0.0, 12, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.8e886ea0dea26d33.72616e646f6d2e7461.ta b/uploads/comment.file.8e886ea0dea26d33.72616e646f6d2e7461.ta
new file mode 100644
index 0000000..69343c8
--- /dev/null
+++ b/uploads/comment.file.8e886ea0dea26d33.72616e646f6d2e7461.ta
@@ -0,0 +1 @@
+[[0, ["start", 2.0], 195, 198, [null, 2]], [1, "forward", 257, 450, [7, 13, 10]], [2, "pendown", 195, 240, [0, 8]], [3, "setcolor", 257, 334, [8, 4, 7]], [4, "random", 335, 334, [3, 5, 6, null]], [5, ["number", 0], 423, 334, [4, null]], [6, ["number", 100], 423, 376, [4, null]], [7, ["vspace", 20], 257, 376, [3, 1]], [8, "repeat", 195, 274, [2, 9, 3, null]], [9, ["number", "10"], 243, 274, [8, null]], [10, ["vspace", 20], 257, 492, [1, 11]], [11, "left", 257, 566, [10, 12, null]], [12, ["number", 90], 315, 566, [11, null]], [13, "random", 329, 450, [1, 14, 15, null]], [14, ["number", 0], 417, 450, [13, null]], [15, ["number", 100], 417, 492, [13, null]], [-1, ["turtle", 1], -102, 169, 0.0, 12, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.8ffcc006f7d9b671.6f63742e7461.ta b/uploads/comment.file.8ffcc006f7d9b671.6f63742e7461.ta
new file mode 100644
index 0000000..dc6182a
--- /dev/null
+++ b/uploads/comment.file.8ffcc006f7d9b671.6f63742e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 167, 318, [null, 1]], [1, "repeat", 167, 360, [0, 2, 3, null]], [2, ["number", "8"], 215, 360, [1, null]], [3, "forward", 229, 420, [1, 4, 5]], [4, ["number", 100], 301, 420, [3, null]], [5, "right", 229, 462, [3, 6, null]], [6, ["number", "45"], 287, 462, [5, null]], [-1, ["turtle", 1], 0, 0, 0.0, 0, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.90337a96e341cdab.7061747465726e2e7461.ta b/uploads/comment.file.90337a96e341cdab.7061747465726e2e7461.ta
new file mode 100644
index 0000000..31ec787
--- /dev/null
+++ b/uploads/comment.file.90337a96e341cdab.7061747465726e2e7461.ta
@@ -0,0 +1 @@
+[[0, ["start", 2.0], 102, 242, [null, 3]], [1, "forward", 449, 285, [null, 2, 4]], [2, ["number", 100], 521, 285, [1, null]], [3, "clean", 102, 284, [0, 11]], [4, "left", 449, 327, [1, 5, 6]], [5, ["number", 90], 507, 327, [4, null]], [6, "forward", 449, 369, [4, 7, null]], [7, ["number", 100], 521, 369, [6, null]], [8, "arc", 164, 494, [13, 9, 10, 18]], [9, ["number", "80"], 222, 494, [8, null]], [10, ["number", "60"], 222, 536, [8, null]], [11, "repeat", 102, 318, [3, 12, 14, null]], [12, ["number", "100"], 150, 318, [11, null]], [13, ["vspace", 20], 164, 420, [14, 8]], [14, "setcolor", 164, 378, [11, 15, 13]], [15, "random", 242, 378, [14, 16, 17, null]], [16, ["number", 0], 330, 378, [15, null]], [17, ["number", 100], 330, 420, [15, null]], [18, "left", 164, 578, [8, 19, null]], [19, ["number", "35"], 222, 578, [18, null]], [-1, ["turtle", 1], 192, -60, 180.0, 24, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.909a0af0445403d4.547572746c65417274436f6c6f72732e7461.ta b/uploads/comment.file.909a0af0445403d4.547572746c65417274436f6c6f72732e7461.ta
new file mode 100644
index 0000000..cb6b4e8
--- /dev/null
+++ b/uploads/comment.file.909a0af0445403d4.547572746c65417274436f6c6f72732e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 73, 77, [null, 2]], [1, "setxy", 984, 310, [9, 34, 13, 5]], [2, "clean", 73, 96, [0, 31]], [3, "seth", 959, 170, [21, 4, 83]], [4, ["number", 90], 994, 170, [3, null]], [5, "forward", 984, 347, [1, 6, 15]], [6, ["number", 50], 1013, 347, [5, null]], [7, "setpensize", 959, 208, [83, 8, 25]], [8, ["number", 1], 994, 208, [7, null]], [9, "repeat", 959, 283, [11, 10, 1, 71]], [10, ["number", 50], 978, 283, [9, null]], [11, "storein", 959, 246, [25, 12, 39, 9]], [12, ["string", "y-start"], 987, 246, [11, null]], [13, "box", 1010, 328, [1, 14, null]], [14, ["string", "y-start"], 1034, 328, [13, null]], [15, "storein", 984, 366, [5, 16, 17, null]], [16, ["string", "y-start"], 1012, 366, [15, null]], [17, "plus2", 1012, 384, [15, 18, 20]], [18, "box", 1036, 384, [17, 19, null]], [19, ["string", "y-start"], 1060, 384, [18, null]], [20, ["number", 1], 1036, 402, [17, null]], [21, "hat", 959, 148, [null, 22, 3]], [22, ["string", "fill box"], 985, 151, [21, null]], [23, "stack", 125, 377, [56, 24, null]], [24, ["string", "fill box"], 151, 377, [23, null]], [25, "setcolor", 959, 227, [7, 29, 11]], [26, "storein", 73, 185, [36, 27, 28, 57]], [27, ["string", "my color"], 101, 185, [26, null]], [28, ["number", "0"], 101, 203, [26, null]], [29, "box", 989, 227, [25, 30, null]], [30, ["string", "my color"], 1013, 227, [29, null]], [31, "storein", 73, 111, [2, 32, 33, 36]], [32, ["string", "lower left x"], 103, 111, [31, null]], [33, ["number", "-300"], 103, 129, [31, null]], [34, "box", 1010, 310, [1, 35, null]], [35, ["string", "lower left x"], 1034, 310, [34, null]], [36, "storein", 73, 148, [31, 37, 38, 26]], [37, ["string", "lower left y"], 103, 148, [36, null]], [38, ["number", "200"], 103, 166, [36, null]], [39, "box", 987, 264, [11, 40, null]], [40, ["string", "lower left y"], 1011, 264, [39, null]], [41, "repeat", 99, 249, [57, 42, 43, 60]], [42, ["number", "10"], 118, 249, [41, null]], [43, "storein", 125, 276, [41, 44, 46, 51]], [44, ["string", "my color"], 155, 276, [43, null]], [45, ["number", "50"], 179, 349, [53, null]], [46, ["identity2", 80.040000000000006], 155, 294, [43, 47]], [47, "plus2", 250, 294, [46, 48, 50]], [48, "box", 274, 294, [47, 49, null]], [49, ["string", "my color"], 298, 294, [48, null]], [50, ["number", "1"], 274, 312, [47, null]], [51, "storein", 125, 313, [43, 52, 53, 56]], [52, ["string", "lower left x"], 155, 313, [51, null]], [53, "plus2", 155, 331, [51, 54, 45]], [54, "box", 179, 331, [53, 55, null]], [55, ["string", "lower left x"], 203, 331, [54, null]], [56, ["vspace", 13.34], 125, 350, [51, 23]], [57, "repeat", 73, 222, [26, 58, 41, 59]], [58, ["number", "10"], 92, 222, [57, null]], [59, ["vspace", 280.0], 73, 257, [57, 95]], [60, ["vspace", 120.04000000000001], 99, 284, [41, 61]], [61, "storein", 99, 404, [60, 62, 63, 67]], [62, ["string", "lower left y"], 129, 404, [61, null]], [63, "minus2", 129, 422, [61, 64, 66]], [64, "box", 153, 422, [63, 65, null]], [65, ["string", "lower left y"], 177, 422, [64, null]], [66, ["number", "50"], 164, 440, [63, null]], [67, ["vspace", 13.34], 99, 441, [61, 68]], [68, "storein", 99, 468, [67, 69, 70, null]], [69, ["string", "lower left x"], 128, 468, [68, null]], [70, ["number", "-300"], 128, 486, [68, null]], [71, ["vspace", 100], 959, 318, [9, 72]], [72, "setxy", 959, 422, [71, 74, 75, 82]], [73, "plus2", 1098, 422, [74, 79, 78]], [74, ["identity2", 100], 985, 422, [72, 73]], [75, "plus2", 985, 440, [72, 76, 81]], [76, "box", 1009, 440, [75, 77, null]], [77, ["string", "lower left y"], 1033, 440, [76, null]], [78, ["number", "5"], 1122, 440, [73, null]], [79, "box", 1122, 422, [73, 80, null]], [80, ["string", "lower left x"], 1146, 422, [79, null]], [81, ["number", "-25"], 1009, 458, [75, null]], [82, ["vspace", 20], 959, 459, [72, 85]], [83, "setshade", 959, 189, [3, 84, 7]], [84, ["number", 50], 994, 189, [83, null]], [85, "setshade", 959, 492, [82, 86, 91]], [86, ["number", "0"], 994, 492, [85, null]], [87, "box", 1086, 511, [93, 88, null]], [88, ["string", "my color"], 1110, 511, [87, null]], [89, "setshade", 959, 530, [91, 90, null]], [90, ["number", 50], 994, 530, [89, null]], [91, "show", 959, 511, [85, 92, 89]], [92, ["identity2", 60], 985, 511, [91, 93]], [93, "minus2", 1062, 511, [92, 87, 94]], [94, ["number", "1"], 1097, 529, [93, null]], [95, "setxy", 73, 521, [59, 96, 97, 100]], [96, ["number", "-90"], 99, 521, [95, null]], [97, ["number", "250"], 99, 539, [95, null]], [98, "show", 73, 577, [100, 99, 102]], [99, ["string", "Colors in TurtleArt"], 99, 577, [98, null]], [100, "setshade", 73, 558, [95, 101, 98]], [101, ["number", "0"], 108, 558, [100, null]], [102, "savesvg", 73, 596, [98, 103, null]], [103, ["string", "TurtleArtColors"], 108, 596, [102, null]], [-1, ["turtle", 1], -90, 250, 90.0, 100.0, 0.0, 1.0]] \ No newline at end of file
diff --git a/uploads/comment.file.91fdd282b0577e09.547572746c65417274436f6c6f72732e7461.ta b/uploads/comment.file.91fdd282b0577e09.547572746c65417274436f6c6f72732e7461.ta
new file mode 100644
index 0000000..cb6b4e8
--- /dev/null
+++ b/uploads/comment.file.91fdd282b0577e09.547572746c65417274436f6c6f72732e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 73, 77, [null, 2]], [1, "setxy", 984, 310, [9, 34, 13, 5]], [2, "clean", 73, 96, [0, 31]], [3, "seth", 959, 170, [21, 4, 83]], [4, ["number", 90], 994, 170, [3, null]], [5, "forward", 984, 347, [1, 6, 15]], [6, ["number", 50], 1013, 347, [5, null]], [7, "setpensize", 959, 208, [83, 8, 25]], [8, ["number", 1], 994, 208, [7, null]], [9, "repeat", 959, 283, [11, 10, 1, 71]], [10, ["number", 50], 978, 283, [9, null]], [11, "storein", 959, 246, [25, 12, 39, 9]], [12, ["string", "y-start"], 987, 246, [11, null]], [13, "box", 1010, 328, [1, 14, null]], [14, ["string", "y-start"], 1034, 328, [13, null]], [15, "storein", 984, 366, [5, 16, 17, null]], [16, ["string", "y-start"], 1012, 366, [15, null]], [17, "plus2", 1012, 384, [15, 18, 20]], [18, "box", 1036, 384, [17, 19, null]], [19, ["string", "y-start"], 1060, 384, [18, null]], [20, ["number", 1], 1036, 402, [17, null]], [21, "hat", 959, 148, [null, 22, 3]], [22, ["string", "fill box"], 985, 151, [21, null]], [23, "stack", 125, 377, [56, 24, null]], [24, ["string", "fill box"], 151, 377, [23, null]], [25, "setcolor", 959, 227, [7, 29, 11]], [26, "storein", 73, 185, [36, 27, 28, 57]], [27, ["string", "my color"], 101, 185, [26, null]], [28, ["number", "0"], 101, 203, [26, null]], [29, "box", 989, 227, [25, 30, null]], [30, ["string", "my color"], 1013, 227, [29, null]], [31, "storein", 73, 111, [2, 32, 33, 36]], [32, ["string", "lower left x"], 103, 111, [31, null]], [33, ["number", "-300"], 103, 129, [31, null]], [34, "box", 1010, 310, [1, 35, null]], [35, ["string", "lower left x"], 1034, 310, [34, null]], [36, "storein", 73, 148, [31, 37, 38, 26]], [37, ["string", "lower left y"], 103, 148, [36, null]], [38, ["number", "200"], 103, 166, [36, null]], [39, "box", 987, 264, [11, 40, null]], [40, ["string", "lower left y"], 1011, 264, [39, null]], [41, "repeat", 99, 249, [57, 42, 43, 60]], [42, ["number", "10"], 118, 249, [41, null]], [43, "storein", 125, 276, [41, 44, 46, 51]], [44, ["string", "my color"], 155, 276, [43, null]], [45, ["number", "50"], 179, 349, [53, null]], [46, ["identity2", 80.040000000000006], 155, 294, [43, 47]], [47, "plus2", 250, 294, [46, 48, 50]], [48, "box", 274, 294, [47, 49, null]], [49, ["string", "my color"], 298, 294, [48, null]], [50, ["number", "1"], 274, 312, [47, null]], [51, "storein", 125, 313, [43, 52, 53, 56]], [52, ["string", "lower left x"], 155, 313, [51, null]], [53, "plus2", 155, 331, [51, 54, 45]], [54, "box", 179, 331, [53, 55, null]], [55, ["string", "lower left x"], 203, 331, [54, null]], [56, ["vspace", 13.34], 125, 350, [51, 23]], [57, "repeat", 73, 222, [26, 58, 41, 59]], [58, ["number", "10"], 92, 222, [57, null]], [59, ["vspace", 280.0], 73, 257, [57, 95]], [60, ["vspace", 120.04000000000001], 99, 284, [41, 61]], [61, "storein", 99, 404, [60, 62, 63, 67]], [62, ["string", "lower left y"], 129, 404, [61, null]], [63, "minus2", 129, 422, [61, 64, 66]], [64, "box", 153, 422, [63, 65, null]], [65, ["string", "lower left y"], 177, 422, [64, null]], [66, ["number", "50"], 164, 440, [63, null]], [67, ["vspace", 13.34], 99, 441, [61, 68]], [68, "storein", 99, 468, [67, 69, 70, null]], [69, ["string", "lower left x"], 128, 468, [68, null]], [70, ["number", "-300"], 128, 486, [68, null]], [71, ["vspace", 100], 959, 318, [9, 72]], [72, "setxy", 959, 422, [71, 74, 75, 82]], [73, "plus2", 1098, 422, [74, 79, 78]], [74, ["identity2", 100], 985, 422, [72, 73]], [75, "plus2", 985, 440, [72, 76, 81]], [76, "box", 1009, 440, [75, 77, null]], [77, ["string", "lower left y"], 1033, 440, [76, null]], [78, ["number", "5"], 1122, 440, [73, null]], [79, "box", 1122, 422, [73, 80, null]], [80, ["string", "lower left x"], 1146, 422, [79, null]], [81, ["number", "-25"], 1009, 458, [75, null]], [82, ["vspace", 20], 959, 459, [72, 85]], [83, "setshade", 959, 189, [3, 84, 7]], [84, ["number", 50], 994, 189, [83, null]], [85, "setshade", 959, 492, [82, 86, 91]], [86, ["number", "0"], 994, 492, [85, null]], [87, "box", 1086, 511, [93, 88, null]], [88, ["string", "my color"], 1110, 511, [87, null]], [89, "setshade", 959, 530, [91, 90, null]], [90, ["number", 50], 994, 530, [89, null]], [91, "show", 959, 511, [85, 92, 89]], [92, ["identity2", 60], 985, 511, [91, 93]], [93, "minus2", 1062, 511, [92, 87, 94]], [94, ["number", "1"], 1097, 529, [93, null]], [95, "setxy", 73, 521, [59, 96, 97, 100]], [96, ["number", "-90"], 99, 521, [95, null]], [97, ["number", "250"], 99, 539, [95, null]], [98, "show", 73, 577, [100, 99, 102]], [99, ["string", "Colors in TurtleArt"], 99, 577, [98, null]], [100, "setshade", 73, 558, [95, 101, 98]], [101, ["number", "0"], 108, 558, [100, null]], [102, "savesvg", 73, 596, [98, 103, null]], [103, ["string", "TurtleArtColors"], 108, 596, [102, null]], [-1, ["turtle", 1], -90, 250, 90.0, 100.0, 0.0, 1.0]] \ No newline at end of file
diff --git a/uploads/comment.file.92a63c5d1605151b.747572746c65617274746573742e7461.png b/uploads/comment.file.92a63c5d1605151b.747572746c65617274746573742e7461.png
new file mode 100644
index 0000000..aa68539
--- /dev/null
+++ b/uploads/comment.file.92a63c5d1605151b.747572746c65617274746573742e7461.png
Binary files differ
diff --git a/uploads/comment.file.92a63c5d1605151b.747572746c65617274746573742e7461.ta b/uploads/comment.file.92a63c5d1605151b.747572746c65617274746573742e7461.ta
new file mode 100644
index 0000000..ed639a4
--- /dev/null
+++ b/uploads/comment.file.92a63c5d1605151b.747572746c65617274746573742e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 69, 190, [null, 1]], [1, "forward", 69, 232, [0, 2, 3]], [2, ["number", 100], 141, 232, [1, null]], [3, "left", 69, 274, [1, 4, 5]], [4, ["number", 90], 127, 274, [3, null]], [5, "forward", 69, 316, [3, 6, 13]], [6, ["number", 100], 141, 316, [5, null]], [7, "forward", 69, 400, [13, 8, 9]], [8, ["number", 100], 141, 400, [7, null]], [9, "left", 69, 442, [7, 10, 11]], [10, ["number", 90], 127, 442, [9, null]], [11, "forward", 69, 484, [9, 12, null]], [12, ["number", 100], 141, 484, [11, null]], [13, "left", 69, 358, [5, 14, 7]], [14, ["number", 90], 127, 358, [13, null]], [-1, ["turtle", 1], 0, 0, 0, 0, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.92da1baf2da6ae6b.72616e646f6d2e7461.ta b/uploads/comment.file.92da1baf2da6ae6b.72616e646f6d2e7461.ta
new file mode 100644
index 0000000..69343c8
--- /dev/null
+++ b/uploads/comment.file.92da1baf2da6ae6b.72616e646f6d2e7461.ta
@@ -0,0 +1 @@
+[[0, ["start", 2.0], 195, 198, [null, 2]], [1, "forward", 257, 450, [7, 13, 10]], [2, "pendown", 195, 240, [0, 8]], [3, "setcolor", 257, 334, [8, 4, 7]], [4, "random", 335, 334, [3, 5, 6, null]], [5, ["number", 0], 423, 334, [4, null]], [6, ["number", 100], 423, 376, [4, null]], [7, ["vspace", 20], 257, 376, [3, 1]], [8, "repeat", 195, 274, [2, 9, 3, null]], [9, ["number", "10"], 243, 274, [8, null]], [10, ["vspace", 20], 257, 492, [1, 11]], [11, "left", 257, 566, [10, 12, null]], [12, ["number", 90], 315, 566, [11, null]], [13, "random", 329, 450, [1, 14, 15, null]], [14, ["number", 0], 417, 450, [13, null]], [15, ["number", 100], 417, 492, [13, null]], [-1, ["turtle", 1], -102, 169, 0.0, 12, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.93827d6c52f20276.6f63742e7461.ta b/uploads/comment.file.93827d6c52f20276.6f63742e7461.ta
new file mode 100644
index 0000000..dc6182a
--- /dev/null
+++ b/uploads/comment.file.93827d6c52f20276.6f63742e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 167, 318, [null, 1]], [1, "repeat", 167, 360, [0, 2, 3, null]], [2, ["number", "8"], 215, 360, [1, null]], [3, "forward", 229, 420, [1, 4, 5]], [4, ["number", 100], 301, 420, [3, null]], [5, "right", 229, 462, [3, 6, null]], [6, ["number", "45"], 287, 462, [5, null]], [-1, ["turtle", 1], 0, 0, 0.0, 0, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.9457e6586f80fc90.7371756172652e7461.ta b/uploads/comment.file.9457e6586f80fc90.7371756172652e7461.ta
new file mode 100644
index 0000000..b32ec76
--- /dev/null
+++ b/uploads/comment.file.9457e6586f80fc90.7371756172652e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 195, 195, [null, 1]], [1, "repeat", 195, 237, [0, 2, 4, 3]], [2, ["number", 4], 243, 237, [1, null]], [3, ["vspace", 0], 195, 315, [1, null]], [4, "forward", 257, 297, [1, 5, 6]], [5, ["number", 100], 329, 297, [4, null]], [6, "right", 257, 339, [4, 7, null]], [7, ["number", 90], 315, 339, [6, null]], [-1, ["turtle", 1], 0, 0, 0.0, 0, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.94947c77625ae2a0.547572746c65417274436f6c6f72732e7461.ta b/uploads/comment.file.94947c77625ae2a0.547572746c65417274436f6c6f72732e7461.ta
new file mode 100644
index 0000000..cb6b4e8
--- /dev/null
+++ b/uploads/comment.file.94947c77625ae2a0.547572746c65417274436f6c6f72732e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 73, 77, [null, 2]], [1, "setxy", 984, 310, [9, 34, 13, 5]], [2, "clean", 73, 96, [0, 31]], [3, "seth", 959, 170, [21, 4, 83]], [4, ["number", 90], 994, 170, [3, null]], [5, "forward", 984, 347, [1, 6, 15]], [6, ["number", 50], 1013, 347, [5, null]], [7, "setpensize", 959, 208, [83, 8, 25]], [8, ["number", 1], 994, 208, [7, null]], [9, "repeat", 959, 283, [11, 10, 1, 71]], [10, ["number", 50], 978, 283, [9, null]], [11, "storein", 959, 246, [25, 12, 39, 9]], [12, ["string", "y-start"], 987, 246, [11, null]], [13, "box", 1010, 328, [1, 14, null]], [14, ["string", "y-start"], 1034, 328, [13, null]], [15, "storein", 984, 366, [5, 16, 17, null]], [16, ["string", "y-start"], 1012, 366, [15, null]], [17, "plus2", 1012, 384, [15, 18, 20]], [18, "box", 1036, 384, [17, 19, null]], [19, ["string", "y-start"], 1060, 384, [18, null]], [20, ["number", 1], 1036, 402, [17, null]], [21, "hat", 959, 148, [null, 22, 3]], [22, ["string", "fill box"], 985, 151, [21, null]], [23, "stack", 125, 377, [56, 24, null]], [24, ["string", "fill box"], 151, 377, [23, null]], [25, "setcolor", 959, 227, [7, 29, 11]], [26, "storein", 73, 185, [36, 27, 28, 57]], [27, ["string", "my color"], 101, 185, [26, null]], [28, ["number", "0"], 101, 203, [26, null]], [29, "box", 989, 227, [25, 30, null]], [30, ["string", "my color"], 1013, 227, [29, null]], [31, "storein", 73, 111, [2, 32, 33, 36]], [32, ["string", "lower left x"], 103, 111, [31, null]], [33, ["number", "-300"], 103, 129, [31, null]], [34, "box", 1010, 310, [1, 35, null]], [35, ["string", "lower left x"], 1034, 310, [34, null]], [36, "storein", 73, 148, [31, 37, 38, 26]], [37, ["string", "lower left y"], 103, 148, [36, null]], [38, ["number", "200"], 103, 166, [36, null]], [39, "box", 987, 264, [11, 40, null]], [40, ["string", "lower left y"], 1011, 264, [39, null]], [41, "repeat", 99, 249, [57, 42, 43, 60]], [42, ["number", "10"], 118, 249, [41, null]], [43, "storein", 125, 276, [41, 44, 46, 51]], [44, ["string", "my color"], 155, 276, [43, null]], [45, ["number", "50"], 179, 349, [53, null]], [46, ["identity2", 80.040000000000006], 155, 294, [43, 47]], [47, "plus2", 250, 294, [46, 48, 50]], [48, "box", 274, 294, [47, 49, null]], [49, ["string", "my color"], 298, 294, [48, null]], [50, ["number", "1"], 274, 312, [47, null]], [51, "storein", 125, 313, [43, 52, 53, 56]], [52, ["string", "lower left x"], 155, 313, [51, null]], [53, "plus2", 155, 331, [51, 54, 45]], [54, "box", 179, 331, [53, 55, null]], [55, ["string", "lower left x"], 203, 331, [54, null]], [56, ["vspace", 13.34], 125, 350, [51, 23]], [57, "repeat", 73, 222, [26, 58, 41, 59]], [58, ["number", "10"], 92, 222, [57, null]], [59, ["vspace", 280.0], 73, 257, [57, 95]], [60, ["vspace", 120.04000000000001], 99, 284, [41, 61]], [61, "storein", 99, 404, [60, 62, 63, 67]], [62, ["string", "lower left y"], 129, 404, [61, null]], [63, "minus2", 129, 422, [61, 64, 66]], [64, "box", 153, 422, [63, 65, null]], [65, ["string", "lower left y"], 177, 422, [64, null]], [66, ["number", "50"], 164, 440, [63, null]], [67, ["vspace", 13.34], 99, 441, [61, 68]], [68, "storein", 99, 468, [67, 69, 70, null]], [69, ["string", "lower left x"], 128, 468, [68, null]], [70, ["number", "-300"], 128, 486, [68, null]], [71, ["vspace", 100], 959, 318, [9, 72]], [72, "setxy", 959, 422, [71, 74, 75, 82]], [73, "plus2", 1098, 422, [74, 79, 78]], [74, ["identity2", 100], 985, 422, [72, 73]], [75, "plus2", 985, 440, [72, 76, 81]], [76, "box", 1009, 440, [75, 77, null]], [77, ["string", "lower left y"], 1033, 440, [76, null]], [78, ["number", "5"], 1122, 440, [73, null]], [79, "box", 1122, 422, [73, 80, null]], [80, ["string", "lower left x"], 1146, 422, [79, null]], [81, ["number", "-25"], 1009, 458, [75, null]], [82, ["vspace", 20], 959, 459, [72, 85]], [83, "setshade", 959, 189, [3, 84, 7]], [84, ["number", 50], 994, 189, [83, null]], [85, "setshade", 959, 492, [82, 86, 91]], [86, ["number", "0"], 994, 492, [85, null]], [87, "box", 1086, 511, [93, 88, null]], [88, ["string", "my color"], 1110, 511, [87, null]], [89, "setshade", 959, 530, [91, 90, null]], [90, ["number", 50], 994, 530, [89, null]], [91, "show", 959, 511, [85, 92, 89]], [92, ["identity2", 60], 985, 511, [91, 93]], [93, "minus2", 1062, 511, [92, 87, 94]], [94, ["number", "1"], 1097, 529, [93, null]], [95, "setxy", 73, 521, [59, 96, 97, 100]], [96, ["number", "-90"], 99, 521, [95, null]], [97, ["number", "250"], 99, 539, [95, null]], [98, "show", 73, 577, [100, 99, 102]], [99, ["string", "Colors in TurtleArt"], 99, 577, [98, null]], [100, "setshade", 73, 558, [95, 101, 98]], [101, ["number", "0"], 108, 558, [100, null]], [102, "savesvg", 73, 596, [98, 103, null]], [103, ["string", "TurtleArtColors"], 108, 596, [102, null]], [-1, ["turtle", 1], -90, 250, 90.0, 100.0, 0.0, 1.0]] \ No newline at end of file
diff --git a/uploads/comment.file.961269c389d0f6b8.72616e646f6d2e7461.ta b/uploads/comment.file.961269c389d0f6b8.72616e646f6d2e7461.ta
new file mode 100644
index 0000000..69343c8
--- /dev/null
+++ b/uploads/comment.file.961269c389d0f6b8.72616e646f6d2e7461.ta
@@ -0,0 +1 @@
+[[0, ["start", 2.0], 195, 198, [null, 2]], [1, "forward", 257, 450, [7, 13, 10]], [2, "pendown", 195, 240, [0, 8]], [3, "setcolor", 257, 334, [8, 4, 7]], [4, "random", 335, 334, [3, 5, 6, null]], [5, ["number", 0], 423, 334, [4, null]], [6, ["number", 100], 423, 376, [4, null]], [7, ["vspace", 20], 257, 376, [3, 1]], [8, "repeat", 195, 274, [2, 9, 3, null]], [9, ["number", "10"], 243, 274, [8, null]], [10, ["vspace", 20], 257, 492, [1, 11]], [11, "left", 257, 566, [10, 12, null]], [12, ["number", 90], 315, 566, [11, null]], [13, "random", 329, 450, [1, 14, 15, null]], [14, ["number", 0], 417, 450, [13, null]], [15, ["number", 100], 417, 492, [13, null]], [-1, ["turtle", 1], -102, 169, 0.0, 12, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.96610faa8111f42a.547572746c65417274436f6c6f72732e7461.ta b/uploads/comment.file.96610faa8111f42a.547572746c65417274436f6c6f72732e7461.ta
new file mode 100644
index 0000000..cb6b4e8
--- /dev/null
+++ b/uploads/comment.file.96610faa8111f42a.547572746c65417274436f6c6f72732e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 73, 77, [null, 2]], [1, "setxy", 984, 310, [9, 34, 13, 5]], [2, "clean", 73, 96, [0, 31]], [3, "seth", 959, 170, [21, 4, 83]], [4, ["number", 90], 994, 170, [3, null]], [5, "forward", 984, 347, [1, 6, 15]], [6, ["number", 50], 1013, 347, [5, null]], [7, "setpensize", 959, 208, [83, 8, 25]], [8, ["number", 1], 994, 208, [7, null]], [9, "repeat", 959, 283, [11, 10, 1, 71]], [10, ["number", 50], 978, 283, [9, null]], [11, "storein", 959, 246, [25, 12, 39, 9]], [12, ["string", "y-start"], 987, 246, [11, null]], [13, "box", 1010, 328, [1, 14, null]], [14, ["string", "y-start"], 1034, 328, [13, null]], [15, "storein", 984, 366, [5, 16, 17, null]], [16, ["string", "y-start"], 1012, 366, [15, null]], [17, "plus2", 1012, 384, [15, 18, 20]], [18, "box", 1036, 384, [17, 19, null]], [19, ["string", "y-start"], 1060, 384, [18, null]], [20, ["number", 1], 1036, 402, [17, null]], [21, "hat", 959, 148, [null, 22, 3]], [22, ["string", "fill box"], 985, 151, [21, null]], [23, "stack", 125, 377, [56, 24, null]], [24, ["string", "fill box"], 151, 377, [23, null]], [25, "setcolor", 959, 227, [7, 29, 11]], [26, "storein", 73, 185, [36, 27, 28, 57]], [27, ["string", "my color"], 101, 185, [26, null]], [28, ["number", "0"], 101, 203, [26, null]], [29, "box", 989, 227, [25, 30, null]], [30, ["string", "my color"], 1013, 227, [29, null]], [31, "storein", 73, 111, [2, 32, 33, 36]], [32, ["string", "lower left x"], 103, 111, [31, null]], [33, ["number", "-300"], 103, 129, [31, null]], [34, "box", 1010, 310, [1, 35, null]], [35, ["string", "lower left x"], 1034, 310, [34, null]], [36, "storein", 73, 148, [31, 37, 38, 26]], [37, ["string", "lower left y"], 103, 148, [36, null]], [38, ["number", "200"], 103, 166, [36, null]], [39, "box", 987, 264, [11, 40, null]], [40, ["string", "lower left y"], 1011, 264, [39, null]], [41, "repeat", 99, 249, [57, 42, 43, 60]], [42, ["number", "10"], 118, 249, [41, null]], [43, "storein", 125, 276, [41, 44, 46, 51]], [44, ["string", "my color"], 155, 276, [43, null]], [45, ["number", "50"], 179, 349, [53, null]], [46, ["identity2", 80.040000000000006], 155, 294, [43, 47]], [47, "plus2", 250, 294, [46, 48, 50]], [48, "box", 274, 294, [47, 49, null]], [49, ["string", "my color"], 298, 294, [48, null]], [50, ["number", "1"], 274, 312, [47, null]], [51, "storein", 125, 313, [43, 52, 53, 56]], [52, ["string", "lower left x"], 155, 313, [51, null]], [53, "plus2", 155, 331, [51, 54, 45]], [54, "box", 179, 331, [53, 55, null]], [55, ["string", "lower left x"], 203, 331, [54, null]], [56, ["vspace", 13.34], 125, 350, [51, 23]], [57, "repeat", 73, 222, [26, 58, 41, 59]], [58, ["number", "10"], 92, 222, [57, null]], [59, ["vspace", 280.0], 73, 257, [57, 95]], [60, ["vspace", 120.04000000000001], 99, 284, [41, 61]], [61, "storein", 99, 404, [60, 62, 63, 67]], [62, ["string", "lower left y"], 129, 404, [61, null]], [63, "minus2", 129, 422, [61, 64, 66]], [64, "box", 153, 422, [63, 65, null]], [65, ["string", "lower left y"], 177, 422, [64, null]], [66, ["number", "50"], 164, 440, [63, null]], [67, ["vspace", 13.34], 99, 441, [61, 68]], [68, "storein", 99, 468, [67, 69, 70, null]], [69, ["string", "lower left x"], 128, 468, [68, null]], [70, ["number", "-300"], 128, 486, [68, null]], [71, ["vspace", 100], 959, 318, [9, 72]], [72, "setxy", 959, 422, [71, 74, 75, 82]], [73, "plus2", 1098, 422, [74, 79, 78]], [74, ["identity2", 100], 985, 422, [72, 73]], [75, "plus2", 985, 440, [72, 76, 81]], [76, "box", 1009, 440, [75, 77, null]], [77, ["string", "lower left y"], 1033, 440, [76, null]], [78, ["number", "5"], 1122, 440, [73, null]], [79, "box", 1122, 422, [73, 80, null]], [80, ["string", "lower left x"], 1146, 422, [79, null]], [81, ["number", "-25"], 1009, 458, [75, null]], [82, ["vspace", 20], 959, 459, [72, 85]], [83, "setshade", 959, 189, [3, 84, 7]], [84, ["number", 50], 994, 189, [83, null]], [85, "setshade", 959, 492, [82, 86, 91]], [86, ["number", "0"], 994, 492, [85, null]], [87, "box", 1086, 511, [93, 88, null]], [88, ["string", "my color"], 1110, 511, [87, null]], [89, "setshade", 959, 530, [91, 90, null]], [90, ["number", 50], 994, 530, [89, null]], [91, "show", 959, 511, [85, 92, 89]], [92, ["identity2", 60], 985, 511, [91, 93]], [93, "minus2", 1062, 511, [92, 87, 94]], [94, ["number", "1"], 1097, 529, [93, null]], [95, "setxy", 73, 521, [59, 96, 97, 100]], [96, ["number", "-90"], 99, 521, [95, null]], [97, ["number", "250"], 99, 539, [95, null]], [98, "show", 73, 577, [100, 99, 102]], [99, ["string", "Colors in TurtleArt"], 99, 577, [98, null]], [100, "setshade", 73, 558, [95, 101, 98]], [101, ["number", "0"], 108, 558, [100, null]], [102, "savesvg", 73, 596, [98, 103, null]], [103, ["string", "TurtleArtColors"], 108, 596, [102, null]], [-1, ["turtle", 1], -90, 250, 90.0, 100.0, 0.0, 1.0]] \ No newline at end of file
diff --git a/uploads/comment.file.96d82c103540cce2.72616e646f6d2e7461.ta b/uploads/comment.file.96d82c103540cce2.72616e646f6d2e7461.ta
new file mode 100644
index 0000000..69343c8
--- /dev/null
+++ b/uploads/comment.file.96d82c103540cce2.72616e646f6d2e7461.ta
@@ -0,0 +1 @@
+[[0, ["start", 2.0], 195, 198, [null, 2]], [1, "forward", 257, 450, [7, 13, 10]], [2, "pendown", 195, 240, [0, 8]], [3, "setcolor", 257, 334, [8, 4, 7]], [4, "random", 335, 334, [3, 5, 6, null]], [5, ["number", 0], 423, 334, [4, null]], [6, ["number", 100], 423, 376, [4, null]], [7, ["vspace", 20], 257, 376, [3, 1]], [8, "repeat", 195, 274, [2, 9, 3, null]], [9, ["number", "10"], 243, 274, [8, null]], [10, ["vspace", 20], 257, 492, [1, 11]], [11, "left", 257, 566, [10, 12, null]], [12, ["number", 90], 315, 566, [11, null]], [13, "random", 329, 450, [1, 14, 15, null]], [14, ["number", 0], 417, 450, [13, null]], [15, ["number", 100], 417, 492, [13, null]], [-1, ["turtle", 1], -102, 169, 0.0, 12, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.97fe971da28492b7.72616e646f6d2e7461.png b/uploads/comment.file.97fe971da28492b7.72616e646f6d2e7461.png
new file mode 100644
index 0000000..f3ba62e
--- /dev/null
+++ b/uploads/comment.file.97fe971da28492b7.72616e646f6d2e7461.png
Binary files differ
diff --git a/uploads/comment.file.97fe971da28492b7.72616e646f6d2e7461.ta b/uploads/comment.file.97fe971da28492b7.72616e646f6d2e7461.ta
new file mode 100644
index 0000000..dc1ce7d
--- /dev/null
+++ b/uploads/comment.file.97fe971da28492b7.72616e646f6d2e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 785, 176, [null, 1]], [1, "repeat", 785, 218, [0, 4, 2, null]], [2, "forward", 847, 278, [1, 8, 3]], [3, "right", 847, 320, [2, 5, null]], [4, ["number", 100], 833, 218, [1, null]], [5, "random", 905, 320, [3, 6, 7, null]], [6, ["number", "20"], 993, 320, [5, null]], [7, ["number", "90"], 993, 362, [5, null]], [8, "random", 919, 278, [2, 9, 10, null]], [9, ["number", "40"], 1007, 278, [8, null]], [10, ["number", "120"], 1007, 320, [8, null]], [-1, ["turtle", 1], 0, 0, 0, 0, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.98c655089b2e157d.6f63742e7461.ta b/uploads/comment.file.98c655089b2e157d.6f63742e7461.ta
new file mode 100644
index 0000000..dc6182a
--- /dev/null
+++ b/uploads/comment.file.98c655089b2e157d.6f63742e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 167, 318, [null, 1]], [1, "repeat", 167, 360, [0, 2, 3, null]], [2, ["number", "8"], 215, 360, [1, null]], [3, "forward", 229, 420, [1, 4, 5]], [4, ["number", 100], 301, 420, [3, null]], [5, "right", 229, 462, [3, 6, null]], [6, ["number", "45"], 287, 462, [5, null]], [-1, ["turtle", 1], 0, 0, 0.0, 0, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.9a4e0293482d1a9d.72616e646f6d2e7461.png b/uploads/comment.file.9a4e0293482d1a9d.72616e646f6d2e7461.png
new file mode 100644
index 0000000..067a33a
--- /dev/null
+++ b/uploads/comment.file.9a4e0293482d1a9d.72616e646f6d2e7461.png
Binary files differ
diff --git a/uploads/comment.file.9a4e0293482d1a9d.72616e646f6d2e7461.ta b/uploads/comment.file.9a4e0293482d1a9d.72616e646f6d2e7461.ta
new file mode 100644
index 0000000..dc1ce7d
--- /dev/null
+++ b/uploads/comment.file.9a4e0293482d1a9d.72616e646f6d2e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 785, 176, [null, 1]], [1, "repeat", 785, 218, [0, 4, 2, null]], [2, "forward", 847, 278, [1, 8, 3]], [3, "right", 847, 320, [2, 5, null]], [4, ["number", 100], 833, 218, [1, null]], [5, "random", 905, 320, [3, 6, 7, null]], [6, ["number", "20"], 993, 320, [5, null]], [7, ["number", "90"], 993, 362, [5, null]], [8, "random", 919, 278, [2, 9, 10, null]], [9, ["number", "40"], 1007, 278, [8, null]], [10, ["number", "120"], 1007, 320, [8, null]], [-1, ["turtle", 1], 0, 0, 0, 0, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.9a7b64a807371945.547572746c65417274436f6c6f72732e7461.ta b/uploads/comment.file.9a7b64a807371945.547572746c65417274436f6c6f72732e7461.ta
new file mode 100644
index 0000000..cb6b4e8
--- /dev/null
+++ b/uploads/comment.file.9a7b64a807371945.547572746c65417274436f6c6f72732e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 73, 77, [null, 2]], [1, "setxy", 984, 310, [9, 34, 13, 5]], [2, "clean", 73, 96, [0, 31]], [3, "seth", 959, 170, [21, 4, 83]], [4, ["number", 90], 994, 170, [3, null]], [5, "forward", 984, 347, [1, 6, 15]], [6, ["number", 50], 1013, 347, [5, null]], [7, "setpensize", 959, 208, [83, 8, 25]], [8, ["number", 1], 994, 208, [7, null]], [9, "repeat", 959, 283, [11, 10, 1, 71]], [10, ["number", 50], 978, 283, [9, null]], [11, "storein", 959, 246, [25, 12, 39, 9]], [12, ["string", "y-start"], 987, 246, [11, null]], [13, "box", 1010, 328, [1, 14, null]], [14, ["string", "y-start"], 1034, 328, [13, null]], [15, "storein", 984, 366, [5, 16, 17, null]], [16, ["string", "y-start"], 1012, 366, [15, null]], [17, "plus2", 1012, 384, [15, 18, 20]], [18, "box", 1036, 384, [17, 19, null]], [19, ["string", "y-start"], 1060, 384, [18, null]], [20, ["number", 1], 1036, 402, [17, null]], [21, "hat", 959, 148, [null, 22, 3]], [22, ["string", "fill box"], 985, 151, [21, null]], [23, "stack", 125, 377, [56, 24, null]], [24, ["string", "fill box"], 151, 377, [23, null]], [25, "setcolor", 959, 227, [7, 29, 11]], [26, "storein", 73, 185, [36, 27, 28, 57]], [27, ["string", "my color"], 101, 185, [26, null]], [28, ["number", "0"], 101, 203, [26, null]], [29, "box", 989, 227, [25, 30, null]], [30, ["string", "my color"], 1013, 227, [29, null]], [31, "storein", 73, 111, [2, 32, 33, 36]], [32, ["string", "lower left x"], 103, 111, [31, null]], [33, ["number", "-300"], 103, 129, [31, null]], [34, "box", 1010, 310, [1, 35, null]], [35, ["string", "lower left x"], 1034, 310, [34, null]], [36, "storein", 73, 148, [31, 37, 38, 26]], [37, ["string", "lower left y"], 103, 148, [36, null]], [38, ["number", "200"], 103, 166, [36, null]], [39, "box", 987, 264, [11, 40, null]], [40, ["string", "lower left y"], 1011, 264, [39, null]], [41, "repeat", 99, 249, [57, 42, 43, 60]], [42, ["number", "10"], 118, 249, [41, null]], [43, "storein", 125, 276, [41, 44, 46, 51]], [44, ["string", "my color"], 155, 276, [43, null]], [45, ["number", "50"], 179, 349, [53, null]], [46, ["identity2", 80.040000000000006], 155, 294, [43, 47]], [47, "plus2", 250, 294, [46, 48, 50]], [48, "box", 274, 294, [47, 49, null]], [49, ["string", "my color"], 298, 294, [48, null]], [50, ["number", "1"], 274, 312, [47, null]], [51, "storein", 125, 313, [43, 52, 53, 56]], [52, ["string", "lower left x"], 155, 313, [51, null]], [53, "plus2", 155, 331, [51, 54, 45]], [54, "box", 179, 331, [53, 55, null]], [55, ["string", "lower left x"], 203, 331, [54, null]], [56, ["vspace", 13.34], 125, 350, [51, 23]], [57, "repeat", 73, 222, [26, 58, 41, 59]], [58, ["number", "10"], 92, 222, [57, null]], [59, ["vspace", 280.0], 73, 257, [57, 95]], [60, ["vspace", 120.04000000000001], 99, 284, [41, 61]], [61, "storein", 99, 404, [60, 62, 63, 67]], [62, ["string", "lower left y"], 129, 404, [61, null]], [63, "minus2", 129, 422, [61, 64, 66]], [64, "box", 153, 422, [63, 65, null]], [65, ["string", "lower left y"], 177, 422, [64, null]], [66, ["number", "50"], 164, 440, [63, null]], [67, ["vspace", 13.34], 99, 441, [61, 68]], [68, "storein", 99, 468, [67, 69, 70, null]], [69, ["string", "lower left x"], 128, 468, [68, null]], [70, ["number", "-300"], 128, 486, [68, null]], [71, ["vspace", 100], 959, 318, [9, 72]], [72, "setxy", 959, 422, [71, 74, 75, 82]], [73, "plus2", 1098, 422, [74, 79, 78]], [74, ["identity2", 100], 985, 422, [72, 73]], [75, "plus2", 985, 440, [72, 76, 81]], [76, "box", 1009, 440, [75, 77, null]], [77, ["string", "lower left y"], 1033, 440, [76, null]], [78, ["number", "5"], 1122, 440, [73, null]], [79, "box", 1122, 422, [73, 80, null]], [80, ["string", "lower left x"], 1146, 422, [79, null]], [81, ["number", "-25"], 1009, 458, [75, null]], [82, ["vspace", 20], 959, 459, [72, 85]], [83, "setshade", 959, 189, [3, 84, 7]], [84, ["number", 50], 994, 189, [83, null]], [85, "setshade", 959, 492, [82, 86, 91]], [86, ["number", "0"], 994, 492, [85, null]], [87, "box", 1086, 511, [93, 88, null]], [88, ["string", "my color"], 1110, 511, [87, null]], [89, "setshade", 959, 530, [91, 90, null]], [90, ["number", 50], 994, 530, [89, null]], [91, "show", 959, 511, [85, 92, 89]], [92, ["identity2", 60], 985, 511, [91, 93]], [93, "minus2", 1062, 511, [92, 87, 94]], [94, ["number", "1"], 1097, 529, [93, null]], [95, "setxy", 73, 521, [59, 96, 97, 100]], [96, ["number", "-90"], 99, 521, [95, null]], [97, ["number", "250"], 99, 539, [95, null]], [98, "show", 73, 577, [100, 99, 102]], [99, ["string", "Colors in TurtleArt"], 99, 577, [98, null]], [100, "setshade", 73, 558, [95, 101, 98]], [101, ["number", "0"], 108, 558, [100, null]], [102, "savesvg", 73, 596, [98, 103, null]], [103, ["string", "TurtleArtColors"], 108, 596, [102, null]], [-1, ["turtle", 1], -90, 250, 90.0, 100.0, 0.0, 1.0]] \ No newline at end of file
diff --git a/uploads/comment.file.9b57eed8e9790aa2.7371756172652e7461.png b/uploads/comment.file.9b57eed8e9790aa2.7371756172652e7461.png
new file mode 100644
index 0000000..3763587
--- /dev/null
+++ b/uploads/comment.file.9b57eed8e9790aa2.7371756172652e7461.png
Binary files differ
diff --git a/uploads/comment.file.9b57eed8e9790aa2.7371756172652e7461.ta b/uploads/comment.file.9b57eed8e9790aa2.7371756172652e7461.ta
new file mode 100644
index 0000000..b32ec76
--- /dev/null
+++ b/uploads/comment.file.9b57eed8e9790aa2.7371756172652e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 195, 195, [null, 1]], [1, "repeat", 195, 237, [0, 2, 4, 3]], [2, ["number", 4], 243, 237, [1, null]], [3, ["vspace", 0], 195, 315, [1, null]], [4, "forward", 257, 297, [1, 5, 6]], [5, ["number", 100], 329, 297, [4, null]], [6, "right", 257, 339, [4, 7, null]], [7, ["number", 90], 315, 339, [6, null]], [-1, ["turtle", 1], 0, 0, 0.0, 0, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.9d67a10e4aaad424.747572746c65617274746573742e7461.png b/uploads/comment.file.9d67a10e4aaad424.747572746c65617274746573742e7461.png
new file mode 100644
index 0000000..aa68539
--- /dev/null
+++ b/uploads/comment.file.9d67a10e4aaad424.747572746c65617274746573742e7461.png
Binary files differ
diff --git a/uploads/comment.file.9d67a10e4aaad424.747572746c65617274746573742e7461.ta b/uploads/comment.file.9d67a10e4aaad424.747572746c65617274746573742e7461.ta
new file mode 100644
index 0000000..ed639a4
--- /dev/null
+++ b/uploads/comment.file.9d67a10e4aaad424.747572746c65617274746573742e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 69, 190, [null, 1]], [1, "forward", 69, 232, [0, 2, 3]], [2, ["number", 100], 141, 232, [1, null]], [3, "left", 69, 274, [1, 4, 5]], [4, ["number", 90], 127, 274, [3, null]], [5, "forward", 69, 316, [3, 6, 13]], [6, ["number", 100], 141, 316, [5, null]], [7, "forward", 69, 400, [13, 8, 9]], [8, ["number", 100], 141, 400, [7, null]], [9, "left", 69, 442, [7, 10, 11]], [10, ["number", 90], 127, 442, [9, null]], [11, "forward", 69, 484, [9, 12, null]], [12, ["number", 100], 141, 484, [11, null]], [13, "left", 69, 358, [5, 14, 7]], [14, ["number", 90], 127, 358, [13, null]], [-1, ["turtle", 1], 0, 0, 0, 0, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.a1cb04531244e0db.7061747465726e342e7461.ta b/uploads/comment.file.a1cb04531244e0db.7061747465726e342e7461.ta
new file mode 100644
index 0000000..9b78a57
--- /dev/null
+++ b/uploads/comment.file.a1cb04531244e0db.7061747465726e342e7461.ta
@@ -0,0 +1 @@
+[[0, ["start", 2.0], 85, 189, [null, 13]], [1, "repeat", 85, 627, [28, 2, 4, 3]], [2, ["number", "250"], 133, 627, [1, null]], [3, ["vspace", 0], 85, 705, [1, null]], [4, "arc", 147, 687, [1, 5, 6, 7]], [5, ["number", "360"], 205, 687, [4, null]], [6, ["number", "240"], 205, 729, [4, null]], [7, "left", 147, 771, [4, 8, 9]], [8, ["number", "2"], 205, 771, [7, null]], [9, "setcolor", 147, 813, [7, 10, null]], [10, "random", 225, 813, [9, 11, 12, null]], [11, ["number", "0"], 313, 813, [10, null]], [12, ["number", "100"], 313, 855, [10, null]], [13, "clean", 85, 231, [0, 27]], [14, "left", 85, 425, [25, 15, 16]], [15, ["number", 90], 143, 425, [14, null]], [16, "forward", 85, 467, [14, 17, 18]], [17, ["number", "20"], 157, 467, [16, null]], [18, "right", 85, 509, [16, 19, 20]], [19, ["number", "90"], 143, 509, [18, null]], [20, "forward", 85, 551, [18, 21, 28]], [21, ["number", "40"], 157, 551, [20, null]], [22, "setxy", 85, 299, [27, 23, 24, 25]], [23, ["number", "0"], 143, 299, [22, null]], [24, ["number", 0], 143, 341, [22, null]], [25, "seth", 85, 383, [22, 26, 14]], [26, ["number", 0], 187, 383, [25, null]], [27, "penup", 85, 265, [13, 22]], [28, "pendown", 85, 593, [20, 1]], [-1, ["turtle", 1], -19, 39, 220.0, 97, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.a234583b81dbb1c7.547572746c65417274436f6c6f72732e7461.ta b/uploads/comment.file.a234583b81dbb1c7.547572746c65417274436f6c6f72732e7461.ta
new file mode 100644
index 0000000..cb6b4e8
--- /dev/null
+++ b/uploads/comment.file.a234583b81dbb1c7.547572746c65417274436f6c6f72732e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 73, 77, [null, 2]], [1, "setxy", 984, 310, [9, 34, 13, 5]], [2, "clean", 73, 96, [0, 31]], [3, "seth", 959, 170, [21, 4, 83]], [4, ["number", 90], 994, 170, [3, null]], [5, "forward", 984, 347, [1, 6, 15]], [6, ["number", 50], 1013, 347, [5, null]], [7, "setpensize", 959, 208, [83, 8, 25]], [8, ["number", 1], 994, 208, [7, null]], [9, "repeat", 959, 283, [11, 10, 1, 71]], [10, ["number", 50], 978, 283, [9, null]], [11, "storein", 959, 246, [25, 12, 39, 9]], [12, ["string", "y-start"], 987, 246, [11, null]], [13, "box", 1010, 328, [1, 14, null]], [14, ["string", "y-start"], 1034, 328, [13, null]], [15, "storein", 984, 366, [5, 16, 17, null]], [16, ["string", "y-start"], 1012, 366, [15, null]], [17, "plus2", 1012, 384, [15, 18, 20]], [18, "box", 1036, 384, [17, 19, null]], [19, ["string", "y-start"], 1060, 384, [18, null]], [20, ["number", 1], 1036, 402, [17, null]], [21, "hat", 959, 148, [null, 22, 3]], [22, ["string", "fill box"], 985, 151, [21, null]], [23, "stack", 125, 377, [56, 24, null]], [24, ["string", "fill box"], 151, 377, [23, null]], [25, "setcolor", 959, 227, [7, 29, 11]], [26, "storein", 73, 185, [36, 27, 28, 57]], [27, ["string", "my color"], 101, 185, [26, null]], [28, ["number", "0"], 101, 203, [26, null]], [29, "box", 989, 227, [25, 30, null]], [30, ["string", "my color"], 1013, 227, [29, null]], [31, "storein", 73, 111, [2, 32, 33, 36]], [32, ["string", "lower left x"], 103, 111, [31, null]], [33, ["number", "-300"], 103, 129, [31, null]], [34, "box", 1010, 310, [1, 35, null]], [35, ["string", "lower left x"], 1034, 310, [34, null]], [36, "storein", 73, 148, [31, 37, 38, 26]], [37, ["string", "lower left y"], 103, 148, [36, null]], [38, ["number", "200"], 103, 166, [36, null]], [39, "box", 987, 264, [11, 40, null]], [40, ["string", "lower left y"], 1011, 264, [39, null]], [41, "repeat", 99, 249, [57, 42, 43, 60]], [42, ["number", "10"], 118, 249, [41, null]], [43, "storein", 125, 276, [41, 44, 46, 51]], [44, ["string", "my color"], 155, 276, [43, null]], [45, ["number", "50"], 179, 349, [53, null]], [46, ["identity2", 80.040000000000006], 155, 294, [43, 47]], [47, "plus2", 250, 294, [46, 48, 50]], [48, "box", 274, 294, [47, 49, null]], [49, ["string", "my color"], 298, 294, [48, null]], [50, ["number", "1"], 274, 312, [47, null]], [51, "storein", 125, 313, [43, 52, 53, 56]], [52, ["string", "lower left x"], 155, 313, [51, null]], [53, "plus2", 155, 331, [51, 54, 45]], [54, "box", 179, 331, [53, 55, null]], [55, ["string", "lower left x"], 203, 331, [54, null]], [56, ["vspace", 13.34], 125, 350, [51, 23]], [57, "repeat", 73, 222, [26, 58, 41, 59]], [58, ["number", "10"], 92, 222, [57, null]], [59, ["vspace", 280.0], 73, 257, [57, 95]], [60, ["vspace", 120.04000000000001], 99, 284, [41, 61]], [61, "storein", 99, 404, [60, 62, 63, 67]], [62, ["string", "lower left y"], 129, 404, [61, null]], [63, "minus2", 129, 422, [61, 64, 66]], [64, "box", 153, 422, [63, 65, null]], [65, ["string", "lower left y"], 177, 422, [64, null]], [66, ["number", "50"], 164, 440, [63, null]], [67, ["vspace", 13.34], 99, 441, [61, 68]], [68, "storein", 99, 468, [67, 69, 70, null]], [69, ["string", "lower left x"], 128, 468, [68, null]], [70, ["number", "-300"], 128, 486, [68, null]], [71, ["vspace", 100], 959, 318, [9, 72]], [72, "setxy", 959, 422, [71, 74, 75, 82]], [73, "plus2", 1098, 422, [74, 79, 78]], [74, ["identity2", 100], 985, 422, [72, 73]], [75, "plus2", 985, 440, [72, 76, 81]], [76, "box", 1009, 440, [75, 77, null]], [77, ["string", "lower left y"], 1033, 440, [76, null]], [78, ["number", "5"], 1122, 440, [73, null]], [79, "box", 1122, 422, [73, 80, null]], [80, ["string", "lower left x"], 1146, 422, [79, null]], [81, ["number", "-25"], 1009, 458, [75, null]], [82, ["vspace", 20], 959, 459, [72, 85]], [83, "setshade", 959, 189, [3, 84, 7]], [84, ["number", 50], 994, 189, [83, null]], [85, "setshade", 959, 492, [82, 86, 91]], [86, ["number", "0"], 994, 492, [85, null]], [87, "box", 1086, 511, [93, 88, null]], [88, ["string", "my color"], 1110, 511, [87, null]], [89, "setshade", 959, 530, [91, 90, null]], [90, ["number", 50], 994, 530, [89, null]], [91, "show", 959, 511, [85, 92, 89]], [92, ["identity2", 60], 985, 511, [91, 93]], [93, "minus2", 1062, 511, [92, 87, 94]], [94, ["number", "1"], 1097, 529, [93, null]], [95, "setxy", 73, 521, [59, 96, 97, 100]], [96, ["number", "-90"], 99, 521, [95, null]], [97, ["number", "250"], 99, 539, [95, null]], [98, "show", 73, 577, [100, 99, 102]], [99, ["string", "Colors in TurtleArt"], 99, 577, [98, null]], [100, "setshade", 73, 558, [95, 101, 98]], [101, ["number", "0"], 108, 558, [100, null]], [102, "savesvg", 73, 596, [98, 103, null]], [103, ["string", "TurtleArtColors"], 108, 596, [102, null]], [-1, ["turtle", 1], -90, 250, 90.0, 100.0, 0.0, 1.0]] \ No newline at end of file
diff --git a/uploads/comment.file.a27fe041a9bb2ef2.7371756172652e7461.ta b/uploads/comment.file.a27fe041a9bb2ef2.7371756172652e7461.ta
new file mode 100644
index 0000000..b32ec76
--- /dev/null
+++ b/uploads/comment.file.a27fe041a9bb2ef2.7371756172652e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 195, 195, [null, 1]], [1, "repeat", 195, 237, [0, 2, 4, 3]], [2, ["number", 4], 243, 237, [1, null]], [3, ["vspace", 0], 195, 315, [1, null]], [4, "forward", 257, 297, [1, 5, 6]], [5, ["number", 100], 329, 297, [4, null]], [6, "right", 257, 339, [4, 7, null]], [7, ["number", 90], 315, 339, [6, null]], [-1, ["turtle", 1], 0, 0, 0.0, 0, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.a2e183920e6abd08.72616e646f6d2e7461.ta b/uploads/comment.file.a2e183920e6abd08.72616e646f6d2e7461.ta
new file mode 100644
index 0000000..69343c8
--- /dev/null
+++ b/uploads/comment.file.a2e183920e6abd08.72616e646f6d2e7461.ta
@@ -0,0 +1 @@
+[[0, ["start", 2.0], 195, 198, [null, 2]], [1, "forward", 257, 450, [7, 13, 10]], [2, "pendown", 195, 240, [0, 8]], [3, "setcolor", 257, 334, [8, 4, 7]], [4, "random", 335, 334, [3, 5, 6, null]], [5, ["number", 0], 423, 334, [4, null]], [6, ["number", 100], 423, 376, [4, null]], [7, ["vspace", 20], 257, 376, [3, 1]], [8, "repeat", 195, 274, [2, 9, 3, null]], [9, ["number", "10"], 243, 274, [8, null]], [10, ["vspace", 20], 257, 492, [1, 11]], [11, "left", 257, 566, [10, 12, null]], [12, ["number", 90], 315, 566, [11, null]], [13, "random", 329, 450, [1, 14, 15, null]], [14, ["number", 0], 417, 450, [13, null]], [15, ["number", 100], 417, 492, [13, null]], [-1, ["turtle", 1], -102, 169, 0.0, 12, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.a2f0bc23968201d1.747572746c6561727474657374322e7461.png b/uploads/comment.file.a2f0bc23968201d1.747572746c6561727474657374322e7461.png
new file mode 100644
index 0000000..379dccd
--- /dev/null
+++ b/uploads/comment.file.a2f0bc23968201d1.747572746c6561727474657374322e7461.png
Binary files differ
diff --git a/uploads/comment.file.a2f0bc23968201d1.747572746c6561727474657374322e7461.ta b/uploads/comment.file.a2f0bc23968201d1.747572746c6561727474657374322e7461.ta
new file mode 100644
index 0000000..ee973c7
--- /dev/null
+++ b/uploads/comment.file.a2f0bc23968201d1.747572746c6561727474657374322e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 16, 168, [null, 1]], [1, "forward", 16, 196, [0, 2, 3]], [2, ["number", 100], 61, 196, [1, null]], [3, "right", 16, 224, [1, 4, 5]], [4, ["number", 90], 55, 224, [3, null]], [5, "setcolor", 16, 252, [3, 6, 7]], [6, "blue", 63, 252, [5, null]], [7, "forward", 16, 280, [5, 8, 25]], [8, ["number", 100], 61, 280, [7, null]], [9, "setcolor", 225, 246, [23, 15, 16]], [10, ["number", "5"], 312, 314, [22, null]], [11, "seth", 264, 342, [22, 13, 18]], [12, "heading", 358, 342, [13, null]], [13, "plus2", 322, 342, [11, 12, 14]], [14, ["number", 1], 358, 370, [13, null]], [15, "red", 272, 246, [9, null]], [16, "repeat", 225, 274, [9, 17, 22, null]], [17, ["number", "100"], 255, 274, [16, null]], [18, "setcolor", 264, 370, [11, 19, null]], [19, "plus2", 311, 370, [18, 20, 21]], [20, "color", 347, 370, [19, null]], [21, ["number", "1"], 347, 398, [19, null]], [22, "forward", 264, 314, [16, 10, 11]], [23, "hat1", 225, 218, [null, 9]], [24, "stack1", 56, 348, [25, null]], [25, "repeat", 16, 308, [7, 26, 24, 27]], [26, ["number", 4], 47, 308, [25, null]], [27, ["vspace", 0], 16, 360, [25, null]], [-1, ["turtle", 1], 284, 34, 130.0, 100.0, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.a362acc16a0243a3.72616e646f6d2e7461.ta b/uploads/comment.file.a362acc16a0243a3.72616e646f6d2e7461.ta
new file mode 100644
index 0000000..69343c8
--- /dev/null
+++ b/uploads/comment.file.a362acc16a0243a3.72616e646f6d2e7461.ta
@@ -0,0 +1 @@
+[[0, ["start", 2.0], 195, 198, [null, 2]], [1, "forward", 257, 450, [7, 13, 10]], [2, "pendown", 195, 240, [0, 8]], [3, "setcolor", 257, 334, [8, 4, 7]], [4, "random", 335, 334, [3, 5, 6, null]], [5, ["number", 0], 423, 334, [4, null]], [6, ["number", 100], 423, 376, [4, null]], [7, ["vspace", 20], 257, 376, [3, 1]], [8, "repeat", 195, 274, [2, 9, 3, null]], [9, ["number", "10"], 243, 274, [8, null]], [10, ["vspace", 20], 257, 492, [1, 11]], [11, "left", 257, 566, [10, 12, null]], [12, ["number", 90], 315, 566, [11, null]], [13, "random", 329, 450, [1, 14, 15, null]], [14, ["number", 0], 417, 450, [13, null]], [15, ["number", 100], 417, 492, [13, null]], [-1, ["turtle", 1], -102, 169, 0.0, 12, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.a3d69f66ebacbe99.6f63742e7461.ta b/uploads/comment.file.a3d69f66ebacbe99.6f63742e7461.ta
new file mode 100644
index 0000000..dc6182a
--- /dev/null
+++ b/uploads/comment.file.a3d69f66ebacbe99.6f63742e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 167, 318, [null, 1]], [1, "repeat", 167, 360, [0, 2, 3, null]], [2, ["number", "8"], 215, 360, [1, null]], [3, "forward", 229, 420, [1, 4, 5]], [4, ["number", 100], 301, 420, [3, null]], [5, "right", 229, 462, [3, 6, null]], [6, ["number", "45"], 287, 462, [5, null]], [-1, ["turtle", 1], 0, 0, 0.0, 0, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.a3ecaf3a01807525.72616e646f6d2e7461.ta b/uploads/comment.file.a3ecaf3a01807525.72616e646f6d2e7461.ta
new file mode 100644
index 0000000..69343c8
--- /dev/null
+++ b/uploads/comment.file.a3ecaf3a01807525.72616e646f6d2e7461.ta
@@ -0,0 +1 @@
+[[0, ["start", 2.0], 195, 198, [null, 2]], [1, "forward", 257, 450, [7, 13, 10]], [2, "pendown", 195, 240, [0, 8]], [3, "setcolor", 257, 334, [8, 4, 7]], [4, "random", 335, 334, [3, 5, 6, null]], [5, ["number", 0], 423, 334, [4, null]], [6, ["number", 100], 423, 376, [4, null]], [7, ["vspace", 20], 257, 376, [3, 1]], [8, "repeat", 195, 274, [2, 9, 3, null]], [9, ["number", "10"], 243, 274, [8, null]], [10, ["vspace", 20], 257, 492, [1, 11]], [11, "left", 257, 566, [10, 12, null]], [12, ["number", 90], 315, 566, [11, null]], [13, "random", 329, 450, [1, 14, 15, null]], [14, ["number", 0], 417, 450, [13, null]], [15, ["number", 100], 417, 492, [13, null]], [-1, ["turtle", 1], -102, 169, 0.0, 12, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.a54cd149b2c94dec.72616e646f6d2e7461.ta b/uploads/comment.file.a54cd149b2c94dec.72616e646f6d2e7461.ta
new file mode 100644
index 0000000..69343c8
--- /dev/null
+++ b/uploads/comment.file.a54cd149b2c94dec.72616e646f6d2e7461.ta
@@ -0,0 +1 @@
+[[0, ["start", 2.0], 195, 198, [null, 2]], [1, "forward", 257, 450, [7, 13, 10]], [2, "pendown", 195, 240, [0, 8]], [3, "setcolor", 257, 334, [8, 4, 7]], [4, "random", 335, 334, [3, 5, 6, null]], [5, ["number", 0], 423, 334, [4, null]], [6, ["number", 100], 423, 376, [4, null]], [7, ["vspace", 20], 257, 376, [3, 1]], [8, "repeat", 195, 274, [2, 9, 3, null]], [9, ["number", "10"], 243, 274, [8, null]], [10, ["vspace", 20], 257, 492, [1, 11]], [11, "left", 257, 566, [10, 12, null]], [12, ["number", 90], 315, 566, [11, null]], [13, "random", 329, 450, [1, 14, 15, null]], [14, ["number", 0], 417, 450, [13, null]], [15, ["number", 100], 417, 492, [13, null]], [-1, ["turtle", 1], -102, 169, 0.0, 12, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.a5a0c1815110a050.6f63742e7461.ta b/uploads/comment.file.a5a0c1815110a050.6f63742e7461.ta
new file mode 100644
index 0000000..dc6182a
--- /dev/null
+++ b/uploads/comment.file.a5a0c1815110a050.6f63742e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 167, 318, [null, 1]], [1, "repeat", 167, 360, [0, 2, 3, null]], [2, ["number", "8"], 215, 360, [1, null]], [3, "forward", 229, 420, [1, 4, 5]], [4, ["number", 100], 301, 420, [3, null]], [5, "right", 229, 462, [3, 6, null]], [6, ["number", "45"], 287, 462, [5, null]], [-1, ["turtle", 1], 0, 0, 0.0, 0, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.a6fa8e82a3c64a3a.72616e646f6d2e7461.ta b/uploads/comment.file.a6fa8e82a3c64a3a.72616e646f6d2e7461.ta
new file mode 100644
index 0000000..69343c8
--- /dev/null
+++ b/uploads/comment.file.a6fa8e82a3c64a3a.72616e646f6d2e7461.ta
@@ -0,0 +1 @@
+[[0, ["start", 2.0], 195, 198, [null, 2]], [1, "forward", 257, 450, [7, 13, 10]], [2, "pendown", 195, 240, [0, 8]], [3, "setcolor", 257, 334, [8, 4, 7]], [4, "random", 335, 334, [3, 5, 6, null]], [5, ["number", 0], 423, 334, [4, null]], [6, ["number", 100], 423, 376, [4, null]], [7, ["vspace", 20], 257, 376, [3, 1]], [8, "repeat", 195, 274, [2, 9, 3, null]], [9, ["number", "10"], 243, 274, [8, null]], [10, ["vspace", 20], 257, 492, [1, 11]], [11, "left", 257, 566, [10, 12, null]], [12, ["number", 90], 315, 566, [11, null]], [13, "random", 329, 450, [1, 14, 15, null]], [14, ["number", 0], 417, 450, [13, null]], [15, ["number", 100], 417, 492, [13, null]], [-1, ["turtle", 1], -102, 169, 0.0, 12, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.a87b52d8c16758e4.72616e646f6d2e7461.ta b/uploads/comment.file.a87b52d8c16758e4.72616e646f6d2e7461.ta
new file mode 100644
index 0000000..69343c8
--- /dev/null
+++ b/uploads/comment.file.a87b52d8c16758e4.72616e646f6d2e7461.ta
@@ -0,0 +1 @@
+[[0, ["start", 2.0], 195, 198, [null, 2]], [1, "forward", 257, 450, [7, 13, 10]], [2, "pendown", 195, 240, [0, 8]], [3, "setcolor", 257, 334, [8, 4, 7]], [4, "random", 335, 334, [3, 5, 6, null]], [5, ["number", 0], 423, 334, [4, null]], [6, ["number", 100], 423, 376, [4, null]], [7, ["vspace", 20], 257, 376, [3, 1]], [8, "repeat", 195, 274, [2, 9, 3, null]], [9, ["number", "10"], 243, 274, [8, null]], [10, ["vspace", 20], 257, 492, [1, 11]], [11, "left", 257, 566, [10, 12, null]], [12, ["number", 90], 315, 566, [11, null]], [13, "random", 329, 450, [1, 14, 15, null]], [14, ["number", 0], 417, 450, [13, null]], [15, ["number", 100], 417, 492, [13, null]], [-1, ["turtle", 1], -102, 169, 0.0, 12, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.aaa1f397ad21e704.7371756172652e7461.ta b/uploads/comment.file.aaa1f397ad21e704.7371756172652e7461.ta
new file mode 100644
index 0000000..b32ec76
--- /dev/null
+++ b/uploads/comment.file.aaa1f397ad21e704.7371756172652e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 195, 195, [null, 1]], [1, "repeat", 195, 237, [0, 2, 4, 3]], [2, ["number", 4], 243, 237, [1, null]], [3, ["vspace", 0], 195, 315, [1, null]], [4, "forward", 257, 297, [1, 5, 6]], [5, ["number", 100], 329, 297, [4, null]], [6, "right", 257, 339, [4, 7, null]], [7, ["number", 90], 315, 339, [6, null]], [-1, ["turtle", 1], 0, 0, 0.0, 0, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.aae673c25380d9d7.72616e646f6d2e7461.ta b/uploads/comment.file.aae673c25380d9d7.72616e646f6d2e7461.ta
new file mode 100644
index 0000000..69343c8
--- /dev/null
+++ b/uploads/comment.file.aae673c25380d9d7.72616e646f6d2e7461.ta
@@ -0,0 +1 @@
+[[0, ["start", 2.0], 195, 198, [null, 2]], [1, "forward", 257, 450, [7, 13, 10]], [2, "pendown", 195, 240, [0, 8]], [3, "setcolor", 257, 334, [8, 4, 7]], [4, "random", 335, 334, [3, 5, 6, null]], [5, ["number", 0], 423, 334, [4, null]], [6, ["number", 100], 423, 376, [4, null]], [7, ["vspace", 20], 257, 376, [3, 1]], [8, "repeat", 195, 274, [2, 9, 3, null]], [9, ["number", "10"], 243, 274, [8, null]], [10, ["vspace", 20], 257, 492, [1, 11]], [11, "left", 257, 566, [10, 12, null]], [12, ["number", 90], 315, 566, [11, null]], [13, "random", 329, 450, [1, 14, 15, null]], [14, ["number", 0], 417, 450, [13, null]], [15, ["number", 100], 417, 492, [13, null]], [-1, ["turtle", 1], -102, 169, 0.0, 12, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.ad291df0e3b89480.72616e646f6d2e7461.ta b/uploads/comment.file.ad291df0e3b89480.72616e646f6d2e7461.ta
new file mode 100644
index 0000000..69343c8
--- /dev/null
+++ b/uploads/comment.file.ad291df0e3b89480.72616e646f6d2e7461.ta
@@ -0,0 +1 @@
+[[0, ["start", 2.0], 195, 198, [null, 2]], [1, "forward", 257, 450, [7, 13, 10]], [2, "pendown", 195, 240, [0, 8]], [3, "setcolor", 257, 334, [8, 4, 7]], [4, "random", 335, 334, [3, 5, 6, null]], [5, ["number", 0], 423, 334, [4, null]], [6, ["number", 100], 423, 376, [4, null]], [7, ["vspace", 20], 257, 376, [3, 1]], [8, "repeat", 195, 274, [2, 9, 3, null]], [9, ["number", "10"], 243, 274, [8, null]], [10, ["vspace", 20], 257, 492, [1, 11]], [11, "left", 257, 566, [10, 12, null]], [12, ["number", 90], 315, 566, [11, null]], [13, "random", 329, 450, [1, 14, 15, null]], [14, ["number", 0], 417, 450, [13, null]], [15, ["number", 100], 417, 492, [13, null]], [-1, ["turtle", 1], -102, 169, 0.0, 12, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.ad617490bd0124d9.6f63742e7461.ta b/uploads/comment.file.ad617490bd0124d9.6f63742e7461.ta
new file mode 100644
index 0000000..dc6182a
--- /dev/null
+++ b/uploads/comment.file.ad617490bd0124d9.6f63742e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 167, 318, [null, 1]], [1, "repeat", 167, 360, [0, 2, 3, null]], [2, ["number", "8"], 215, 360, [1, null]], [3, "forward", 229, 420, [1, 4, 5]], [4, ["number", 100], 301, 420, [3, null]], [5, "right", 229, 462, [3, 6, null]], [6, ["number", "45"], 287, 462, [5, null]], [-1, ["turtle", 1], 0, 0, 0.0, 0, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.af669bccfd1c980a.547572746c65417274436f6c6f72732e7461.png b/uploads/comment.file.af669bccfd1c980a.547572746c65417274436f6c6f72732e7461.png
new file mode 100644
index 0000000..21d5153
--- /dev/null
+++ b/uploads/comment.file.af669bccfd1c980a.547572746c65417274436f6c6f72732e7461.png
Binary files differ
diff --git a/uploads/comment.file.af669bccfd1c980a.547572746c65417274436f6c6f72732e7461.ta b/uploads/comment.file.af669bccfd1c980a.547572746c65417274436f6c6f72732e7461.ta
new file mode 100644
index 0000000..cb6b4e8
--- /dev/null
+++ b/uploads/comment.file.af669bccfd1c980a.547572746c65417274436f6c6f72732e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 73, 77, [null, 2]], [1, "setxy", 984, 310, [9, 34, 13, 5]], [2, "clean", 73, 96, [0, 31]], [3, "seth", 959, 170, [21, 4, 83]], [4, ["number", 90], 994, 170, [3, null]], [5, "forward", 984, 347, [1, 6, 15]], [6, ["number", 50], 1013, 347, [5, null]], [7, "setpensize", 959, 208, [83, 8, 25]], [8, ["number", 1], 994, 208, [7, null]], [9, "repeat", 959, 283, [11, 10, 1, 71]], [10, ["number", 50], 978, 283, [9, null]], [11, "storein", 959, 246, [25, 12, 39, 9]], [12, ["string", "y-start"], 987, 246, [11, null]], [13, "box", 1010, 328, [1, 14, null]], [14, ["string", "y-start"], 1034, 328, [13, null]], [15, "storein", 984, 366, [5, 16, 17, null]], [16, ["string", "y-start"], 1012, 366, [15, null]], [17, "plus2", 1012, 384, [15, 18, 20]], [18, "box", 1036, 384, [17, 19, null]], [19, ["string", "y-start"], 1060, 384, [18, null]], [20, ["number", 1], 1036, 402, [17, null]], [21, "hat", 959, 148, [null, 22, 3]], [22, ["string", "fill box"], 985, 151, [21, null]], [23, "stack", 125, 377, [56, 24, null]], [24, ["string", "fill box"], 151, 377, [23, null]], [25, "setcolor", 959, 227, [7, 29, 11]], [26, "storein", 73, 185, [36, 27, 28, 57]], [27, ["string", "my color"], 101, 185, [26, null]], [28, ["number", "0"], 101, 203, [26, null]], [29, "box", 989, 227, [25, 30, null]], [30, ["string", "my color"], 1013, 227, [29, null]], [31, "storein", 73, 111, [2, 32, 33, 36]], [32, ["string", "lower left x"], 103, 111, [31, null]], [33, ["number", "-300"], 103, 129, [31, null]], [34, "box", 1010, 310, [1, 35, null]], [35, ["string", "lower left x"], 1034, 310, [34, null]], [36, "storein", 73, 148, [31, 37, 38, 26]], [37, ["string", "lower left y"], 103, 148, [36, null]], [38, ["number", "200"], 103, 166, [36, null]], [39, "box", 987, 264, [11, 40, null]], [40, ["string", "lower left y"], 1011, 264, [39, null]], [41, "repeat", 99, 249, [57, 42, 43, 60]], [42, ["number", "10"], 118, 249, [41, null]], [43, "storein", 125, 276, [41, 44, 46, 51]], [44, ["string", "my color"], 155, 276, [43, null]], [45, ["number", "50"], 179, 349, [53, null]], [46, ["identity2", 80.040000000000006], 155, 294, [43, 47]], [47, "plus2", 250, 294, [46, 48, 50]], [48, "box", 274, 294, [47, 49, null]], [49, ["string", "my color"], 298, 294, [48, null]], [50, ["number", "1"], 274, 312, [47, null]], [51, "storein", 125, 313, [43, 52, 53, 56]], [52, ["string", "lower left x"], 155, 313, [51, null]], [53, "plus2", 155, 331, [51, 54, 45]], [54, "box", 179, 331, [53, 55, null]], [55, ["string", "lower left x"], 203, 331, [54, null]], [56, ["vspace", 13.34], 125, 350, [51, 23]], [57, "repeat", 73, 222, [26, 58, 41, 59]], [58, ["number", "10"], 92, 222, [57, null]], [59, ["vspace", 280.0], 73, 257, [57, 95]], [60, ["vspace", 120.04000000000001], 99, 284, [41, 61]], [61, "storein", 99, 404, [60, 62, 63, 67]], [62, ["string", "lower left y"], 129, 404, [61, null]], [63, "minus2", 129, 422, [61, 64, 66]], [64, "box", 153, 422, [63, 65, null]], [65, ["string", "lower left y"], 177, 422, [64, null]], [66, ["number", "50"], 164, 440, [63, null]], [67, ["vspace", 13.34], 99, 441, [61, 68]], [68, "storein", 99, 468, [67, 69, 70, null]], [69, ["string", "lower left x"], 128, 468, [68, null]], [70, ["number", "-300"], 128, 486, [68, null]], [71, ["vspace", 100], 959, 318, [9, 72]], [72, "setxy", 959, 422, [71, 74, 75, 82]], [73, "plus2", 1098, 422, [74, 79, 78]], [74, ["identity2", 100], 985, 422, [72, 73]], [75, "plus2", 985, 440, [72, 76, 81]], [76, "box", 1009, 440, [75, 77, null]], [77, ["string", "lower left y"], 1033, 440, [76, null]], [78, ["number", "5"], 1122, 440, [73, null]], [79, "box", 1122, 422, [73, 80, null]], [80, ["string", "lower left x"], 1146, 422, [79, null]], [81, ["number", "-25"], 1009, 458, [75, null]], [82, ["vspace", 20], 959, 459, [72, 85]], [83, "setshade", 959, 189, [3, 84, 7]], [84, ["number", 50], 994, 189, [83, null]], [85, "setshade", 959, 492, [82, 86, 91]], [86, ["number", "0"], 994, 492, [85, null]], [87, "box", 1086, 511, [93, 88, null]], [88, ["string", "my color"], 1110, 511, [87, null]], [89, "setshade", 959, 530, [91, 90, null]], [90, ["number", 50], 994, 530, [89, null]], [91, "show", 959, 511, [85, 92, 89]], [92, ["identity2", 60], 985, 511, [91, 93]], [93, "minus2", 1062, 511, [92, 87, 94]], [94, ["number", "1"], 1097, 529, [93, null]], [95, "setxy", 73, 521, [59, 96, 97, 100]], [96, ["number", "-90"], 99, 521, [95, null]], [97, ["number", "250"], 99, 539, [95, null]], [98, "show", 73, 577, [100, 99, 102]], [99, ["string", "Colors in TurtleArt"], 99, 577, [98, null]], [100, "setshade", 73, 558, [95, 101, 98]], [101, ["number", "0"], 108, 558, [100, null]], [102, "savesvg", 73, 596, [98, 103, null]], [103, ["string", "TurtleArtColors"], 108, 596, [102, null]], [-1, ["turtle", 1], -90, 250, 90.0, 100.0, 0.0, 1.0]] \ No newline at end of file
diff --git a/uploads/comment.file.b30f00228581a6a2.547572746c65417274436f6c6f72732e7461.ta b/uploads/comment.file.b30f00228581a6a2.547572746c65417274436f6c6f72732e7461.ta
new file mode 100644
index 0000000..cb6b4e8
--- /dev/null
+++ b/uploads/comment.file.b30f00228581a6a2.547572746c65417274436f6c6f72732e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 73, 77, [null, 2]], [1, "setxy", 984, 310, [9, 34, 13, 5]], [2, "clean", 73, 96, [0, 31]], [3, "seth", 959, 170, [21, 4, 83]], [4, ["number", 90], 994, 170, [3, null]], [5, "forward", 984, 347, [1, 6, 15]], [6, ["number", 50], 1013, 347, [5, null]], [7, "setpensize", 959, 208, [83, 8, 25]], [8, ["number", 1], 994, 208, [7, null]], [9, "repeat", 959, 283, [11, 10, 1, 71]], [10, ["number", 50], 978, 283, [9, null]], [11, "storein", 959, 246, [25, 12, 39, 9]], [12, ["string", "y-start"], 987, 246, [11, null]], [13, "box", 1010, 328, [1, 14, null]], [14, ["string", "y-start"], 1034, 328, [13, null]], [15, "storein", 984, 366, [5, 16, 17, null]], [16, ["string", "y-start"], 1012, 366, [15, null]], [17, "plus2", 1012, 384, [15, 18, 20]], [18, "box", 1036, 384, [17, 19, null]], [19, ["string", "y-start"], 1060, 384, [18, null]], [20, ["number", 1], 1036, 402, [17, null]], [21, "hat", 959, 148, [null, 22, 3]], [22, ["string", "fill box"], 985, 151, [21, null]], [23, "stack", 125, 377, [56, 24, null]], [24, ["string", "fill box"], 151, 377, [23, null]], [25, "setcolor", 959, 227, [7, 29, 11]], [26, "storein", 73, 185, [36, 27, 28, 57]], [27, ["string", "my color"], 101, 185, [26, null]], [28, ["number", "0"], 101, 203, [26, null]], [29, "box", 989, 227, [25, 30, null]], [30, ["string", "my color"], 1013, 227, [29, null]], [31, "storein", 73, 111, [2, 32, 33, 36]], [32, ["string", "lower left x"], 103, 111, [31, null]], [33, ["number", "-300"], 103, 129, [31, null]], [34, "box", 1010, 310, [1, 35, null]], [35, ["string", "lower left x"], 1034, 310, [34, null]], [36, "storein", 73, 148, [31, 37, 38, 26]], [37, ["string", "lower left y"], 103, 148, [36, null]], [38, ["number", "200"], 103, 166, [36, null]], [39, "box", 987, 264, [11, 40, null]], [40, ["string", "lower left y"], 1011, 264, [39, null]], [41, "repeat", 99, 249, [57, 42, 43, 60]], [42, ["number", "10"], 118, 249, [41, null]], [43, "storein", 125, 276, [41, 44, 46, 51]], [44, ["string", "my color"], 155, 276, [43, null]], [45, ["number", "50"], 179, 349, [53, null]], [46, ["identity2", 80.040000000000006], 155, 294, [43, 47]], [47, "plus2", 250, 294, [46, 48, 50]], [48, "box", 274, 294, [47, 49, null]], [49, ["string", "my color"], 298, 294, [48, null]], [50, ["number", "1"], 274, 312, [47, null]], [51, "storein", 125, 313, [43, 52, 53, 56]], [52, ["string", "lower left x"], 155, 313, [51, null]], [53, "plus2", 155, 331, [51, 54, 45]], [54, "box", 179, 331, [53, 55, null]], [55, ["string", "lower left x"], 203, 331, [54, null]], [56, ["vspace", 13.34], 125, 350, [51, 23]], [57, "repeat", 73, 222, [26, 58, 41, 59]], [58, ["number", "10"], 92, 222, [57, null]], [59, ["vspace", 280.0], 73, 257, [57, 95]], [60, ["vspace", 120.04000000000001], 99, 284, [41, 61]], [61, "storein", 99, 404, [60, 62, 63, 67]], [62, ["string", "lower left y"], 129, 404, [61, null]], [63, "minus2", 129, 422, [61, 64, 66]], [64, "box", 153, 422, [63, 65, null]], [65, ["string", "lower left y"], 177, 422, [64, null]], [66, ["number", "50"], 164, 440, [63, null]], [67, ["vspace", 13.34], 99, 441, [61, 68]], [68, "storein", 99, 468, [67, 69, 70, null]], [69, ["string", "lower left x"], 128, 468, [68, null]], [70, ["number", "-300"], 128, 486, [68, null]], [71, ["vspace", 100], 959, 318, [9, 72]], [72, "setxy", 959, 422, [71, 74, 75, 82]], [73, "plus2", 1098, 422, [74, 79, 78]], [74, ["identity2", 100], 985, 422, [72, 73]], [75, "plus2", 985, 440, [72, 76, 81]], [76, "box", 1009, 440, [75, 77, null]], [77, ["string", "lower left y"], 1033, 440, [76, null]], [78, ["number", "5"], 1122, 440, [73, null]], [79, "box", 1122, 422, [73, 80, null]], [80, ["string", "lower left x"], 1146, 422, [79, null]], [81, ["number", "-25"], 1009, 458, [75, null]], [82, ["vspace", 20], 959, 459, [72, 85]], [83, "setshade", 959, 189, [3, 84, 7]], [84, ["number", 50], 994, 189, [83, null]], [85, "setshade", 959, 492, [82, 86, 91]], [86, ["number", "0"], 994, 492, [85, null]], [87, "box", 1086, 511, [93, 88, null]], [88, ["string", "my color"], 1110, 511, [87, null]], [89, "setshade", 959, 530, [91, 90, null]], [90, ["number", 50], 994, 530, [89, null]], [91, "show", 959, 511, [85, 92, 89]], [92, ["identity2", 60], 985, 511, [91, 93]], [93, "minus2", 1062, 511, [92, 87, 94]], [94, ["number", "1"], 1097, 529, [93, null]], [95, "setxy", 73, 521, [59, 96, 97, 100]], [96, ["number", "-90"], 99, 521, [95, null]], [97, ["number", "250"], 99, 539, [95, null]], [98, "show", 73, 577, [100, 99, 102]], [99, ["string", "Colors in TurtleArt"], 99, 577, [98, null]], [100, "setshade", 73, 558, [95, 101, 98]], [101, ["number", "0"], 108, 558, [100, null]], [102, "savesvg", 73, 596, [98, 103, null]], [103, ["string", "TurtleArtColors"], 108, 596, [102, null]], [-1, ["turtle", 1], -90, 250, 90.0, 100.0, 0.0, 1.0]] \ No newline at end of file
diff --git a/uploads/comment.file.b377d772869ccbcb.547572746c65417274436f6c6f72732832292e7461.png b/uploads/comment.file.b377d772869ccbcb.547572746c65417274436f6c6f72732832292e7461.png
new file mode 100644
index 0000000..21d5153
--- /dev/null
+++ b/uploads/comment.file.b377d772869ccbcb.547572746c65417274436f6c6f72732832292e7461.png
Binary files differ
diff --git a/uploads/comment.file.b377d772869ccbcb.547572746c65417274436f6c6f72732832292e7461.ta b/uploads/comment.file.b377d772869ccbcb.547572746c65417274436f6c6f72732832292e7461.ta
new file mode 100644
index 0000000..cb6b4e8
--- /dev/null
+++ b/uploads/comment.file.b377d772869ccbcb.547572746c65417274436f6c6f72732832292e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 73, 77, [null, 2]], [1, "setxy", 984, 310, [9, 34, 13, 5]], [2, "clean", 73, 96, [0, 31]], [3, "seth", 959, 170, [21, 4, 83]], [4, ["number", 90], 994, 170, [3, null]], [5, "forward", 984, 347, [1, 6, 15]], [6, ["number", 50], 1013, 347, [5, null]], [7, "setpensize", 959, 208, [83, 8, 25]], [8, ["number", 1], 994, 208, [7, null]], [9, "repeat", 959, 283, [11, 10, 1, 71]], [10, ["number", 50], 978, 283, [9, null]], [11, "storein", 959, 246, [25, 12, 39, 9]], [12, ["string", "y-start"], 987, 246, [11, null]], [13, "box", 1010, 328, [1, 14, null]], [14, ["string", "y-start"], 1034, 328, [13, null]], [15, "storein", 984, 366, [5, 16, 17, null]], [16, ["string", "y-start"], 1012, 366, [15, null]], [17, "plus2", 1012, 384, [15, 18, 20]], [18, "box", 1036, 384, [17, 19, null]], [19, ["string", "y-start"], 1060, 384, [18, null]], [20, ["number", 1], 1036, 402, [17, null]], [21, "hat", 959, 148, [null, 22, 3]], [22, ["string", "fill box"], 985, 151, [21, null]], [23, "stack", 125, 377, [56, 24, null]], [24, ["string", "fill box"], 151, 377, [23, null]], [25, "setcolor", 959, 227, [7, 29, 11]], [26, "storein", 73, 185, [36, 27, 28, 57]], [27, ["string", "my color"], 101, 185, [26, null]], [28, ["number", "0"], 101, 203, [26, null]], [29, "box", 989, 227, [25, 30, null]], [30, ["string", "my color"], 1013, 227, [29, null]], [31, "storein", 73, 111, [2, 32, 33, 36]], [32, ["string", "lower left x"], 103, 111, [31, null]], [33, ["number", "-300"], 103, 129, [31, null]], [34, "box", 1010, 310, [1, 35, null]], [35, ["string", "lower left x"], 1034, 310, [34, null]], [36, "storein", 73, 148, [31, 37, 38, 26]], [37, ["string", "lower left y"], 103, 148, [36, null]], [38, ["number", "200"], 103, 166, [36, null]], [39, "box", 987, 264, [11, 40, null]], [40, ["string", "lower left y"], 1011, 264, [39, null]], [41, "repeat", 99, 249, [57, 42, 43, 60]], [42, ["number", "10"], 118, 249, [41, null]], [43, "storein", 125, 276, [41, 44, 46, 51]], [44, ["string", "my color"], 155, 276, [43, null]], [45, ["number", "50"], 179, 349, [53, null]], [46, ["identity2", 80.040000000000006], 155, 294, [43, 47]], [47, "plus2", 250, 294, [46, 48, 50]], [48, "box", 274, 294, [47, 49, null]], [49, ["string", "my color"], 298, 294, [48, null]], [50, ["number", "1"], 274, 312, [47, null]], [51, "storein", 125, 313, [43, 52, 53, 56]], [52, ["string", "lower left x"], 155, 313, [51, null]], [53, "plus2", 155, 331, [51, 54, 45]], [54, "box", 179, 331, [53, 55, null]], [55, ["string", "lower left x"], 203, 331, [54, null]], [56, ["vspace", 13.34], 125, 350, [51, 23]], [57, "repeat", 73, 222, [26, 58, 41, 59]], [58, ["number", "10"], 92, 222, [57, null]], [59, ["vspace", 280.0], 73, 257, [57, 95]], [60, ["vspace", 120.04000000000001], 99, 284, [41, 61]], [61, "storein", 99, 404, [60, 62, 63, 67]], [62, ["string", "lower left y"], 129, 404, [61, null]], [63, "minus2", 129, 422, [61, 64, 66]], [64, "box", 153, 422, [63, 65, null]], [65, ["string", "lower left y"], 177, 422, [64, null]], [66, ["number", "50"], 164, 440, [63, null]], [67, ["vspace", 13.34], 99, 441, [61, 68]], [68, "storein", 99, 468, [67, 69, 70, null]], [69, ["string", "lower left x"], 128, 468, [68, null]], [70, ["number", "-300"], 128, 486, [68, null]], [71, ["vspace", 100], 959, 318, [9, 72]], [72, "setxy", 959, 422, [71, 74, 75, 82]], [73, "plus2", 1098, 422, [74, 79, 78]], [74, ["identity2", 100], 985, 422, [72, 73]], [75, "plus2", 985, 440, [72, 76, 81]], [76, "box", 1009, 440, [75, 77, null]], [77, ["string", "lower left y"], 1033, 440, [76, null]], [78, ["number", "5"], 1122, 440, [73, null]], [79, "box", 1122, 422, [73, 80, null]], [80, ["string", "lower left x"], 1146, 422, [79, null]], [81, ["number", "-25"], 1009, 458, [75, null]], [82, ["vspace", 20], 959, 459, [72, 85]], [83, "setshade", 959, 189, [3, 84, 7]], [84, ["number", 50], 994, 189, [83, null]], [85, "setshade", 959, 492, [82, 86, 91]], [86, ["number", "0"], 994, 492, [85, null]], [87, "box", 1086, 511, [93, 88, null]], [88, ["string", "my color"], 1110, 511, [87, null]], [89, "setshade", 959, 530, [91, 90, null]], [90, ["number", 50], 994, 530, [89, null]], [91, "show", 959, 511, [85, 92, 89]], [92, ["identity2", 60], 985, 511, [91, 93]], [93, "minus2", 1062, 511, [92, 87, 94]], [94, ["number", "1"], 1097, 529, [93, null]], [95, "setxy", 73, 521, [59, 96, 97, 100]], [96, ["number", "-90"], 99, 521, [95, null]], [97, ["number", "250"], 99, 539, [95, null]], [98, "show", 73, 577, [100, 99, 102]], [99, ["string", "Colors in TurtleArt"], 99, 577, [98, null]], [100, "setshade", 73, 558, [95, 101, 98]], [101, ["number", "0"], 108, 558, [100, null]], [102, "savesvg", 73, 596, [98, 103, null]], [103, ["string", "TurtleArtColors"], 108, 596, [102, null]], [-1, ["turtle", 1], -90, 250, 90.0, 100.0, 0.0, 1.0]] \ No newline at end of file
diff --git a/uploads/comment.file.b4054c7c358a664c.7371756172652e7461.ta b/uploads/comment.file.b4054c7c358a664c.7371756172652e7461.ta
new file mode 100644
index 0000000..b32ec76
--- /dev/null
+++ b/uploads/comment.file.b4054c7c358a664c.7371756172652e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 195, 195, [null, 1]], [1, "repeat", 195, 237, [0, 2, 4, 3]], [2, ["number", 4], 243, 237, [1, null]], [3, ["vspace", 0], 195, 315, [1, null]], [4, "forward", 257, 297, [1, 5, 6]], [5, ["number", 100], 329, 297, [4, null]], [6, "right", 257, 339, [4, 7, null]], [7, ["number", 90], 315, 339, [6, null]], [-1, ["turtle", 1], 0, 0, 0.0, 0, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.b44a77af4bc940ad.747572746c6561727474657374322e7461.png b/uploads/comment.file.b44a77af4bc940ad.747572746c6561727474657374322e7461.png
new file mode 100644
index 0000000..379dccd
--- /dev/null
+++ b/uploads/comment.file.b44a77af4bc940ad.747572746c6561727474657374322e7461.png
Binary files differ
diff --git a/uploads/comment.file.b44a77af4bc940ad.747572746c6561727474657374322e7461.ta b/uploads/comment.file.b44a77af4bc940ad.747572746c6561727474657374322e7461.ta
new file mode 100644
index 0000000..ee973c7
--- /dev/null
+++ b/uploads/comment.file.b44a77af4bc940ad.747572746c6561727474657374322e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 16, 168, [null, 1]], [1, "forward", 16, 196, [0, 2, 3]], [2, ["number", 100], 61, 196, [1, null]], [3, "right", 16, 224, [1, 4, 5]], [4, ["number", 90], 55, 224, [3, null]], [5, "setcolor", 16, 252, [3, 6, 7]], [6, "blue", 63, 252, [5, null]], [7, "forward", 16, 280, [5, 8, 25]], [8, ["number", 100], 61, 280, [7, null]], [9, "setcolor", 225, 246, [23, 15, 16]], [10, ["number", "5"], 312, 314, [22, null]], [11, "seth", 264, 342, [22, 13, 18]], [12, "heading", 358, 342, [13, null]], [13, "plus2", 322, 342, [11, 12, 14]], [14, ["number", 1], 358, 370, [13, null]], [15, "red", 272, 246, [9, null]], [16, "repeat", 225, 274, [9, 17, 22, null]], [17, ["number", "100"], 255, 274, [16, null]], [18, "setcolor", 264, 370, [11, 19, null]], [19, "plus2", 311, 370, [18, 20, 21]], [20, "color", 347, 370, [19, null]], [21, ["number", "1"], 347, 398, [19, null]], [22, "forward", 264, 314, [16, 10, 11]], [23, "hat1", 225, 218, [null, 9]], [24, "stack1", 56, 348, [25, null]], [25, "repeat", 16, 308, [7, 26, 24, 27]], [26, ["number", 4], 47, 308, [25, null]], [27, ["vspace", 0], 16, 360, [25, null]], [-1, ["turtle", 1], 284, 34, 130.0, 100.0, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.b47fdec09160466c.72616e646f6d2e7461.ta b/uploads/comment.file.b47fdec09160466c.72616e646f6d2e7461.ta
new file mode 100644
index 0000000..69343c8
--- /dev/null
+++ b/uploads/comment.file.b47fdec09160466c.72616e646f6d2e7461.ta
@@ -0,0 +1 @@
+[[0, ["start", 2.0], 195, 198, [null, 2]], [1, "forward", 257, 450, [7, 13, 10]], [2, "pendown", 195, 240, [0, 8]], [3, "setcolor", 257, 334, [8, 4, 7]], [4, "random", 335, 334, [3, 5, 6, null]], [5, ["number", 0], 423, 334, [4, null]], [6, ["number", 100], 423, 376, [4, null]], [7, ["vspace", 20], 257, 376, [3, 1]], [8, "repeat", 195, 274, [2, 9, 3, null]], [9, ["number", "10"], 243, 274, [8, null]], [10, ["vspace", 20], 257, 492, [1, 11]], [11, "left", 257, 566, [10, 12, null]], [12, ["number", 90], 315, 566, [11, null]], [13, "random", 329, 450, [1, 14, 15, null]], [14, ["number", 0], 417, 450, [13, null]], [15, ["number", 100], 417, 492, [13, null]], [-1, ["turtle", 1], -102, 169, 0.0, 12, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.b4d41b2e6a6c6dd4.547572746c65417274436f6c6f72732833292e7461.png b/uploads/comment.file.b4d41b2e6a6c6dd4.547572746c65417274436f6c6f72732833292e7461.png
new file mode 100644
index 0000000..21d5153
--- /dev/null
+++ b/uploads/comment.file.b4d41b2e6a6c6dd4.547572746c65417274436f6c6f72732833292e7461.png
Binary files differ
diff --git a/uploads/comment.file.b4d41b2e6a6c6dd4.547572746c65417274436f6c6f72732833292e7461.ta b/uploads/comment.file.b4d41b2e6a6c6dd4.547572746c65417274436f6c6f72732833292e7461.ta
new file mode 100644
index 0000000..cb6b4e8
--- /dev/null
+++ b/uploads/comment.file.b4d41b2e6a6c6dd4.547572746c65417274436f6c6f72732833292e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 73, 77, [null, 2]], [1, "setxy", 984, 310, [9, 34, 13, 5]], [2, "clean", 73, 96, [0, 31]], [3, "seth", 959, 170, [21, 4, 83]], [4, ["number", 90], 994, 170, [3, null]], [5, "forward", 984, 347, [1, 6, 15]], [6, ["number", 50], 1013, 347, [5, null]], [7, "setpensize", 959, 208, [83, 8, 25]], [8, ["number", 1], 994, 208, [7, null]], [9, "repeat", 959, 283, [11, 10, 1, 71]], [10, ["number", 50], 978, 283, [9, null]], [11, "storein", 959, 246, [25, 12, 39, 9]], [12, ["string", "y-start"], 987, 246, [11, null]], [13, "box", 1010, 328, [1, 14, null]], [14, ["string", "y-start"], 1034, 328, [13, null]], [15, "storein", 984, 366, [5, 16, 17, null]], [16, ["string", "y-start"], 1012, 366, [15, null]], [17, "plus2", 1012, 384, [15, 18, 20]], [18, "box", 1036, 384, [17, 19, null]], [19, ["string", "y-start"], 1060, 384, [18, null]], [20, ["number", 1], 1036, 402, [17, null]], [21, "hat", 959, 148, [null, 22, 3]], [22, ["string", "fill box"], 985, 151, [21, null]], [23, "stack", 125, 377, [56, 24, null]], [24, ["string", "fill box"], 151, 377, [23, null]], [25, "setcolor", 959, 227, [7, 29, 11]], [26, "storein", 73, 185, [36, 27, 28, 57]], [27, ["string", "my color"], 101, 185, [26, null]], [28, ["number", "0"], 101, 203, [26, null]], [29, "box", 989, 227, [25, 30, null]], [30, ["string", "my color"], 1013, 227, [29, null]], [31, "storein", 73, 111, [2, 32, 33, 36]], [32, ["string", "lower left x"], 103, 111, [31, null]], [33, ["number", "-300"], 103, 129, [31, null]], [34, "box", 1010, 310, [1, 35, null]], [35, ["string", "lower left x"], 1034, 310, [34, null]], [36, "storein", 73, 148, [31, 37, 38, 26]], [37, ["string", "lower left y"], 103, 148, [36, null]], [38, ["number", "200"], 103, 166, [36, null]], [39, "box", 987, 264, [11, 40, null]], [40, ["string", "lower left y"], 1011, 264, [39, null]], [41, "repeat", 99, 249, [57, 42, 43, 60]], [42, ["number", "10"], 118, 249, [41, null]], [43, "storein", 125, 276, [41, 44, 46, 51]], [44, ["string", "my color"], 155, 276, [43, null]], [45, ["number", "50"], 179, 349, [53, null]], [46, ["identity2", 80.040000000000006], 155, 294, [43, 47]], [47, "plus2", 250, 294, [46, 48, 50]], [48, "box", 274, 294, [47, 49, null]], [49, ["string", "my color"], 298, 294, [48, null]], [50, ["number", "1"], 274, 312, [47, null]], [51, "storein", 125, 313, [43, 52, 53, 56]], [52, ["string", "lower left x"], 155, 313, [51, null]], [53, "plus2", 155, 331, [51, 54, 45]], [54, "box", 179, 331, [53, 55, null]], [55, ["string", "lower left x"], 203, 331, [54, null]], [56, ["vspace", 13.34], 125, 350, [51, 23]], [57, "repeat", 73, 222, [26, 58, 41, 59]], [58, ["number", "10"], 92, 222, [57, null]], [59, ["vspace", 280.0], 73, 257, [57, 95]], [60, ["vspace", 120.04000000000001], 99, 284, [41, 61]], [61, "storein", 99, 404, [60, 62, 63, 67]], [62, ["string", "lower left y"], 129, 404, [61, null]], [63, "minus2", 129, 422, [61, 64, 66]], [64, "box", 153, 422, [63, 65, null]], [65, ["string", "lower left y"], 177, 422, [64, null]], [66, ["number", "50"], 164, 440, [63, null]], [67, ["vspace", 13.34], 99, 441, [61, 68]], [68, "storein", 99, 468, [67, 69, 70, null]], [69, ["string", "lower left x"], 128, 468, [68, null]], [70, ["number", "-300"], 128, 486, [68, null]], [71, ["vspace", 100], 959, 318, [9, 72]], [72, "setxy", 959, 422, [71, 74, 75, 82]], [73, "plus2", 1098, 422, [74, 79, 78]], [74, ["identity2", 100], 985, 422, [72, 73]], [75, "plus2", 985, 440, [72, 76, 81]], [76, "box", 1009, 440, [75, 77, null]], [77, ["string", "lower left y"], 1033, 440, [76, null]], [78, ["number", "5"], 1122, 440, [73, null]], [79, "box", 1122, 422, [73, 80, null]], [80, ["string", "lower left x"], 1146, 422, [79, null]], [81, ["number", "-25"], 1009, 458, [75, null]], [82, ["vspace", 20], 959, 459, [72, 85]], [83, "setshade", 959, 189, [3, 84, 7]], [84, ["number", 50], 994, 189, [83, null]], [85, "setshade", 959, 492, [82, 86, 91]], [86, ["number", "0"], 994, 492, [85, null]], [87, "box", 1086, 511, [93, 88, null]], [88, ["string", "my color"], 1110, 511, [87, null]], [89, "setshade", 959, 530, [91, 90, null]], [90, ["number", 50], 994, 530, [89, null]], [91, "show", 959, 511, [85, 92, 89]], [92, ["identity2", 60], 985, 511, [91, 93]], [93, "minus2", 1062, 511, [92, 87, 94]], [94, ["number", "1"], 1097, 529, [93, null]], [95, "setxy", 73, 521, [59, 96, 97, 100]], [96, ["number", "-90"], 99, 521, [95, null]], [97, ["number", "250"], 99, 539, [95, null]], [98, "show", 73, 577, [100, 99, 102]], [99, ["string", "Colors in TurtleArt"], 99, 577, [98, null]], [100, "setshade", 73, 558, [95, 101, 98]], [101, ["number", "0"], 108, 558, [100, null]], [102, "savesvg", 73, 596, [98, 103, null]], [103, ["string", "TurtleArtColors"], 108, 596, [102, null]], [-1, ["turtle", 1], -90, 250, 90.0, 100.0, 0.0, 1.0]] \ No newline at end of file
diff --git a/uploads/comment.file.b5e4828313a24ba6.547572746c65417274436f6c6f72732e7461.ta b/uploads/comment.file.b5e4828313a24ba6.547572746c65417274436f6c6f72732e7461.ta
new file mode 100644
index 0000000..cb6b4e8
--- /dev/null
+++ b/uploads/comment.file.b5e4828313a24ba6.547572746c65417274436f6c6f72732e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 73, 77, [null, 2]], [1, "setxy", 984, 310, [9, 34, 13, 5]], [2, "clean", 73, 96, [0, 31]], [3, "seth", 959, 170, [21, 4, 83]], [4, ["number", 90], 994, 170, [3, null]], [5, "forward", 984, 347, [1, 6, 15]], [6, ["number", 50], 1013, 347, [5, null]], [7, "setpensize", 959, 208, [83, 8, 25]], [8, ["number", 1], 994, 208, [7, null]], [9, "repeat", 959, 283, [11, 10, 1, 71]], [10, ["number", 50], 978, 283, [9, null]], [11, "storein", 959, 246, [25, 12, 39, 9]], [12, ["string", "y-start"], 987, 246, [11, null]], [13, "box", 1010, 328, [1, 14, null]], [14, ["string", "y-start"], 1034, 328, [13, null]], [15, "storein", 984, 366, [5, 16, 17, null]], [16, ["string", "y-start"], 1012, 366, [15, null]], [17, "plus2", 1012, 384, [15, 18, 20]], [18, "box", 1036, 384, [17, 19, null]], [19, ["string", "y-start"], 1060, 384, [18, null]], [20, ["number", 1], 1036, 402, [17, null]], [21, "hat", 959, 148, [null, 22, 3]], [22, ["string", "fill box"], 985, 151, [21, null]], [23, "stack", 125, 377, [56, 24, null]], [24, ["string", "fill box"], 151, 377, [23, null]], [25, "setcolor", 959, 227, [7, 29, 11]], [26, "storein", 73, 185, [36, 27, 28, 57]], [27, ["string", "my color"], 101, 185, [26, null]], [28, ["number", "0"], 101, 203, [26, null]], [29, "box", 989, 227, [25, 30, null]], [30, ["string", "my color"], 1013, 227, [29, null]], [31, "storein", 73, 111, [2, 32, 33, 36]], [32, ["string", "lower left x"], 103, 111, [31, null]], [33, ["number", "-300"], 103, 129, [31, null]], [34, "box", 1010, 310, [1, 35, null]], [35, ["string", "lower left x"], 1034, 310, [34, null]], [36, "storein", 73, 148, [31, 37, 38, 26]], [37, ["string", "lower left y"], 103, 148, [36, null]], [38, ["number", "200"], 103, 166, [36, null]], [39, "box", 987, 264, [11, 40, null]], [40, ["string", "lower left y"], 1011, 264, [39, null]], [41, "repeat", 99, 249, [57, 42, 43, 60]], [42, ["number", "10"], 118, 249, [41, null]], [43, "storein", 125, 276, [41, 44, 46, 51]], [44, ["string", "my color"], 155, 276, [43, null]], [45, ["number", "50"], 179, 349, [53, null]], [46, ["identity2", 80.040000000000006], 155, 294, [43, 47]], [47, "plus2", 250, 294, [46, 48, 50]], [48, "box", 274, 294, [47, 49, null]], [49, ["string", "my color"], 298, 294, [48, null]], [50, ["number", "1"], 274, 312, [47, null]], [51, "storein", 125, 313, [43, 52, 53, 56]], [52, ["string", "lower left x"], 155, 313, [51, null]], [53, "plus2", 155, 331, [51, 54, 45]], [54, "box", 179, 331, [53, 55, null]], [55, ["string", "lower left x"], 203, 331, [54, null]], [56, ["vspace", 13.34], 125, 350, [51, 23]], [57, "repeat", 73, 222, [26, 58, 41, 59]], [58, ["number", "10"], 92, 222, [57, null]], [59, ["vspace", 280.0], 73, 257, [57, 95]], [60, ["vspace", 120.04000000000001], 99, 284, [41, 61]], [61, "storein", 99, 404, [60, 62, 63, 67]], [62, ["string", "lower left y"], 129, 404, [61, null]], [63, "minus2", 129, 422, [61, 64, 66]], [64, "box", 153, 422, [63, 65, null]], [65, ["string", "lower left y"], 177, 422, [64, null]], [66, ["number", "50"], 164, 440, [63, null]], [67, ["vspace", 13.34], 99, 441, [61, 68]], [68, "storein", 99, 468, [67, 69, 70, null]], [69, ["string", "lower left x"], 128, 468, [68, null]], [70, ["number", "-300"], 128, 486, [68, null]], [71, ["vspace", 100], 959, 318, [9, 72]], [72, "setxy", 959, 422, [71, 74, 75, 82]], [73, "plus2", 1098, 422, [74, 79, 78]], [74, ["identity2", 100], 985, 422, [72, 73]], [75, "plus2", 985, 440, [72, 76, 81]], [76, "box", 1009, 440, [75, 77, null]], [77, ["string", "lower left y"], 1033, 440, [76, null]], [78, ["number", "5"], 1122, 440, [73, null]], [79, "box", 1122, 422, [73, 80, null]], [80, ["string", "lower left x"], 1146, 422, [79, null]], [81, ["number", "-25"], 1009, 458, [75, null]], [82, ["vspace", 20], 959, 459, [72, 85]], [83, "setshade", 959, 189, [3, 84, 7]], [84, ["number", 50], 994, 189, [83, null]], [85, "setshade", 959, 492, [82, 86, 91]], [86, ["number", "0"], 994, 492, [85, null]], [87, "box", 1086, 511, [93, 88, null]], [88, ["string", "my color"], 1110, 511, [87, null]], [89, "setshade", 959, 530, [91, 90, null]], [90, ["number", 50], 994, 530, [89, null]], [91, "show", 959, 511, [85, 92, 89]], [92, ["identity2", 60], 985, 511, [91, 93]], [93, "minus2", 1062, 511, [92, 87, 94]], [94, ["number", "1"], 1097, 529, [93, null]], [95, "setxy", 73, 521, [59, 96, 97, 100]], [96, ["number", "-90"], 99, 521, [95, null]], [97, ["number", "250"], 99, 539, [95, null]], [98, "show", 73, 577, [100, 99, 102]], [99, ["string", "Colors in TurtleArt"], 99, 577, [98, null]], [100, "setshade", 73, 558, [95, 101, 98]], [101, ["number", "0"], 108, 558, [100, null]], [102, "savesvg", 73, 596, [98, 103, null]], [103, ["string", "TurtleArtColors"], 108, 596, [102, null]], [-1, ["turtle", 1], -90, 250, 90.0, 100.0, 0.0, 1.0]] \ No newline at end of file
diff --git a/uploads/comment.file.b795f9173ebfdedb.547572746c65417274436f6c6f72732e7461.ta b/uploads/comment.file.b795f9173ebfdedb.547572746c65417274436f6c6f72732e7461.ta
new file mode 100644
index 0000000..cb6b4e8
--- /dev/null
+++ b/uploads/comment.file.b795f9173ebfdedb.547572746c65417274436f6c6f72732e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 73, 77, [null, 2]], [1, "setxy", 984, 310, [9, 34, 13, 5]], [2, "clean", 73, 96, [0, 31]], [3, "seth", 959, 170, [21, 4, 83]], [4, ["number", 90], 994, 170, [3, null]], [5, "forward", 984, 347, [1, 6, 15]], [6, ["number", 50], 1013, 347, [5, null]], [7, "setpensize", 959, 208, [83, 8, 25]], [8, ["number", 1], 994, 208, [7, null]], [9, "repeat", 959, 283, [11, 10, 1, 71]], [10, ["number", 50], 978, 283, [9, null]], [11, "storein", 959, 246, [25, 12, 39, 9]], [12, ["string", "y-start"], 987, 246, [11, null]], [13, "box", 1010, 328, [1, 14, null]], [14, ["string", "y-start"], 1034, 328, [13, null]], [15, "storein", 984, 366, [5, 16, 17, null]], [16, ["string", "y-start"], 1012, 366, [15, null]], [17, "plus2", 1012, 384, [15, 18, 20]], [18, "box", 1036, 384, [17, 19, null]], [19, ["string", "y-start"], 1060, 384, [18, null]], [20, ["number", 1], 1036, 402, [17, null]], [21, "hat", 959, 148, [null, 22, 3]], [22, ["string", "fill box"], 985, 151, [21, null]], [23, "stack", 125, 377, [56, 24, null]], [24, ["string", "fill box"], 151, 377, [23, null]], [25, "setcolor", 959, 227, [7, 29, 11]], [26, "storein", 73, 185, [36, 27, 28, 57]], [27, ["string", "my color"], 101, 185, [26, null]], [28, ["number", "0"], 101, 203, [26, null]], [29, "box", 989, 227, [25, 30, null]], [30, ["string", "my color"], 1013, 227, [29, null]], [31, "storein", 73, 111, [2, 32, 33, 36]], [32, ["string", "lower left x"], 103, 111, [31, null]], [33, ["number", "-300"], 103, 129, [31, null]], [34, "box", 1010, 310, [1, 35, null]], [35, ["string", "lower left x"], 1034, 310, [34, null]], [36, "storein", 73, 148, [31, 37, 38, 26]], [37, ["string", "lower left y"], 103, 148, [36, null]], [38, ["number", "200"], 103, 166, [36, null]], [39, "box", 987, 264, [11, 40, null]], [40, ["string", "lower left y"], 1011, 264, [39, null]], [41, "repeat", 99, 249, [57, 42, 43, 60]], [42, ["number", "10"], 118, 249, [41, null]], [43, "storein", 125, 276, [41, 44, 46, 51]], [44, ["string", "my color"], 155, 276, [43, null]], [45, ["number", "50"], 179, 349, [53, null]], [46, ["identity2", 80.040000000000006], 155, 294, [43, 47]], [47, "plus2", 250, 294, [46, 48, 50]], [48, "box", 274, 294, [47, 49, null]], [49, ["string", "my color"], 298, 294, [48, null]], [50, ["number", "1"], 274, 312, [47, null]], [51, "storein", 125, 313, [43, 52, 53, 56]], [52, ["string", "lower left x"], 155, 313, [51, null]], [53, "plus2", 155, 331, [51, 54, 45]], [54, "box", 179, 331, [53, 55, null]], [55, ["string", "lower left x"], 203, 331, [54, null]], [56, ["vspace", 13.34], 125, 350, [51, 23]], [57, "repeat", 73, 222, [26, 58, 41, 59]], [58, ["number", "10"], 92, 222, [57, null]], [59, ["vspace", 280.0], 73, 257, [57, 95]], [60, ["vspace", 120.04000000000001], 99, 284, [41, 61]], [61, "storein", 99, 404, [60, 62, 63, 67]], [62, ["string", "lower left y"], 129, 404, [61, null]], [63, "minus2", 129, 422, [61, 64, 66]], [64, "box", 153, 422, [63, 65, null]], [65, ["string", "lower left y"], 177, 422, [64, null]], [66, ["number", "50"], 164, 440, [63, null]], [67, ["vspace", 13.34], 99, 441, [61, 68]], [68, "storein", 99, 468, [67, 69, 70, null]], [69, ["string", "lower left x"], 128, 468, [68, null]], [70, ["number", "-300"], 128, 486, [68, null]], [71, ["vspace", 100], 959, 318, [9, 72]], [72, "setxy", 959, 422, [71, 74, 75, 82]], [73, "plus2", 1098, 422, [74, 79, 78]], [74, ["identity2", 100], 985, 422, [72, 73]], [75, "plus2", 985, 440, [72, 76, 81]], [76, "box", 1009, 440, [75, 77, null]], [77, ["string", "lower left y"], 1033, 440, [76, null]], [78, ["number", "5"], 1122, 440, [73, null]], [79, "box", 1122, 422, [73, 80, null]], [80, ["string", "lower left x"], 1146, 422, [79, null]], [81, ["number", "-25"], 1009, 458, [75, null]], [82, ["vspace", 20], 959, 459, [72, 85]], [83, "setshade", 959, 189, [3, 84, 7]], [84, ["number", 50], 994, 189, [83, null]], [85, "setshade", 959, 492, [82, 86, 91]], [86, ["number", "0"], 994, 492, [85, null]], [87, "box", 1086, 511, [93, 88, null]], [88, ["string", "my color"], 1110, 511, [87, null]], [89, "setshade", 959, 530, [91, 90, null]], [90, ["number", 50], 994, 530, [89, null]], [91, "show", 959, 511, [85, 92, 89]], [92, ["identity2", 60], 985, 511, [91, 93]], [93, "minus2", 1062, 511, [92, 87, 94]], [94, ["number", "1"], 1097, 529, [93, null]], [95, "setxy", 73, 521, [59, 96, 97, 100]], [96, ["number", "-90"], 99, 521, [95, null]], [97, ["number", "250"], 99, 539, [95, null]], [98, "show", 73, 577, [100, 99, 102]], [99, ["string", "Colors in TurtleArt"], 99, 577, [98, null]], [100, "setshade", 73, 558, [95, 101, 98]], [101, ["number", "0"], 108, 558, [100, null]], [102, "savesvg", 73, 596, [98, 103, null]], [103, ["string", "TurtleArtColors"], 108, 596, [102, null]], [-1, ["turtle", 1], -90, 250, 90.0, 100.0, 0.0, 1.0]] \ No newline at end of file
diff --git a/uploads/comment.file.b7f2a06146dcba0c.6f63742e7461.png b/uploads/comment.file.b7f2a06146dcba0c.6f63742e7461.png
new file mode 100644
index 0000000..ea69266
--- /dev/null
+++ b/uploads/comment.file.b7f2a06146dcba0c.6f63742e7461.png
Binary files differ
diff --git a/uploads/comment.file.b7f2a06146dcba0c.6f63742e7461.ta b/uploads/comment.file.b7f2a06146dcba0c.6f63742e7461.ta
new file mode 100644
index 0000000..dc6182a
--- /dev/null
+++ b/uploads/comment.file.b7f2a06146dcba0c.6f63742e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 167, 318, [null, 1]], [1, "repeat", 167, 360, [0, 2, 3, null]], [2, ["number", "8"], 215, 360, [1, null]], [3, "forward", 229, 420, [1, 4, 5]], [4, ["number", 100], 301, 420, [3, null]], [5, "right", 229, 462, [3, 6, null]], [6, ["number", "45"], 287, 462, [5, null]], [-1, ["turtle", 1], 0, 0, 0.0, 0, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.b830add106e875cb.72616e646f6d2e7461.ta b/uploads/comment.file.b830add106e875cb.72616e646f6d2e7461.ta
new file mode 100644
index 0000000..69343c8
--- /dev/null
+++ b/uploads/comment.file.b830add106e875cb.72616e646f6d2e7461.ta
@@ -0,0 +1 @@
+[[0, ["start", 2.0], 195, 198, [null, 2]], [1, "forward", 257, 450, [7, 13, 10]], [2, "pendown", 195, 240, [0, 8]], [3, "setcolor", 257, 334, [8, 4, 7]], [4, "random", 335, 334, [3, 5, 6, null]], [5, ["number", 0], 423, 334, [4, null]], [6, ["number", 100], 423, 376, [4, null]], [7, ["vspace", 20], 257, 376, [3, 1]], [8, "repeat", 195, 274, [2, 9, 3, null]], [9, ["number", "10"], 243, 274, [8, null]], [10, ["vspace", 20], 257, 492, [1, 11]], [11, "left", 257, 566, [10, 12, null]], [12, ["number", 90], 315, 566, [11, null]], [13, "random", 329, 450, [1, 14, 15, null]], [14, ["number", 0], 417, 450, [13, null]], [15, ["number", 100], 417, 492, [13, null]], [-1, ["turtle", 1], -102, 169, 0.0, 12, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.b858721e9288d063.547572746c65417274436f6c6f72732e7461.ta b/uploads/comment.file.b858721e9288d063.547572746c65417274436f6c6f72732e7461.ta
new file mode 100644
index 0000000..cb6b4e8
--- /dev/null
+++ b/uploads/comment.file.b858721e9288d063.547572746c65417274436f6c6f72732e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 73, 77, [null, 2]], [1, "setxy", 984, 310, [9, 34, 13, 5]], [2, "clean", 73, 96, [0, 31]], [3, "seth", 959, 170, [21, 4, 83]], [4, ["number", 90], 994, 170, [3, null]], [5, "forward", 984, 347, [1, 6, 15]], [6, ["number", 50], 1013, 347, [5, null]], [7, "setpensize", 959, 208, [83, 8, 25]], [8, ["number", 1], 994, 208, [7, null]], [9, "repeat", 959, 283, [11, 10, 1, 71]], [10, ["number", 50], 978, 283, [9, null]], [11, "storein", 959, 246, [25, 12, 39, 9]], [12, ["string", "y-start"], 987, 246, [11, null]], [13, "box", 1010, 328, [1, 14, null]], [14, ["string", "y-start"], 1034, 328, [13, null]], [15, "storein", 984, 366, [5, 16, 17, null]], [16, ["string", "y-start"], 1012, 366, [15, null]], [17, "plus2", 1012, 384, [15, 18, 20]], [18, "box", 1036, 384, [17, 19, null]], [19, ["string", "y-start"], 1060, 384, [18, null]], [20, ["number", 1], 1036, 402, [17, null]], [21, "hat", 959, 148, [null, 22, 3]], [22, ["string", "fill box"], 985, 151, [21, null]], [23, "stack", 125, 377, [56, 24, null]], [24, ["string", "fill box"], 151, 377, [23, null]], [25, "setcolor", 959, 227, [7, 29, 11]], [26, "storein", 73, 185, [36, 27, 28, 57]], [27, ["string", "my color"], 101, 185, [26, null]], [28, ["number", "0"], 101, 203, [26, null]], [29, "box", 989, 227, [25, 30, null]], [30, ["string", "my color"], 1013, 227, [29, null]], [31, "storein", 73, 111, [2, 32, 33, 36]], [32, ["string", "lower left x"], 103, 111, [31, null]], [33, ["number", "-300"], 103, 129, [31, null]], [34, "box", 1010, 310, [1, 35, null]], [35, ["string", "lower left x"], 1034, 310, [34, null]], [36, "storein", 73, 148, [31, 37, 38, 26]], [37, ["string", "lower left y"], 103, 148, [36, null]], [38, ["number", "200"], 103, 166, [36, null]], [39, "box", 987, 264, [11, 40, null]], [40, ["string", "lower left y"], 1011, 264, [39, null]], [41, "repeat", 99, 249, [57, 42, 43, 60]], [42, ["number", "10"], 118, 249, [41, null]], [43, "storein", 125, 276, [41, 44, 46, 51]], [44, ["string", "my color"], 155, 276, [43, null]], [45, ["number", "50"], 179, 349, [53, null]], [46, ["identity2", 80.040000000000006], 155, 294, [43, 47]], [47, "plus2", 250, 294, [46, 48, 50]], [48, "box", 274, 294, [47, 49, null]], [49, ["string", "my color"], 298, 294, [48, null]], [50, ["number", "1"], 274, 312, [47, null]], [51, "storein", 125, 313, [43, 52, 53, 56]], [52, ["string", "lower left x"], 155, 313, [51, null]], [53, "plus2", 155, 331, [51, 54, 45]], [54, "box", 179, 331, [53, 55, null]], [55, ["string", "lower left x"], 203, 331, [54, null]], [56, ["vspace", 13.34], 125, 350, [51, 23]], [57, "repeat", 73, 222, [26, 58, 41, 59]], [58, ["number", "10"], 92, 222, [57, null]], [59, ["vspace", 280.0], 73, 257, [57, 95]], [60, ["vspace", 120.04000000000001], 99, 284, [41, 61]], [61, "storein", 99, 404, [60, 62, 63, 67]], [62, ["string", "lower left y"], 129, 404, [61, null]], [63, "minus2", 129, 422, [61, 64, 66]], [64, "box", 153, 422, [63, 65, null]], [65, ["string", "lower left y"], 177, 422, [64, null]], [66, ["number", "50"], 164, 440, [63, null]], [67, ["vspace", 13.34], 99, 441, [61, 68]], [68, "storein", 99, 468, [67, 69, 70, null]], [69, ["string", "lower left x"], 128, 468, [68, null]], [70, ["number", "-300"], 128, 486, [68, null]], [71, ["vspace", 100], 959, 318, [9, 72]], [72, "setxy", 959, 422, [71, 74, 75, 82]], [73, "plus2", 1098, 422, [74, 79, 78]], [74, ["identity2", 100], 985, 422, [72, 73]], [75, "plus2", 985, 440, [72, 76, 81]], [76, "box", 1009, 440, [75, 77, null]], [77, ["string", "lower left y"], 1033, 440, [76, null]], [78, ["number", "5"], 1122, 440, [73, null]], [79, "box", 1122, 422, [73, 80, null]], [80, ["string", "lower left x"], 1146, 422, [79, null]], [81, ["number", "-25"], 1009, 458, [75, null]], [82, ["vspace", 20], 959, 459, [72, 85]], [83, "setshade", 959, 189, [3, 84, 7]], [84, ["number", 50], 994, 189, [83, null]], [85, "setshade", 959, 492, [82, 86, 91]], [86, ["number", "0"], 994, 492, [85, null]], [87, "box", 1086, 511, [93, 88, null]], [88, ["string", "my color"], 1110, 511, [87, null]], [89, "setshade", 959, 530, [91, 90, null]], [90, ["number", 50], 994, 530, [89, null]], [91, "show", 959, 511, [85, 92, 89]], [92, ["identity2", 60], 985, 511, [91, 93]], [93, "minus2", 1062, 511, [92, 87, 94]], [94, ["number", "1"], 1097, 529, [93, null]], [95, "setxy", 73, 521, [59, 96, 97, 100]], [96, ["number", "-90"], 99, 521, [95, null]], [97, ["number", "250"], 99, 539, [95, null]], [98, "show", 73, 577, [100, 99, 102]], [99, ["string", "Colors in TurtleArt"], 99, 577, [98, null]], [100, "setshade", 73, 558, [95, 101, 98]], [101, ["number", "0"], 108, 558, [100, null]], [102, "savesvg", 73, 596, [98, 103, null]], [103, ["string", "TurtleArtColors"], 108, 596, [102, null]], [-1, ["turtle", 1], -90, 250, 90.0, 100.0, 0.0, 1.0]] \ No newline at end of file
diff --git a/uploads/comment.file.ba4675a0e85b1df7.7371756172652e7461.ta b/uploads/comment.file.ba4675a0e85b1df7.7371756172652e7461.ta
new file mode 100644
index 0000000..b32ec76
--- /dev/null
+++ b/uploads/comment.file.ba4675a0e85b1df7.7371756172652e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 195, 195, [null, 1]], [1, "repeat", 195, 237, [0, 2, 4, 3]], [2, ["number", 4], 243, 237, [1, null]], [3, ["vspace", 0], 195, 315, [1, null]], [4, "forward", 257, 297, [1, 5, 6]], [5, ["number", 100], 329, 297, [4, null]], [6, "right", 257, 339, [4, 7, null]], [7, ["number", 90], 315, 339, [6, null]], [-1, ["turtle", 1], 0, 0, 0.0, 0, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.bb08bc437fa46be6.6f63742e7461.ta b/uploads/comment.file.bb08bc437fa46be6.6f63742e7461.ta
new file mode 100644
index 0000000..dc6182a
--- /dev/null
+++ b/uploads/comment.file.bb08bc437fa46be6.6f63742e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 167, 318, [null, 1]], [1, "repeat", 167, 360, [0, 2, 3, null]], [2, ["number", "8"], 215, 360, [1, null]], [3, "forward", 229, 420, [1, 4, 5]], [4, ["number", 100], 301, 420, [3, null]], [5, "right", 229, 462, [3, 6, null]], [6, ["number", "45"], 287, 462, [5, null]], [-1, ["turtle", 1], 0, 0, 0.0, 0, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.bb52024805066709.7061747465726e2e7461.ta b/uploads/comment.file.bb52024805066709.7061747465726e2e7461.ta
new file mode 100644
index 0000000..b693b2b
--- /dev/null
+++ b/uploads/comment.file.bb52024805066709.7061747465726e2e7461.ta
@@ -0,0 +1 @@
+[[0, ["start", 2.0], 84, 193, [null, 15]], [1, "repeat", 84, 631, [30, 2, 4, 3]], [2, ["number", "100"], 132, 631, [1, null]], [3, ["vspace", 0], 84, 709, [1, null]], [4, "arc", 146, 691, [1, 5, 6, 7]], [5, ["number", "330"], 204, 691, [4, null]], [6, ["number", "250"], 204, 733, [4, null]], [7, "left", 146, 775, [4, 8, 9]], [8, ["number", "40"], 204, 775, [7, null]], [9, "forward", 146, 817, [7, 10, 11]], [10, ["number", "50"], 218, 817, [9, null]], [11, "setcolor", 146, 859, [9, 12, null]], [12, "random", 224, 859, [11, 13, 14, null]], [13, ["number", "0"], 312, 859, [12, null]], [14, ["number", "100"], 312, 901, [12, null]], [15, "clean", 84, 235, [0, 29]], [16, "left", 84, 429, [27, 17, 18]], [17, ["number", 90], 142, 429, [16, null]], [18, "forward", 84, 471, [16, 19, 20]], [19, ["number", "150"], 156, 471, [18, null]], [20, "right", 84, 513, [18, 21, 22]], [21, ["number", 90], 142, 513, [20, null]], [22, "forward", 84, 555, [20, 23, 30]], [23, ["number", "150"], 156, 555, [22, null]], [24, "setxy", 84, 303, [29, 25, 26, 27]], [25, ["number", 0], 142, 303, [24, null]], [26, ["number", 0], 142, 345, [24, null]], [27, "seth", 84, 387, [24, 28, 16]], [28, ["number", 0], 186, 387, [27, null]], [29, "penup", 84, 269, [15, 24]], [30, "pendown", 84, 597, [22, 1]], [-1, ["turtle", 1], -35, 2, 200.0, 43, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.bb7cad68c4f6cf78.7061747465726e322e7461.ta b/uploads/comment.file.bb7cad68c4f6cf78.7061747465726e322e7461.ta
new file mode 100644
index 0000000..3a07004
--- /dev/null
+++ b/uploads/comment.file.bb7cad68c4f6cf78.7061747465726e322e7461.ta
@@ -0,0 +1 @@
+[[0, ["start", 2.0], 84, 193, [null, 15]], [1, "repeat", 84, 631, [30, 2, 4, 3]], [2, ["number", "200"], 132, 631, [1, null]], [3, ["vspace", 0], 84, 709, [1, null]], [4, "arc", 146, 691, [1, 5, 6, 7]], [5, ["number", "330"], 204, 691, [4, null]], [6, ["number", "250"], 204, 733, [4, null]], [7, "left", 146, 775, [4, 8, 9]], [8, ["number", "32"], 204, 775, [7, null]], [9, "forward", 146, 817, [7, 10, 11]], [10, ["number", "30"], 218, 817, [9, null]], [11, "setcolor", 146, 859, [9, 12, null]], [12, "random", 224, 859, [11, 13, 14, null]], [13, ["number", "0"], 312, 859, [12, null]], [14, ["number", "100"], 312, 901, [12, null]], [15, "clean", 84, 235, [0, 29]], [16, "left", 84, 429, [27, 17, 18]], [17, ["number", 90], 142, 429, [16, null]], [18, "forward", 84, 471, [16, 19, 20]], [19, ["number", "100"], 156, 471, [18, null]], [20, "right", 84, 513, [18, 21, 22]], [21, ["number", 90], 142, 513, [20, null]], [22, "forward", 84, 555, [20, 23, 30]], [23, ["number", "150"], 156, 555, [22, null]], [24, "setxy", 84, 303, [29, 25, 26, 27]], [25, ["number", 0], 142, 303, [24, null]], [26, ["number", 0], 142, 345, [24, null]], [27, "seth", 84, 387, [24, 28, 16]], [28, ["number", 0], 186, 387, [27, null]], [29, "penup", 84, 269, [15, 24]], [30, "pendown", 84, 597, [22, 1]], [-1, ["turtle", 1], 68, 20, 200.0, 88, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.bbe458e7fc45b838.72616e646f6d2e7461.ta b/uploads/comment.file.bbe458e7fc45b838.72616e646f6d2e7461.ta
new file mode 100644
index 0000000..69343c8
--- /dev/null
+++ b/uploads/comment.file.bbe458e7fc45b838.72616e646f6d2e7461.ta
@@ -0,0 +1 @@
+[[0, ["start", 2.0], 195, 198, [null, 2]], [1, "forward", 257, 450, [7, 13, 10]], [2, "pendown", 195, 240, [0, 8]], [3, "setcolor", 257, 334, [8, 4, 7]], [4, "random", 335, 334, [3, 5, 6, null]], [5, ["number", 0], 423, 334, [4, null]], [6, ["number", 100], 423, 376, [4, null]], [7, ["vspace", 20], 257, 376, [3, 1]], [8, "repeat", 195, 274, [2, 9, 3, null]], [9, ["number", "10"], 243, 274, [8, null]], [10, ["vspace", 20], 257, 492, [1, 11]], [11, "left", 257, 566, [10, 12, null]], [12, ["number", 90], 315, 566, [11, null]], [13, "random", 329, 450, [1, 14, 15, null]], [14, ["number", 0], 417, 450, [13, null]], [15, ["number", 100], 417, 492, [13, null]], [-1, ["turtle", 1], -102, 169, 0.0, 12, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.bbeda6293097768a.7061747465726e332e7461.ta b/uploads/comment.file.bbeda6293097768a.7061747465726e332e7461.ta
new file mode 100644
index 0000000..67a625f
--- /dev/null
+++ b/uploads/comment.file.bbeda6293097768a.7061747465726e332e7461.ta
@@ -0,0 +1 @@
+[[0, ["start", 2.0], 85, 190, [null, 15]], [1, "repeat", 85, 628, [30, 2, 4, 3]], [2, ["number", "250"], 133, 628, [1, null]], [3, ["vspace", 0], 85, 706, [1, null]], [4, "arc", 147, 688, [1, 5, 6, 7]], [5, ["number", "360"], 205, 688, [4, null]], [6, ["number", "240"], 205, 730, [4, null]], [7, "left", 147, 772, [4, 8, 11]], [8, ["number", "5"], 205, 772, [7, null]], [9, "forward", 218, 902, [null, 10, null]], [10, ["number", "30"], 290, 902, [9, null]], [11, "setcolor", 147, 814, [7, 12, null]], [12, "random", 225, 814, [11, 13, 14, null]], [13, ["number", "0"], 313, 814, [12, null]], [14, ["number", "100"], 313, 856, [12, null]], [15, "clean", 85, 232, [0, 29]], [16, "left", 85, 426, [27, 17, 18]], [17, ["number", 90], 143, 426, [16, null]], [18, "forward", 85, 468, [16, 19, 20]], [19, ["number", "20"], 157, 468, [18, null]], [20, "right", 85, 510, [18, 21, 22]], [21, ["number", "90"], 143, 510, [20, null]], [22, "forward", 85, 552, [20, 23, 30]], [23, ["number", "40"], 157, 552, [22, null]], [24, "setxy", 85, 300, [29, 25, 26, 27]], [25, ["number", 0], 143, 300, [24, null]], [26, ["number", 0], 143, 342, [24, null]], [27, "seth", 85, 384, [24, 28, 16]], [28, ["number", 0], 187, 384, [27, null]], [29, "penup", 85, 266, [15, 24]], [30, "pendown", 85, 594, [22, 1]], [-1, ["turtle", 1], -20, 39, 190.0, 60, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.bcdf956a459387fe.6f63742e7461.ta b/uploads/comment.file.bcdf956a459387fe.6f63742e7461.ta
new file mode 100644
index 0000000..dc6182a
--- /dev/null
+++ b/uploads/comment.file.bcdf956a459387fe.6f63742e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 167, 318, [null, 1]], [1, "repeat", 167, 360, [0, 2, 3, null]], [2, ["number", "8"], 215, 360, [1, null]], [3, "forward", 229, 420, [1, 4, 5]], [4, ["number", 100], 301, 420, [3, null]], [5, "right", 229, 462, [3, 6, null]], [6, ["number", "45"], 287, 462, [5, null]], [-1, ["turtle", 1], 0, 0, 0.0, 0, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.bcffc0b86ec366a7.7371756172652e7461.ta b/uploads/comment.file.bcffc0b86ec366a7.7371756172652e7461.ta
new file mode 100644
index 0000000..b32ec76
--- /dev/null
+++ b/uploads/comment.file.bcffc0b86ec366a7.7371756172652e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 195, 195, [null, 1]], [1, "repeat", 195, 237, [0, 2, 4, 3]], [2, ["number", 4], 243, 237, [1, null]], [3, ["vspace", 0], 195, 315, [1, null]], [4, "forward", 257, 297, [1, 5, 6]], [5, ["number", 100], 329, 297, [4, null]], [6, "right", 257, 339, [4, 7, null]], [7, ["number", 90], 315, 339, [6, null]], [-1, ["turtle", 1], 0, 0, 0.0, 0, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.file.bd638f7fa8135ef8.6f63742e7461.ta b/uploads/comment.file.bd638f7fa8135ef8.6f63742e7461.ta
new file mode 100644
index 0000000..dc6182a
--- /dev/null
+++ b/uploads/comment.file.bd638f7fa8135ef8.6f63742e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 167, 318, [null, 1]], [1, "repeat", 167, 360, [0, 2, 3, null]], [2, ["number", "8"], 215, 360, [1, null]], [3, "forward", 229, 420, [1, 4, 5]], [4, ["number", 100], 301, 420, [3, null]], [5, "right", 229, 462, [3, 6, null]], [6, ["number", "45"], 287, 462, [5, null]], [-1, ["turtle", 1], 0, 0, 0.0, 0, 50, 5]] \ No newline at end of file
diff --git a/uploads/comment.newimage.808a861a19fa178d.7061747465726e342e706e67.png b/uploads/comment.newimage.808a861a19fa178d.7061747465726e342e706e67.png
new file mode 100644
index 0000000..5fce0da
--- /dev/null
+++ b/uploads/comment.newimage.808a861a19fa178d.7061747465726e342e706e67.png
Binary files differ
diff --git a/uploads/comment.newimage.86b1562d4db46876.72616e646f6d2e706e67.png b/uploads/comment.newimage.86b1562d4db46876.72616e646f6d2e706e67.png
new file mode 100644
index 0000000..9729094
--- /dev/null
+++ b/uploads/comment.newimage.86b1562d4db46876.72616e646f6d2e706e67.png
Binary files differ
diff --git a/uploads/comment.newimage.88fabbfc379a9c99.72616e646f6d2e706e67.png b/uploads/comment.newimage.88fabbfc379a9c99.72616e646f6d2e706e67.png
new file mode 100644
index 0000000..9729094
--- /dev/null
+++ b/uploads/comment.newimage.88fabbfc379a9c99.72616e646f6d2e706e67.png
Binary files differ
diff --git a/uploads/comment.newimage.899efa6a4b074f63.72616e646f6d2e706e67.png b/uploads/comment.newimage.899efa6a4b074f63.72616e646f6d2e706e67.png
new file mode 100644
index 0000000..9729094
--- /dev/null
+++ b/uploads/comment.newimage.899efa6a4b074f63.72616e646f6d2e706e67.png
Binary files differ
diff --git a/uploads/comment.newimage.8eff9d1bb83a51c1.547572746c65417274436f6c6f72732e706e67.png b/uploads/comment.newimage.8eff9d1bb83a51c1.547572746c65417274436f6c6f72732e706e67.png
new file mode 100644
index 0000000..16da799
--- /dev/null
+++ b/uploads/comment.newimage.8eff9d1bb83a51c1.547572746c65417274436f6c6f72732e706e67.png
Binary files differ
diff --git a/uploads/comment.newimage.8f995e2afe4c34da.547572746c65417274436f6c6f72732e706e67.png b/uploads/comment.newimage.8f995e2afe4c34da.547572746c65417274436f6c6f72732e706e67.png
new file mode 100644
index 0000000..16da799
--- /dev/null
+++ b/uploads/comment.newimage.8f995e2afe4c34da.547572746c65417274436f6c6f72732e706e67.png
Binary files differ
diff --git a/uploads/comment.newimage.910f7e9615a03bcb.72616e646f6d2e706e67.png b/uploads/comment.newimage.910f7e9615a03bcb.72616e646f6d2e706e67.png
new file mode 100644
index 0000000..9729094
--- /dev/null
+++ b/uploads/comment.newimage.910f7e9615a03bcb.72616e646f6d2e706e67.png
Binary files differ
diff --git a/uploads/comment.newimage.9167bbbca0caad97.547572746c65417274436f6c6f72732e706e67.png b/uploads/comment.newimage.9167bbbca0caad97.547572746c65417274436f6c6f72732e706e67.png
new file mode 100644
index 0000000..16da799
--- /dev/null
+++ b/uploads/comment.newimage.9167bbbca0caad97.547572746c65417274436f6c6f72732e706e67.png
Binary files differ
diff --git a/uploads/comment.newimage.91d85a30ad539dc7.72616e646f6d2e706e67.png b/uploads/comment.newimage.91d85a30ad539dc7.72616e646f6d2e706e67.png
new file mode 100644
index 0000000..9729094
--- /dev/null
+++ b/uploads/comment.newimage.91d85a30ad539dc7.72616e646f6d2e706e67.png
Binary files differ
diff --git a/uploads/comment.newimage.9222d6fa727c1325.547572746c65417274436f6c6f72732e706e67.png b/uploads/comment.newimage.9222d6fa727c1325.547572746c65417274436f6c6f72732e706e67.png
new file mode 100644
index 0000000..16da799
--- /dev/null
+++ b/uploads/comment.newimage.9222d6fa727c1325.547572746c65417274436f6c6f72732e706e67.png
Binary files differ
diff --git a/uploads/comment.newimage.925644106969a2f6.547572746c65417274436f6c6f72732e706e67.png b/uploads/comment.newimage.925644106969a2f6.547572746c65417274436f6c6f72732e706e67.png
new file mode 100644
index 0000000..16da799
--- /dev/null
+++ b/uploads/comment.newimage.925644106969a2f6.547572746c65417274436f6c6f72732e706e67.png
Binary files differ
diff --git a/uploads/comment.newimage.9294b7dd4b712b98.7061747465726e352e706e67.png b/uploads/comment.newimage.9294b7dd4b712b98.7061747465726e352e706e67.png
new file mode 100644
index 0000000..2b68987
--- /dev/null
+++ b/uploads/comment.newimage.9294b7dd4b712b98.7061747465726e352e706e67.png
Binary files differ
diff --git a/uploads/comment.newimage.9359d4958ffe58e3.72616e646f6d2e706e67.png b/uploads/comment.newimage.9359d4958ffe58e3.72616e646f6d2e706e67.png
new file mode 100644
index 0000000..9729094
--- /dev/null
+++ b/uploads/comment.newimage.9359d4958ffe58e3.72616e646f6d2e706e67.png
Binary files differ
diff --git a/uploads/comment.newimage.970aa68555838b03.72616e646f6d2e706e67.png b/uploads/comment.newimage.970aa68555838b03.72616e646f6d2e706e67.png
new file mode 100644
index 0000000..9729094
--- /dev/null
+++ b/uploads/comment.newimage.970aa68555838b03.72616e646f6d2e706e67.png
Binary files differ
diff --git a/uploads/comment.newimage.9babac2bb7cfc14c.547572746c65417274436f6c6f72732e706e67.png b/uploads/comment.newimage.9babac2bb7cfc14c.547572746c65417274436f6c6f72732e706e67.png
new file mode 100644
index 0000000..16da799
--- /dev/null
+++ b/uploads/comment.newimage.9babac2bb7cfc14c.547572746c65417274436f6c6f72732e706e67.png
Binary files differ
diff --git a/uploads/comment.newimage.9c1f47d9d06be6d7.72616e646f6d2e706e67.png b/uploads/comment.newimage.9c1f47d9d06be6d7.72616e646f6d2e706e67.png
new file mode 100644
index 0000000..9729094
--- /dev/null
+++ b/uploads/comment.newimage.9c1f47d9d06be6d7.72616e646f6d2e706e67.png
Binary files differ
diff --git a/uploads/comment.newimage.a3c5e5da0b56515e.547572746c65417274436f6c6f72732e706e67.png b/uploads/comment.newimage.a3c5e5da0b56515e.547572746c65417274436f6c6f72732e706e67.png
new file mode 100644
index 0000000..16da799
--- /dev/null
+++ b/uploads/comment.newimage.a3c5e5da0b56515e.547572746c65417274436f6c6f72732e706e67.png
Binary files differ
diff --git a/uploads/comment.newimage.a49d84e150a5fb66.547572746c65417274436f6c6f72732e706e67.png b/uploads/comment.newimage.a49d84e150a5fb66.547572746c65417274436f6c6f72732e706e67.png
new file mode 100644
index 0000000..16da799
--- /dev/null
+++ b/uploads/comment.newimage.a49d84e150a5fb66.547572746c65417274436f6c6f72732e706e67.png
Binary files differ
diff --git a/uploads/comment.newimage.a500f746bfdcdc70.7061747465726e332e706e67.png b/uploads/comment.newimage.a500f746bfdcdc70.7061747465726e332e706e67.png
new file mode 100644
index 0000000..3cc5375
--- /dev/null
+++ b/uploads/comment.newimage.a500f746bfdcdc70.7061747465726e332e706e67.png
Binary files differ
diff --git a/uploads/comment.newimage.a507c5ef26fa0fbc.72616e646f6d2e706e67.png b/uploads/comment.newimage.a507c5ef26fa0fbc.72616e646f6d2e706e67.png
new file mode 100644
index 0000000..9729094
--- /dev/null
+++ b/uploads/comment.newimage.a507c5ef26fa0fbc.72616e646f6d2e706e67.png
Binary files differ
diff --git a/uploads/comment.newimage.a6f10ba70f75e477.547572746c65417274436f6c6f72732e706e67.png b/uploads/comment.newimage.a6f10ba70f75e477.547572746c65417274436f6c6f72732e706e67.png
new file mode 100644
index 0000000..16da799
--- /dev/null
+++ b/uploads/comment.newimage.a6f10ba70f75e477.547572746c65417274436f6c6f72732e706e67.png
Binary files differ
diff --git a/uploads/comment.newimage.a7fe775f92ebe11b.72616e646f6d2e706e67.png b/uploads/comment.newimage.a7fe775f92ebe11b.72616e646f6d2e706e67.png
new file mode 100644
index 0000000..9729094
--- /dev/null
+++ b/uploads/comment.newimage.a7fe775f92ebe11b.72616e646f6d2e706e67.png
Binary files differ
diff --git a/uploads/comment.newimage.a853dd164949b8f9.72616e646f6d2e706e67.png b/uploads/comment.newimage.a853dd164949b8f9.72616e646f6d2e706e67.png
new file mode 100644
index 0000000..9729094
--- /dev/null
+++ b/uploads/comment.newimage.a853dd164949b8f9.72616e646f6d2e706e67.png
Binary files differ
diff --git a/uploads/comment.newimage.aa542b34978ab93e.7061747465726e322e706e67.png b/uploads/comment.newimage.aa542b34978ab93e.7061747465726e322e706e67.png
new file mode 100644
index 0000000..e8d34b5
--- /dev/null
+++ b/uploads/comment.newimage.aa542b34978ab93e.7061747465726e322e706e67.png
Binary files differ
diff --git a/uploads/comment.newimage.ac3b57c60b470662.72616e646f6d2e706e67.png b/uploads/comment.newimage.ac3b57c60b470662.72616e646f6d2e706e67.png
new file mode 100644
index 0000000..9729094
--- /dev/null
+++ b/uploads/comment.newimage.ac3b57c60b470662.72616e646f6d2e706e67.png
Binary files differ
diff --git a/uploads/comment.newimage.aeb94355af0dd82e.7061747465726e2e706e67.png b/uploads/comment.newimage.aeb94355af0dd82e.7061747465726e2e706e67.png
new file mode 100644
index 0000000..58cb417
--- /dev/null
+++ b/uploads/comment.newimage.aeb94355af0dd82e.7061747465726e2e706e67.png
Binary files differ
diff --git a/uploads/comment.newimage.af8e115276c5ddbe.636f6c6f72776865656c2e706e67.png b/uploads/comment.newimage.af8e115276c5ddbe.636f6c6f72776865656c2e706e67.png
new file mode 100644
index 0000000..dca40c1
--- /dev/null
+++ b/uploads/comment.newimage.af8e115276c5ddbe.636f6c6f72776865656c2e706e67.png
Binary files differ
diff --git a/uploads/comment.newimage.b27266f434f19c29.547572746c65417274436f6c6f72732e706e67.png b/uploads/comment.newimage.b27266f434f19c29.547572746c65417274436f6c6f72732e706e67.png
new file mode 100644
index 0000000..16da799
--- /dev/null
+++ b/uploads/comment.newimage.b27266f434f19c29.547572746c65417274436f6c6f72732e706e67.png
Binary files differ
diff --git a/uploads/comment.newimage.b3e4d0f0001a07d6.72616e646f6d2e706e67.png b/uploads/comment.newimage.b3e4d0f0001a07d6.72616e646f6d2e706e67.png
new file mode 100644
index 0000000..9729094
--- /dev/null
+++ b/uploads/comment.newimage.b3e4d0f0001a07d6.72616e646f6d2e706e67.png
Binary files differ
diff --git a/uploads/comment.newimage.b4e1717e79409107.72616e646f6d2e706e67.png b/uploads/comment.newimage.b4e1717e79409107.72616e646f6d2e706e67.png
new file mode 100644
index 0000000..9729094
--- /dev/null
+++ b/uploads/comment.newimage.b4e1717e79409107.72616e646f6d2e706e67.png
Binary files differ
diff --git a/uploads/comment.newimage.b86951a6c75b913e.72616e646f6d2e706e67.png b/uploads/comment.newimage.b86951a6c75b913e.72616e646f6d2e706e67.png
new file mode 100644
index 0000000..9729094
--- /dev/null
+++ b/uploads/comment.newimage.b86951a6c75b913e.72616e646f6d2e706e67.png
Binary files differ
diff --git a/uploads/comment.newimage.b9bd155018fa2da2.72616e646f6d2e706e67.png b/uploads/comment.newimage.b9bd155018fa2da2.72616e646f6d2e706e67.png
new file mode 100644
index 0000000..9729094
--- /dev/null
+++ b/uploads/comment.newimage.b9bd155018fa2da2.72616e646f6d2e706e67.png
Binary files differ
diff --git a/uploads/comment.newimage.bd7d50a1ab065911.72616e646f6d2e706e67.png b/uploads/comment.newimage.bd7d50a1ab065911.72616e646f6d2e706e67.png
new file mode 100644
index 0000000..9729094
--- /dev/null
+++ b/uploads/comment.newimage.bd7d50a1ab065911.72616e646f6d2e706e67.png
Binary files differ
diff --git a/uploads/comment.newimage.bdeb82ce001eb04a.72616e646f6d2e706e67.png b/uploads/comment.newimage.bdeb82ce001eb04a.72616e646f6d2e706e67.png
new file mode 100644
index 0000000..9729094
--- /dev/null
+++ b/uploads/comment.newimage.bdeb82ce001eb04a.72616e646f6d2e706e67.png
Binary files differ
diff --git a/uploads/image.file.838f51bdacc7a5ee.7061747465726e2e7461.ta b/uploads/image.file.838f51bdacc7a5ee.7061747465726e2e7461.ta
new file mode 100644
index 0000000..5ce5e53
--- /dev/null
+++ b/uploads/image.file.838f51bdacc7a5ee.7061747465726e2e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 17, 178, [null, 1]], [1, "clean", 17, 220, [0, 2]], [2, "stack1", 17, 254, [1, null]], [3, "hat1", 759, 63, [null, 4]], [4, "penup", 759, 105, [3, 5]], [5, "storeinbox1", 759, 139, [4, 6, 7]], [6, ["number", "0"], 877, 139, [5, null]], [7, "storein", 759, 181, [5, 9, 8, 10]], [8, ["number", "200"], 828, 223, [7, null]], [9, ["string", "size"], 828, 181, [7, null]], [10, "repeat", 759, 265, [7, 11, 12, null]], [11, ["number", "150"], 807, 265, [10, null]], [12, "forward", 821, 325, [10, 13, 36]], [13, "box1", 893, 325, [12, null]], [14, "back", 821, 401, [36, 15, 16]], [15, "box1", 879, 401, [14, null]], [16, "right", 821, 443, [14, 17, 18]], [17, ["number", "10"], 879, 443, [16, null]], [18, "storeinbox1", 821, 485, [16, 20, null]], [19, "box1", 993, 485, [20, null]], [20, "plus2", 939, 485, [18, 19, 21]], [21, ["number", "4"], 993, 527, [20, null]], [22, "setpensize", 193, 281, [49, 23, 24]], [23, ["number", "3"], 296, 281, [22, null]], [24, "setcolor", 193, 323, [22, 25, 26]], [25, ["number", "20"], 271, 323, [24, null]], [26, "setshade", 193, 365, [24, 27, 28]], [27, ["number", 50], 279, 365, [26, null]], [28, "repeat", 193, 407, [26, 29, 30, null]], [29, ["number", "20"], 241, 407, [28, null]], [30, "forward", 255, 467, [28, 31, 32]], [31, ["number", "95"], 327, 467, [30, null]], [32, "back", 255, 509, [30, 33, 34]], [33, ["number", "95"], 313, 509, [32, null]], [34, "right", 255, 551, [32, 35, null]], [35, ["number", "18"], 313, 551, [34, null]], [36, "stack2", 821, 367, [12, 14]], [37, "hat2", 490, 206, [null, 38]], [38, "pendown", 490, 248, [37, 39]], [39, "setpensize", 490, 282, [38, 40, 41]], [40, ["number", "200"], 593, 282, [39, null]], [41, "setcolor", 490, 324, [39, 42, 43]], [42, ["number", 0], 568, 324, [41, null]], [43, "setshade", 490, 366, [41, 44, 47]], [44, "random", 576, 366, [43, 45, 46, null]], [45, ["number", "10"], 664, 366, [44, null]], [46, ["number", "40"], 664, 408, [44, null]], [47, "forward", 490, 408, [43, 48, 51]], [48, ["number", "0"], 562, 408, [47, null]], [49, "hat", 193, 231, [null, 50, 22]], [50, ["string", "star"], 251, 239, [49, null]], [51, "stack", 490, 450, [47, 52, 53]], [52, ["string", "star"], 548, 450, [51, null]], [53, "penup", 490, 492, [51, null]], [-1, ["turtle", 1], 0, 0, 60.0, 20.0, 50.0, 3.0]] \ No newline at end of file
diff --git a/uploads/image.file.8ec336050d2f1968.7061747465726e2e7461.ta b/uploads/image.file.8ec336050d2f1968.7061747465726e2e7461.ta
new file mode 100644
index 0000000..5ce5e53
--- /dev/null
+++ b/uploads/image.file.8ec336050d2f1968.7061747465726e2e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 17, 178, [null, 1]], [1, "clean", 17, 220, [0, 2]], [2, "stack1", 17, 254, [1, null]], [3, "hat1", 759, 63, [null, 4]], [4, "penup", 759, 105, [3, 5]], [5, "storeinbox1", 759, 139, [4, 6, 7]], [6, ["number", "0"], 877, 139, [5, null]], [7, "storein", 759, 181, [5, 9, 8, 10]], [8, ["number", "200"], 828, 223, [7, null]], [9, ["string", "size"], 828, 181, [7, null]], [10, "repeat", 759, 265, [7, 11, 12, null]], [11, ["number", "150"], 807, 265, [10, null]], [12, "forward", 821, 325, [10, 13, 36]], [13, "box1", 893, 325, [12, null]], [14, "back", 821, 401, [36, 15, 16]], [15, "box1", 879, 401, [14, null]], [16, "right", 821, 443, [14, 17, 18]], [17, ["number", "10"], 879, 443, [16, null]], [18, "storeinbox1", 821, 485, [16, 20, null]], [19, "box1", 993, 485, [20, null]], [20, "plus2", 939, 485, [18, 19, 21]], [21, ["number", "4"], 993, 527, [20, null]], [22, "setpensize", 193, 281, [49, 23, 24]], [23, ["number", "3"], 296, 281, [22, null]], [24, "setcolor", 193, 323, [22, 25, 26]], [25, ["number", "20"], 271, 323, [24, null]], [26, "setshade", 193, 365, [24, 27, 28]], [27, ["number", 50], 279, 365, [26, null]], [28, "repeat", 193, 407, [26, 29, 30, null]], [29, ["number", "20"], 241, 407, [28, null]], [30, "forward", 255, 467, [28, 31, 32]], [31, ["number", "95"], 327, 467, [30, null]], [32, "back", 255, 509, [30, 33, 34]], [33, ["number", "95"], 313, 509, [32, null]], [34, "right", 255, 551, [32, 35, null]], [35, ["number", "18"], 313, 551, [34, null]], [36, "stack2", 821, 367, [12, 14]], [37, "hat2", 490, 206, [null, 38]], [38, "pendown", 490, 248, [37, 39]], [39, "setpensize", 490, 282, [38, 40, 41]], [40, ["number", "200"], 593, 282, [39, null]], [41, "setcolor", 490, 324, [39, 42, 43]], [42, ["number", 0], 568, 324, [41, null]], [43, "setshade", 490, 366, [41, 44, 47]], [44, "random", 576, 366, [43, 45, 46, null]], [45, ["number", "10"], 664, 366, [44, null]], [46, ["number", "40"], 664, 408, [44, null]], [47, "forward", 490, 408, [43, 48, 51]], [48, ["number", "0"], 562, 408, [47, null]], [49, "hat", 193, 231, [null, 50, 22]], [50, ["string", "star"], 251, 239, [49, null]], [51, "stack", 490, 450, [47, 52, 53]], [52, ["string", "star"], 548, 450, [51, null]], [53, "penup", 490, 492, [51, null]], [-1, ["turtle", 1], 0, 0, 60.0, 20.0, 50.0, 3.0]] \ No newline at end of file
diff --git a/uploads/image.file.9d39681cf7b07e12.7061747465726e2e7461.ta b/uploads/image.file.9d39681cf7b07e12.7061747465726e2e7461.ta
new file mode 100644
index 0000000..5ce5e53
--- /dev/null
+++ b/uploads/image.file.9d39681cf7b07e12.7061747465726e2e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 17, 178, [null, 1]], [1, "clean", 17, 220, [0, 2]], [2, "stack1", 17, 254, [1, null]], [3, "hat1", 759, 63, [null, 4]], [4, "penup", 759, 105, [3, 5]], [5, "storeinbox1", 759, 139, [4, 6, 7]], [6, ["number", "0"], 877, 139, [5, null]], [7, "storein", 759, 181, [5, 9, 8, 10]], [8, ["number", "200"], 828, 223, [7, null]], [9, ["string", "size"], 828, 181, [7, null]], [10, "repeat", 759, 265, [7, 11, 12, null]], [11, ["number", "150"], 807, 265, [10, null]], [12, "forward", 821, 325, [10, 13, 36]], [13, "box1", 893, 325, [12, null]], [14, "back", 821, 401, [36, 15, 16]], [15, "box1", 879, 401, [14, null]], [16, "right", 821, 443, [14, 17, 18]], [17, ["number", "10"], 879, 443, [16, null]], [18, "storeinbox1", 821, 485, [16, 20, null]], [19, "box1", 993, 485, [20, null]], [20, "plus2", 939, 485, [18, 19, 21]], [21, ["number", "4"], 993, 527, [20, null]], [22, "setpensize", 193, 281, [49, 23, 24]], [23, ["number", "3"], 296, 281, [22, null]], [24, "setcolor", 193, 323, [22, 25, 26]], [25, ["number", "20"], 271, 323, [24, null]], [26, "setshade", 193, 365, [24, 27, 28]], [27, ["number", 50], 279, 365, [26, null]], [28, "repeat", 193, 407, [26, 29, 30, null]], [29, ["number", "20"], 241, 407, [28, null]], [30, "forward", 255, 467, [28, 31, 32]], [31, ["number", "95"], 327, 467, [30, null]], [32, "back", 255, 509, [30, 33, 34]], [33, ["number", "95"], 313, 509, [32, null]], [34, "right", 255, 551, [32, 35, null]], [35, ["number", "18"], 313, 551, [34, null]], [36, "stack2", 821, 367, [12, 14]], [37, "hat2", 490, 206, [null, 38]], [38, "pendown", 490, 248, [37, 39]], [39, "setpensize", 490, 282, [38, 40, 41]], [40, ["number", "200"], 593, 282, [39, null]], [41, "setcolor", 490, 324, [39, 42, 43]], [42, ["number", 0], 568, 324, [41, null]], [43, "setshade", 490, 366, [41, 44, 47]], [44, "random", 576, 366, [43, 45, 46, null]], [45, ["number", "10"], 664, 366, [44, null]], [46, ["number", "40"], 664, 408, [44, null]], [47, "forward", 490, 408, [43, 48, 51]], [48, ["number", "0"], 562, 408, [47, null]], [49, "hat", 193, 231, [null, 50, 22]], [50, ["string", "star"], 251, 239, [49, null]], [51, "stack", 490, 450, [47, 52, 53]], [52, ["string", "star"], 548, 450, [51, null]], [53, "penup", 490, 492, [51, null]], [-1, ["turtle", 1], 0, 0, 60.0, 20.0, 50.0, 3.0]] \ No newline at end of file
diff --git a/uploads/image.file.a11d74583031ce9b.7061747465726e2e7461.ta b/uploads/image.file.a11d74583031ce9b.7061747465726e2e7461.ta
new file mode 100644
index 0000000..5ce5e53
--- /dev/null
+++ b/uploads/image.file.a11d74583031ce9b.7061747465726e2e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 17, 178, [null, 1]], [1, "clean", 17, 220, [0, 2]], [2, "stack1", 17, 254, [1, null]], [3, "hat1", 759, 63, [null, 4]], [4, "penup", 759, 105, [3, 5]], [5, "storeinbox1", 759, 139, [4, 6, 7]], [6, ["number", "0"], 877, 139, [5, null]], [7, "storein", 759, 181, [5, 9, 8, 10]], [8, ["number", "200"], 828, 223, [7, null]], [9, ["string", "size"], 828, 181, [7, null]], [10, "repeat", 759, 265, [7, 11, 12, null]], [11, ["number", "150"], 807, 265, [10, null]], [12, "forward", 821, 325, [10, 13, 36]], [13, "box1", 893, 325, [12, null]], [14, "back", 821, 401, [36, 15, 16]], [15, "box1", 879, 401, [14, null]], [16, "right", 821, 443, [14, 17, 18]], [17, ["number", "10"], 879, 443, [16, null]], [18, "storeinbox1", 821, 485, [16, 20, null]], [19, "box1", 993, 485, [20, null]], [20, "plus2", 939, 485, [18, 19, 21]], [21, ["number", "4"], 993, 527, [20, null]], [22, "setpensize", 193, 281, [49, 23, 24]], [23, ["number", "3"], 296, 281, [22, null]], [24, "setcolor", 193, 323, [22, 25, 26]], [25, ["number", "20"], 271, 323, [24, null]], [26, "setshade", 193, 365, [24, 27, 28]], [27, ["number", 50], 279, 365, [26, null]], [28, "repeat", 193, 407, [26, 29, 30, null]], [29, ["number", "20"], 241, 407, [28, null]], [30, "forward", 255, 467, [28, 31, 32]], [31, ["number", "95"], 327, 467, [30, null]], [32, "back", 255, 509, [30, 33, 34]], [33, ["number", "95"], 313, 509, [32, null]], [34, "right", 255, 551, [32, 35, null]], [35, ["number", "18"], 313, 551, [34, null]], [36, "stack2", 821, 367, [12, 14]], [37, "hat2", 490, 206, [null, 38]], [38, "pendown", 490, 248, [37, 39]], [39, "setpensize", 490, 282, [38, 40, 41]], [40, ["number", "200"], 593, 282, [39, null]], [41, "setcolor", 490, 324, [39, 42, 43]], [42, ["number", 0], 568, 324, [41, null]], [43, "setshade", 490, 366, [41, 44, 47]], [44, "random", 576, 366, [43, 45, 46, null]], [45, ["number", "10"], 664, 366, [44, null]], [46, ["number", "40"], 664, 408, [44, null]], [47, "forward", 490, 408, [43, 48, 51]], [48, ["number", "0"], 562, 408, [47, null]], [49, "hat", 193, 231, [null, 50, 22]], [50, ["string", "star"], 251, 239, [49, null]], [51, "stack", 490, 450, [47, 52, 53]], [52, ["string", "star"], 548, 450, [51, null]], [53, "penup", 490, 492, [51, null]], [-1, ["turtle", 1], 0, 0, 60.0, 20.0, 50.0, 3.0]] \ No newline at end of file
diff --git a/uploads/image.file.a65380ec655637c3.7061747465726e2e7461.ta b/uploads/image.file.a65380ec655637c3.7061747465726e2e7461.ta
new file mode 100644
index 0000000..5ce5e53
--- /dev/null
+++ b/uploads/image.file.a65380ec655637c3.7061747465726e2e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 17, 178, [null, 1]], [1, "clean", 17, 220, [0, 2]], [2, "stack1", 17, 254, [1, null]], [3, "hat1", 759, 63, [null, 4]], [4, "penup", 759, 105, [3, 5]], [5, "storeinbox1", 759, 139, [4, 6, 7]], [6, ["number", "0"], 877, 139, [5, null]], [7, "storein", 759, 181, [5, 9, 8, 10]], [8, ["number", "200"], 828, 223, [7, null]], [9, ["string", "size"], 828, 181, [7, null]], [10, "repeat", 759, 265, [7, 11, 12, null]], [11, ["number", "150"], 807, 265, [10, null]], [12, "forward", 821, 325, [10, 13, 36]], [13, "box1", 893, 325, [12, null]], [14, "back", 821, 401, [36, 15, 16]], [15, "box1", 879, 401, [14, null]], [16, "right", 821, 443, [14, 17, 18]], [17, ["number", "10"], 879, 443, [16, null]], [18, "storeinbox1", 821, 485, [16, 20, null]], [19, "box1", 993, 485, [20, null]], [20, "plus2", 939, 485, [18, 19, 21]], [21, ["number", "4"], 993, 527, [20, null]], [22, "setpensize", 193, 281, [49, 23, 24]], [23, ["number", "3"], 296, 281, [22, null]], [24, "setcolor", 193, 323, [22, 25, 26]], [25, ["number", "20"], 271, 323, [24, null]], [26, "setshade", 193, 365, [24, 27, 28]], [27, ["number", 50], 279, 365, [26, null]], [28, "repeat", 193, 407, [26, 29, 30, null]], [29, ["number", "20"], 241, 407, [28, null]], [30, "forward", 255, 467, [28, 31, 32]], [31, ["number", "95"], 327, 467, [30, null]], [32, "back", 255, 509, [30, 33, 34]], [33, ["number", "95"], 313, 509, [32, null]], [34, "right", 255, 551, [32, 35, null]], [35, ["number", "18"], 313, 551, [34, null]], [36, "stack2", 821, 367, [12, 14]], [37, "hat2", 490, 206, [null, 38]], [38, "pendown", 490, 248, [37, 39]], [39, "setpensize", 490, 282, [38, 40, 41]], [40, ["number", "200"], 593, 282, [39, null]], [41, "setcolor", 490, 324, [39, 42, 43]], [42, ["number", 0], 568, 324, [41, null]], [43, "setshade", 490, 366, [41, 44, 47]], [44, "random", 576, 366, [43, 45, 46, null]], [45, ["number", "10"], 664, 366, [44, null]], [46, ["number", "40"], 664, 408, [44, null]], [47, "forward", 490, 408, [43, 48, 51]], [48, ["number", "0"], 562, 408, [47, null]], [49, "hat", 193, 231, [null, 50, 22]], [50, ["string", "star"], 251, 239, [49, null]], [51, "stack", 490, 450, [47, 52, 53]], [52, ["string", "star"], 548, 450, [51, null]], [53, "penup", 490, 492, [51, null]], [-1, ["turtle", 1], 0, 0, 60.0, 20.0, 50.0, 3.0]] \ No newline at end of file
diff --git a/uploads/image.file.b0a7b723ca312329.636f6c6f72732e7461.ta b/uploads/image.file.b0a7b723ca312329.636f6c6f72732e7461.ta
new file mode 100644
index 0000000..69084cb
--- /dev/null
+++ b/uploads/image.file.b0a7b723ca312329.636f6c6f72732e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 71, 77, [null, 2]], [1, "setxy", 936, 433, [9, 34, 13, 5]], [2, "clean", 71, 105, [0, 31]], [3, "seth", 887, 197, [21, 4, 83]], [4, ["number", 90], 966, 197, [3, null]], [5, "forward", 936, 489, [1, 6, 15]], [6, ["number", 50], 987, 489, [5, null]], [7, "setpensize", 887, 253, [83, 8, 104]], [8, ["number", 1], 968, 253, [7, null]], [9, "repeat", 887, 393, [11, 10, 1, 71]], [10, ["number", 50], 926, 393, [9, null]], [11, "storein", 887, 337, [25, 12, 39, 9]], [12, ["string", "y-start"], 936, 337, [11, null]], [13, "box", 976, 461, [1, 14, null]], [14, ["string", "y-start"], 1014, 461, [13, null]], [15, "storein", 936, 517, [5, 16, 17, null]], [16, ["string", "y-start"], 985, 517, [15, null]], [17, "plus2", 985, 545, [15, 18, 20]], [18, "box", 1021, 545, [17, 19, null]], [19, ["string", "y-start"], 1059, 545, [18, null]], [20, ["number", 1], 1021, 573, [17, null]], [21, "hat", 887, 163, [null, 22, 3]], [22, ["string", "fill box"], 926, 169, [21, null]], [23, "stack", 169, 518, [56, 24, null]], [24, ["string", "fill box"], 208, 518, [23, null]], [25, "setcolor", 887, 309, [104, 29, 11]], [26, "storein", 71, 240, [36, 27, 28, 57]], [27, ["string", "my color"], 120, 240, [26, null]], [28, ["number", 0], 120, 268, [26, null]], [29, "box", 943, 309, [25, 30, null]], [30, ["string", "my color"], 981, 309, [29, null]], [31, "storein", 71, 128, [2, 32, 33, 36]], [32, ["string", "lower left x"], 120, 128, [31, null]], [33, ["number", -300], 120, 156, [31, null]], [34, "box", 976, 433, [1, 35, null]], [35, ["string", "lower left x"], 1014, 433, [34, null]], [36, "storein", 71, 184, [31, 37, 38, 26]], [37, ["string", "lower left y"], 120, 184, [36, null]], [38, ["number", 200], 120, 212, [36, null]], [39, "box", 936, 365, [11, 40, null]], [40, ["string", "lower left y"], 974, 365, [39, null]], [41, "repeat", 120, 336, [57, 42, 43, 60]], [42, ["number", 10], 159, 336, [41, null]], [43, "storein", 169, 376, [41, 44, 46, 51]], [44, ["string", "my color"], 218, 376, [43, null]], [45, ["number", 50], 254, 488, [53, null]], [46, ["identity2", 31.684029669145687], 218, 404, [43, 47]], [47, "plus2", 296, 404, [46, 48, 50]], [48, "box", 332, 404, [47, 49, null]], [49, ["string", "my color"], 370, 404, [48, null]], [50, ["number", 1], 332, 432, [47, null]], [51, "storein", 169, 432, [43, 52, 53, 56]], [52, ["string", "lower left x"], 218, 432, [51, null]], [53, "plus2", 218, 460, [51, 54, 45]], [54, "box", 254, 460, [53, 55, null]], [55, ["string", "lower left x"], 292, 460, [54, null]], [56, ["vspace", 5.2806716115242818], 169, 488, [51, 23]], [57, "repeat", 71, 296, [26, 58, 41, 59]], [58, ["number", 10], 110, 296, [57, null]], [59, ["vspace", 110.83868449976003], 71, 348, [57, 95]], [60, ["vspace", 47.518127454825695], 120, 388, [41, 61]], [61, "storein", 120, 474, [60, 62, 63, 67]], [62, ["string", "lower left y"], 169, 474, [61, null]], [63, "minus2", 169, 502, [61, 64, 66]], [64, "box", 205, 502, [63, 65, null]], [65, ["string", "lower left y"], 243, 502, [64, null]], [66, ["number", 50], 221, 530, [63, null]], [67, ["vspace", 5.2806716115242818], 120, 530, [61, 68]], [68, "storein", 120, 560, [67, 69, 70, null]], [69, ["string", "lower left x"], 169, 560, [68, null]], [70, ["number", -300], 169, 588, [68, null]], [71, ["vspace", 63.324521504200021], 887, 445, [9, 72]], [72, "setxy", 887, 552, [71, 74, 75, 82]], [73, "plus2", 1087, 552, [74, 79, 78]], [74, ["identity2", 92.971924464200001], 927, 552, [72, 73]], [75, "plus2", 927, 580, [72, 76, 81]], [76, "box", 963, 580, [75, 77, null]], [77, ["string", "lower left y"], 1001, 580, [76, null]], [78, ["number", 5], 1123, 580, [73, null]], [79, "box", 1123, 552, [73, 80, null]], [80, ["string", "lower left x"], 1161, 552, [79, null]], [81, ["number", -25], 963, 608, [75, null]], [82, ["vspace", 7.9170488928400022], 887, 608, [72, 85]], [83, "setshade", 887, 225, [3, 84, 7]], [84, ["number", 0], 952, 225, [83, null]], [85, "setshade", 887, 641, [82, 86, 91]], [86, ["number", 0], 952, 641, [85, null]], [87, "box", 1030, 669, [93, 88, null]], [88, ["string", "my color"], 1068, 669, [87, null]], [89, "setshade", 887, 697, [91, 90, null]], [90, ["number", 50], 952, 697, [89, null]], [91, "show", 887, 669, [85, 92, 89]], [92, ["identity2", 23.751146678520005], 926, 669, [91, 93]], [93, "minus2", 994, 669, [92, 87, 94]], [94, ["number", 1], 1046, 697, [93, null]], [95, "setxy", 71, 519, [59, 96, 97, 100]], [96, ["number", -90], 111, 519, [95, null]], [97, ["number", 250], 111, 547, [95, null]], [98, "show", 71, 603, [100, 99, 102]], [99, ["string", "Colors in TurtleArt"], 110, 603, [98, null]], [100, "setshade", 71, 575, [95, 101, 98]], [101, ["number", 0], 136, 575, [100, null]], [102, "savesvg", 71, 631, [98, 103, null]], [103, ["string", "TurtleArtColors"], 134, 631, [102, null]], [104, "setgray", 887, 281, [7, 105, 25]], [105, ["number", 0], 942, 281, [104, null]], [-1, ["turtle", 1], -90, 250, 90.0, 100.0, 0.0, 1.0], 1.3340000000000001] \ No newline at end of file
diff --git a/uploads/image.file.b776db7abedaa85f.7061747465726e2e7461.ta b/uploads/image.file.b776db7abedaa85f.7061747465726e2e7461.ta
new file mode 100644
index 0000000..5ce5e53
--- /dev/null
+++ b/uploads/image.file.b776db7abedaa85f.7061747465726e2e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 17, 178, [null, 1]], [1, "clean", 17, 220, [0, 2]], [2, "stack1", 17, 254, [1, null]], [3, "hat1", 759, 63, [null, 4]], [4, "penup", 759, 105, [3, 5]], [5, "storeinbox1", 759, 139, [4, 6, 7]], [6, ["number", "0"], 877, 139, [5, null]], [7, "storein", 759, 181, [5, 9, 8, 10]], [8, ["number", "200"], 828, 223, [7, null]], [9, ["string", "size"], 828, 181, [7, null]], [10, "repeat", 759, 265, [7, 11, 12, null]], [11, ["number", "150"], 807, 265, [10, null]], [12, "forward", 821, 325, [10, 13, 36]], [13, "box1", 893, 325, [12, null]], [14, "back", 821, 401, [36, 15, 16]], [15, "box1", 879, 401, [14, null]], [16, "right", 821, 443, [14, 17, 18]], [17, ["number", "10"], 879, 443, [16, null]], [18, "storeinbox1", 821, 485, [16, 20, null]], [19, "box1", 993, 485, [20, null]], [20, "plus2", 939, 485, [18, 19, 21]], [21, ["number", "4"], 993, 527, [20, null]], [22, "setpensize", 193, 281, [49, 23, 24]], [23, ["number", "3"], 296, 281, [22, null]], [24, "setcolor", 193, 323, [22, 25, 26]], [25, ["number", "20"], 271, 323, [24, null]], [26, "setshade", 193, 365, [24, 27, 28]], [27, ["number", 50], 279, 365, [26, null]], [28, "repeat", 193, 407, [26, 29, 30, null]], [29, ["number", "20"], 241, 407, [28, null]], [30, "forward", 255, 467, [28, 31, 32]], [31, ["number", "95"], 327, 467, [30, null]], [32, "back", 255, 509, [30, 33, 34]], [33, ["number", "95"], 313, 509, [32, null]], [34, "right", 255, 551, [32, 35, null]], [35, ["number", "18"], 313, 551, [34, null]], [36, "stack2", 821, 367, [12, 14]], [37, "hat2", 490, 206, [null, 38]], [38, "pendown", 490, 248, [37, 39]], [39, "setpensize", 490, 282, [38, 40, 41]], [40, ["number", "200"], 593, 282, [39, null]], [41, "setcolor", 490, 324, [39, 42, 43]], [42, ["number", 0], 568, 324, [41, null]], [43, "setshade", 490, 366, [41, 44, 47]], [44, "random", 576, 366, [43, 45, 46, null]], [45, ["number", "10"], 664, 366, [44, null]], [46, ["number", "40"], 664, 408, [44, null]], [47, "forward", 490, 408, [43, 48, 51]], [48, ["number", "0"], 562, 408, [47, null]], [49, "hat", 193, 231, [null, 50, 22]], [50, ["string", "star"], 251, 239, [49, null]], [51, "stack", 490, 450, [47, 52, 53]], [52, ["string", "star"], 548, 450, [51, null]], [53, "penup", 490, 492, [51, null]], [-1, ["turtle", 1], 0, 0, 60.0, 20.0, 50.0, 3.0]] \ No newline at end of file
diff --git a/uploads/image.file.bbed5a50205cb9a6.636f6c6f7273322e7461.ta b/uploads/image.file.bbed5a50205cb9a6.636f6c6f7273322e7461.ta
new file mode 100644
index 0000000..69084cb
--- /dev/null
+++ b/uploads/image.file.bbed5a50205cb9a6.636f6c6f7273322e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 71, 77, [null, 2]], [1, "setxy", 936, 433, [9, 34, 13, 5]], [2, "clean", 71, 105, [0, 31]], [3, "seth", 887, 197, [21, 4, 83]], [4, ["number", 90], 966, 197, [3, null]], [5, "forward", 936, 489, [1, 6, 15]], [6, ["number", 50], 987, 489, [5, null]], [7, "setpensize", 887, 253, [83, 8, 104]], [8, ["number", 1], 968, 253, [7, null]], [9, "repeat", 887, 393, [11, 10, 1, 71]], [10, ["number", 50], 926, 393, [9, null]], [11, "storein", 887, 337, [25, 12, 39, 9]], [12, ["string", "y-start"], 936, 337, [11, null]], [13, "box", 976, 461, [1, 14, null]], [14, ["string", "y-start"], 1014, 461, [13, null]], [15, "storein", 936, 517, [5, 16, 17, null]], [16, ["string", "y-start"], 985, 517, [15, null]], [17, "plus2", 985, 545, [15, 18, 20]], [18, "box", 1021, 545, [17, 19, null]], [19, ["string", "y-start"], 1059, 545, [18, null]], [20, ["number", 1], 1021, 573, [17, null]], [21, "hat", 887, 163, [null, 22, 3]], [22, ["string", "fill box"], 926, 169, [21, null]], [23, "stack", 169, 518, [56, 24, null]], [24, ["string", "fill box"], 208, 518, [23, null]], [25, "setcolor", 887, 309, [104, 29, 11]], [26, "storein", 71, 240, [36, 27, 28, 57]], [27, ["string", "my color"], 120, 240, [26, null]], [28, ["number", 0], 120, 268, [26, null]], [29, "box", 943, 309, [25, 30, null]], [30, ["string", "my color"], 981, 309, [29, null]], [31, "storein", 71, 128, [2, 32, 33, 36]], [32, ["string", "lower left x"], 120, 128, [31, null]], [33, ["number", -300], 120, 156, [31, null]], [34, "box", 976, 433, [1, 35, null]], [35, ["string", "lower left x"], 1014, 433, [34, null]], [36, "storein", 71, 184, [31, 37, 38, 26]], [37, ["string", "lower left y"], 120, 184, [36, null]], [38, ["number", 200], 120, 212, [36, null]], [39, "box", 936, 365, [11, 40, null]], [40, ["string", "lower left y"], 974, 365, [39, null]], [41, "repeat", 120, 336, [57, 42, 43, 60]], [42, ["number", 10], 159, 336, [41, null]], [43, "storein", 169, 376, [41, 44, 46, 51]], [44, ["string", "my color"], 218, 376, [43, null]], [45, ["number", 50], 254, 488, [53, null]], [46, ["identity2", 31.684029669145687], 218, 404, [43, 47]], [47, "plus2", 296, 404, [46, 48, 50]], [48, "box", 332, 404, [47, 49, null]], [49, ["string", "my color"], 370, 404, [48, null]], [50, ["number", 1], 332, 432, [47, null]], [51, "storein", 169, 432, [43, 52, 53, 56]], [52, ["string", "lower left x"], 218, 432, [51, null]], [53, "plus2", 218, 460, [51, 54, 45]], [54, "box", 254, 460, [53, 55, null]], [55, ["string", "lower left x"], 292, 460, [54, null]], [56, ["vspace", 5.2806716115242818], 169, 488, [51, 23]], [57, "repeat", 71, 296, [26, 58, 41, 59]], [58, ["number", 10], 110, 296, [57, null]], [59, ["vspace", 110.83868449976003], 71, 348, [57, 95]], [60, ["vspace", 47.518127454825695], 120, 388, [41, 61]], [61, "storein", 120, 474, [60, 62, 63, 67]], [62, ["string", "lower left y"], 169, 474, [61, null]], [63, "minus2", 169, 502, [61, 64, 66]], [64, "box", 205, 502, [63, 65, null]], [65, ["string", "lower left y"], 243, 502, [64, null]], [66, ["number", 50], 221, 530, [63, null]], [67, ["vspace", 5.2806716115242818], 120, 530, [61, 68]], [68, "storein", 120, 560, [67, 69, 70, null]], [69, ["string", "lower left x"], 169, 560, [68, null]], [70, ["number", -300], 169, 588, [68, null]], [71, ["vspace", 63.324521504200021], 887, 445, [9, 72]], [72, "setxy", 887, 552, [71, 74, 75, 82]], [73, "plus2", 1087, 552, [74, 79, 78]], [74, ["identity2", 92.971924464200001], 927, 552, [72, 73]], [75, "plus2", 927, 580, [72, 76, 81]], [76, "box", 963, 580, [75, 77, null]], [77, ["string", "lower left y"], 1001, 580, [76, null]], [78, ["number", 5], 1123, 580, [73, null]], [79, "box", 1123, 552, [73, 80, null]], [80, ["string", "lower left x"], 1161, 552, [79, null]], [81, ["number", -25], 963, 608, [75, null]], [82, ["vspace", 7.9170488928400022], 887, 608, [72, 85]], [83, "setshade", 887, 225, [3, 84, 7]], [84, ["number", 0], 952, 225, [83, null]], [85, "setshade", 887, 641, [82, 86, 91]], [86, ["number", 0], 952, 641, [85, null]], [87, "box", 1030, 669, [93, 88, null]], [88, ["string", "my color"], 1068, 669, [87, null]], [89, "setshade", 887, 697, [91, 90, null]], [90, ["number", 50], 952, 697, [89, null]], [91, "show", 887, 669, [85, 92, 89]], [92, ["identity2", 23.751146678520005], 926, 669, [91, 93]], [93, "minus2", 994, 669, [92, 87, 94]], [94, ["number", 1], 1046, 697, [93, null]], [95, "setxy", 71, 519, [59, 96, 97, 100]], [96, ["number", -90], 111, 519, [95, null]], [97, ["number", 250], 111, 547, [95, null]], [98, "show", 71, 603, [100, 99, 102]], [99, ["string", "Colors in TurtleArt"], 110, 603, [98, null]], [100, "setshade", 71, 575, [95, 101, 98]], [101, ["number", 0], 136, 575, [100, null]], [102, "savesvg", 71, 631, [98, 103, null]], [103, ["string", "TurtleArtColors"], 134, 631, [102, null]], [104, "setgray", 887, 281, [7, 105, 25]], [105, ["number", 0], 942, 281, [104, null]], [-1, ["turtle", 1], -90, 250, 90.0, 100.0, 0.0, 1.0], 1.3340000000000001] \ No newline at end of file
diff --git a/uploads/image.file.beebcae39552bd52.7061747465726e2e7461.ta b/uploads/image.file.beebcae39552bd52.7061747465726e2e7461.ta
new file mode 100644
index 0000000..5ce5e53
--- /dev/null
+++ b/uploads/image.file.beebcae39552bd52.7061747465726e2e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 17, 178, [null, 1]], [1, "clean", 17, 220, [0, 2]], [2, "stack1", 17, 254, [1, null]], [3, "hat1", 759, 63, [null, 4]], [4, "penup", 759, 105, [3, 5]], [5, "storeinbox1", 759, 139, [4, 6, 7]], [6, ["number", "0"], 877, 139, [5, null]], [7, "storein", 759, 181, [5, 9, 8, 10]], [8, ["number", "200"], 828, 223, [7, null]], [9, ["string", "size"], 828, 181, [7, null]], [10, "repeat", 759, 265, [7, 11, 12, null]], [11, ["number", "150"], 807, 265, [10, null]], [12, "forward", 821, 325, [10, 13, 36]], [13, "box1", 893, 325, [12, null]], [14, "back", 821, 401, [36, 15, 16]], [15, "box1", 879, 401, [14, null]], [16, "right", 821, 443, [14, 17, 18]], [17, ["number", "10"], 879, 443, [16, null]], [18, "storeinbox1", 821, 485, [16, 20, null]], [19, "box1", 993, 485, [20, null]], [20, "plus2", 939, 485, [18, 19, 21]], [21, ["number", "4"], 993, 527, [20, null]], [22, "setpensize", 193, 281, [49, 23, 24]], [23, ["number", "3"], 296, 281, [22, null]], [24, "setcolor", 193, 323, [22, 25, 26]], [25, ["number", "20"], 271, 323, [24, null]], [26, "setshade", 193, 365, [24, 27, 28]], [27, ["number", 50], 279, 365, [26, null]], [28, "repeat", 193, 407, [26, 29, 30, null]], [29, ["number", "20"], 241, 407, [28, null]], [30, "forward", 255, 467, [28, 31, 32]], [31, ["number", "95"], 327, 467, [30, null]], [32, "back", 255, 509, [30, 33, 34]], [33, ["number", "95"], 313, 509, [32, null]], [34, "right", 255, 551, [32, 35, null]], [35, ["number", "18"], 313, 551, [34, null]], [36, "stack2", 821, 367, [12, 14]], [37, "hat2", 490, 206, [null, 38]], [38, "pendown", 490, 248, [37, 39]], [39, "setpensize", 490, 282, [38, 40, 41]], [40, ["number", "200"], 593, 282, [39, null]], [41, "setcolor", 490, 324, [39, 42, 43]], [42, ["number", 0], 568, 324, [41, null]], [43, "setshade", 490, 366, [41, 44, 47]], [44, "random", 576, 366, [43, 45, 46, null]], [45, ["number", "10"], 664, 366, [44, null]], [46, ["number", "40"], 664, 408, [44, null]], [47, "forward", 490, 408, [43, 48, 51]], [48, ["number", "0"], 562, 408, [47, null]], [49, "hat", 193, 231, [null, 50, 22]], [50, ["string", "star"], 251, 239, [49, null]], [51, "stack", 490, 450, [47, 52, 53]], [52, ["string", "star"], 548, 450, [51, null]], [53, "penup", 490, 492, [51, null]], [-1, ["turtle", 1], 0, 0, 60.0, 20.0, 50.0, 3.0]] \ No newline at end of file
diff --git a/uploads/image.file.bf08ced37b80d52e.7061747465726e2e7461.ta b/uploads/image.file.bf08ced37b80d52e.7061747465726e2e7461.ta
new file mode 100644
index 0000000..5ce5e53
--- /dev/null
+++ b/uploads/image.file.bf08ced37b80d52e.7061747465726e2e7461.ta
@@ -0,0 +1 @@
+[[0, "start", 17, 178, [null, 1]], [1, "clean", 17, 220, [0, 2]], [2, "stack1", 17, 254, [1, null]], [3, "hat1", 759, 63, [null, 4]], [4, "penup", 759, 105, [3, 5]], [5, "storeinbox1", 759, 139, [4, 6, 7]], [6, ["number", "0"], 877, 139, [5, null]], [7, "storein", 759, 181, [5, 9, 8, 10]], [8, ["number", "200"], 828, 223, [7, null]], [9, ["string", "size"], 828, 181, [7, null]], [10, "repeat", 759, 265, [7, 11, 12, null]], [11, ["number", "150"], 807, 265, [10, null]], [12, "forward", 821, 325, [10, 13, 36]], [13, "box1", 893, 325, [12, null]], [14, "back", 821, 401, [36, 15, 16]], [15, "box1", 879, 401, [14, null]], [16, "right", 821, 443, [14, 17, 18]], [17, ["number", "10"], 879, 443, [16, null]], [18, "storeinbox1", 821, 485, [16, 20, null]], [19, "box1", 993, 485, [20, null]], [20, "plus2", 939, 485, [18, 19, 21]], [21, ["number", "4"], 993, 527, [20, null]], [22, "setpensize", 193, 281, [49, 23, 24]], [23, ["number", "3"], 296, 281, [22, null]], [24, "setcolor", 193, 323, [22, 25, 26]], [25, ["number", "20"], 271, 323, [24, null]], [26, "setshade", 193, 365, [24, 27, 28]], [27, ["number", 50], 279, 365, [26, null]], [28, "repeat", 193, 407, [26, 29, 30, null]], [29, ["number", "20"], 241, 407, [28, null]], [30, "forward", 255, 467, [28, 31, 32]], [31, ["number", "95"], 327, 467, [30, null]], [32, "back", 255, 509, [30, 33, 34]], [33, ["number", "95"], 313, 509, [32, null]], [34, "right", 255, 551, [32, 35, null]], [35, ["number", "18"], 313, 551, [34, null]], [36, "stack2", 821, 367, [12, 14]], [37, "hat2", 490, 206, [null, 38]], [38, "pendown", 490, 248, [37, 39]], [39, "setpensize", 490, 282, [38, 40, 41]], [40, ["number", "200"], 593, 282, [39, null]], [41, "setcolor", 490, 324, [39, 42, 43]], [42, ["number", 0], 568, 324, [41, null]], [43, "setshade", 490, 366, [41, 44, 47]], [44, "random", 576, 366, [43, 45, 46, null]], [45, ["number", "10"], 664, 366, [44, null]], [46, ["number", "40"], 664, 408, [44, null]], [47, "forward", 490, 408, [43, 48, 51]], [48, ["number", "0"], 562, 408, [47, null]], [49, "hat", 193, 231, [null, 50, 22]], [50, ["string", "star"], 251, 239, [49, null]], [51, "stack", 490, 450, [47, 52, 53]], [52, ["string", "star"], 548, 450, [51, null]], [53, "penup", 490, 492, [51, null]], [-1, ["turtle", 1], 0, 0, 60.0, 20.0, 50.0, 3.0]] \ No newline at end of file
diff --git a/uploads/image.newimage.89e5872d246ba62d.7061747465726e2e706e67.png b/uploads/image.newimage.89e5872d246ba62d.7061747465726e2e706e67.png
new file mode 100644
index 0000000..00d4101
--- /dev/null
+++ b/uploads/image.newimage.89e5872d246ba62d.7061747465726e2e706e67.png
Binary files differ
diff --git a/uploads/image.newimage.8c15b9ce81f24314.7061747465726e2e706e67.png b/uploads/image.newimage.8c15b9ce81f24314.7061747465726e2e706e67.png
new file mode 100644
index 0000000..00d4101
--- /dev/null
+++ b/uploads/image.newimage.8c15b9ce81f24314.7061747465726e2e706e67.png
Binary files differ
diff --git a/uploads/image.newimage.979840aad8ca92c4.7061747465726e2e706e67.png b/uploads/image.newimage.979840aad8ca92c4.7061747465726e2e706e67.png
new file mode 100644
index 0000000..00d4101
--- /dev/null
+++ b/uploads/image.newimage.979840aad8ca92c4.7061747465726e2e706e67.png
Binary files differ
diff --git a/uploads/image.newimage.99038a85fdbc0f25.7061747465726e322e706e67.png b/uploads/image.newimage.99038a85fdbc0f25.7061747465726e322e706e67.png
new file mode 100644
index 0000000..32d6af9
--- /dev/null
+++ b/uploads/image.newimage.99038a85fdbc0f25.7061747465726e322e706e67.png
Binary files differ
diff --git a/uploads/image.newimage.9fa7d3e5e29db916.7061747465726e2e706e67.png b/uploads/image.newimage.9fa7d3e5e29db916.7061747465726e2e706e67.png
new file mode 100644
index 0000000..00d4101
--- /dev/null
+++ b/uploads/image.newimage.9fa7d3e5e29db916.7061747465726e2e706e67.png
Binary files differ
diff --git a/uploads/image.newimage.a8d21af43048bb9c.7061747465726e2e706e67.png b/uploads/image.newimage.a8d21af43048bb9c.7061747465726e2e706e67.png
new file mode 100644
index 0000000..00d4101
--- /dev/null
+++ b/uploads/image.newimage.a8d21af43048bb9c.7061747465726e2e706e67.png
Binary files differ
diff --git a/uploads/image.newimage.b117d7d8603fdef0.7061747465726e2e706e67.png b/uploads/image.newimage.b117d7d8603fdef0.7061747465726e2e706e67.png
new file mode 100644
index 0000000..00d4101
--- /dev/null
+++ b/uploads/image.newimage.b117d7d8603fdef0.7061747465726e2e706e67.png
Binary files differ
diff --git a/uploads/image.newimage.b3362909ab39b2c7.636f6c6f72732e706e67.png b/uploads/image.newimage.b3362909ab39b2c7.636f6c6f72732e706e67.png
new file mode 100644
index 0000000..dea2e16
--- /dev/null
+++ b/uploads/image.newimage.b3362909ab39b2c7.636f6c6f72732e706e67.png
Binary files differ
diff --git a/uploads/image.newimage.bd3cc8032ddc3ff0.636f6c6f72732e706e67.png b/uploads/image.newimage.bd3cc8032ddc3ff0.636f6c6f72732e706e67.png
new file mode 100644
index 0000000..dea2e16
--- /dev/null
+++ b/uploads/image.newimage.bd3cc8032ddc3ff0.636f6c6f72732e706e67.png
Binary files differ
diff --git a/uploads/image.newimage.bdefee79db56d74a.7061747465726e322e706e67.png b/uploads/image.newimage.bdefee79db56d74a.7061747465726e322e706e67.png
new file mode 100644
index 0000000..32d6af9
--- /dev/null
+++ b/uploads/image.newimage.bdefee79db56d74a.7061747465726e322e706e67.png
Binary files differ
diff --git a/views/appadmin.html b/views/appadmin.html
new file mode 100644
index 0000000..cdd48f7
--- /dev/null
+++ b/views/appadmin.html
@@ -0,0 +1,198 @@
+{{extend 'layout.html'}}
+<script><!--
+jQuery(document).ready(function(){
+ jQuery("table.sortable tbody tr").mouseover( function() {
+ jQuery(this).addClass("highlight"); }).mouseout( function() {
+ jQuery(this).removeClass("highlight"); });
+ jQuery('table.sortable tbody tr:odd').addClass('odd');
+ jQuery('table.sortable tbody tr:even').addClass('even');
+});
+//--></script>
+
+{{if request.function=='index':}}
+ <h1>{{=T("Available databases and tables")}}</h1>
+ {{if not databases:}}{{=T("No databases in this application")}}{{pass}}
+ {{for db in sorted(databases):}}
+ {{for table in databases[db].tables:}}
+ {{qry='%s.%s.id>0'%(db,table)}}
+ {{tbl=databases[db][table]}}
+ {{if hasattr(tbl,'_primarykey'):}}
+ {{if tbl._primarykey:}}
+ {{firstkey=tbl[tbl._primarykey[0]]}}
+ {{if firstkey.type in ['string','text']:}}
+ {{qry='%s.%s.%s!=""'%(db,table,firstkey.name)}}
+ {{else:}}
+ {{qry='%s.%s.%s>0'%(db,table,firstkey.name)}}
+ {{pass}}
+ {{else:}}
+ {{qry=''}}
+ {{pass}}
+ {{pass}}
+ <h2>{{=A("%s.%s" % (db,table),_href=URL(r=request,f='select',args=[db],vars=dict(query=qry)))}}
+</h2>
+ [ {{=A(str(T('insert new'))+''+table,_href=URL(r=request,f='insert',args=[db,table]))}} ]
+ <br /><br />
+ {{pass}}
+ {{pass}}
+
+{{elif request.function=='select':}}
+ <h1>{{=XML(str(T("database %s select"))%A(request.args[0],_href=URL(r=request,f='index'))) }}
+ </h1>
+ {{if table:}}
+ [ {{=A(str(T('insert new %s'))%table,_href=URL(r=request,f='insert',args=[request.args[0],table]))}} ]<br/><br/>
+ <h2>{{=T("Rows in table")}}</h2><br/>
+ {{else:}}
+ <h2>{{=T("Rows selected")}}</h2><br/>
+ {{pass}}
+ {{=form}}
+ <p>{{=T('The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.')}}<br/>
+ {{=T('Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.')}}<br/>
+ {{=T('"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN')}}</p>
+ <br/><br/>
+ <h3>{{=nrows}} {{=T("selected")}}</h3>
+ {{if start>0:}}[ {{=A(T('previous 100 rows'),_href=URL(r=request,f='select',args=request.args[0],vars=dict(start=start-100)))}} ]{{pass}}
+ {{if stop<nrows:}}[ {{=A(T('next 100 rows'),_href=URL(r=request,f='select',args=request.args[0],vars=dict(start=start+100)))}} ]{{pass}}
+ {{if rows:}}
+ <div style="overflow: auto;" width="80%">
+ {{linkto=URL(r=request,f='update',args=request.args[0])}}
+ {{upload=URL(r=request,f='download',args=request.args[0])}}
+ {{=SQLTABLE(rows,linkto,upload,orderby=True,_class='sortable')}}
+ </div>
+ {{pass}}
+ <br/><br/><h2>{{=T("Import/Export")}}</h2><br/>
+ [ <a href="{{=URL(r=request,f='csv',args=request.args[0],vars=dict(query=query))}}">{{=T("export as csv file")}}</a> ]
+ {{if table:}}
+ {{=FORM(str(T('or import from csv file'))+" ",INPUT(_type='file',_name='csvfile'),INPUT(_type='hidden',_value=table,_name='table'),INPUT(_type='submit',_value='import'))}}
+ {{pass}}
+
+
+{{elif request.function=='insert':}}
+ <h1>{{=T("database")}} {{=A(request.args[0],_href=URL(r=request,f='index'))}}
+ {{if hasattr(table,'_primarykey'):}}
+ {{fieldname=table._primarykey[0]}}
+ {{dbname=request.args[0]}}
+ {{tablename=request.args[1]}}
+ {{cond = table[fieldname].type in ['string','text'] and '!=""' or '>0'}}
+ {{=T("table")}} {{=A(tablename,_href=URL(r=request,f='select',args=dbname,vars=dict(query='%s.%s.%s%s'%(dbname,tablename,fieldname,cond))))}}
+ {{else:}}
+ {{=T("table")}} {{=A(request.args[1],_href=URL(r=request,f='select',args=request.args[0],vars=dict(query='%s.%s.id>0'%tuple(request.args[:2]))))}}
+ {{pass}}
+ </h1>
+ <h2>{{=T("New Record")}}</h2><br/>
+ {{=form}}
+
+
+
+{{elif request.function=='update':}}
+ <h1>{{=T("database")}} {{=A(request.args[0],_href=URL(r=request,f='index'))}}
+ {{if hasattr(table,'_primarykey'):}}
+ {{fieldname=request.vars.keys()[0]}}
+ {{dbname=request.args[0]}}
+ {{tablename=request.args[1]}}
+ {{cond = table[fieldname].type in ['string','text'] and '!=""' or '>0'}}
+ {{=T("table")}} {{=A(tablename,_href=URL(r=request,f='select',args=dbname,vars=dict(query='%s.%s.%s%s'%(dbname,tablename,fieldname,cond))))}}
+ {{=T("record")}} {{=A('%s=%s'%request.vars.items()[0],_href=URL(r=request,f='update',args=request.args[:2],vars=request.vars))}}
+ {{else:}}
+ {{=T("table")}} {{=A(request.args[1],_href=URL(r=request,f='select',args=request.args[0],vars=dict(query='%s.%s.id>0'%tuple(request.args[:2]))))}}
+ {{=T("record id")}} {{=A(request.args[2],_href=URL(r=request,f='update',args=request.args[:3]))}}
+ {{pass}}
+ </h1>
+ <h2>{{=T("Edit current record")}}</h2><br/><br/>{{=form}}
+
+
+
+{{elif request.function=='state':}}
+ <h1>{{=T("Internal State")}}</h1>
+ <h2>{{=T("Current request")}}</h2>
+ {{=BEAUTIFY(request)}}
+ <br/><h2>{{=T("Current response")}}</h2>
+ {{=BEAUTIFY(response)}}
+ <br/><h2>{{=T("Current session")}}</h2>
+ {{=BEAUTIFY(session)}}
+
+
+{{elif request.function == 'ccache':}}
+<h2>Cache</h2>
+<div class="wrapper">
+<div class="list">
+ <div class="list-header">
+ Statistics
+ </div>
+ <div class="content">
+ <h3>Overview</h3>
+ <p>
+ Hit Ratio:
+ <strong>{{=total['ratio']}}%</strong>
+ (<strong>{{=total['hits']}}</strong> hits
+ and <strong>{{=total['misses']}}</strong> misses)
+ </p>
+ <p>
+ Size of cache:
+ <strong>{{=total['objects']}}</strong> items,
+ <strong>{{=total['bytes']}}</strong> bytes
+ {{if total['bytes'] > 524287:}}
+ (<strong>{{="%.0d" % (total['bytes'] / 1048576)}} MB</strong>)
+ {{pass}}
+ </p>
+ <p>
+ Cache contains items up to
+ <strong>{{="%02d" % total['oldest'][0]}}</strong> hours
+ <strong>{{="%02d" % total['oldest'][1]}}</strong> minutes
+ <strong>{{="%02d" % total['oldest'][2]}}</strong> seconds old.
+ </p>
+ <h3>RAM</h3>
+ <p>
+ Hit Ratio:
+ <strong>{{=ram['ratio']}}%</strong>
+ (<strong>{{=ram['hits']}}</strong> hits
+ and <strong>{{=ram['misses']}}</strong> misses)
+ </p>
+ <p>
+ Size of cache:
+ <strong>{{=ram['objects']}}</strong> items,
+ <strong>{{=ram['bytes']}}</strong> bytes
+ {{if ram['bytes'] > 524287:}}
+ (<strong>{{=ram['bytes'] / 1048576}} MB</strong>)
+ {{pass}}
+ </p>
+ <p>
+ RAM contains items up to
+ <strong>{{="%02d" % ram['oldest'][0]}}</strong> hours
+ <strong>{{="%02d" % ram['oldest'][1]}}</strong> minutes
+ <strong>{{="%02d" % ram['oldest'][2]}}</strong> seconds old.
+ </p>
+ <h3>DISK</h3>
+ <p>
+ Hit Ratio:
+ <strong>{{=disk['ratio']}}%</strong>
+ (<strong>{{=disk['hits']}}</strong> hits
+ and <strong>{{=disk['misses']}}</strong> misses)
+ </p>
+ <p>
+ Size of cache:
+ <strong>{{=disk['objects']}}</strong> items,
+ <strong>{{=disk['bytes']}}</strong> bytes
+ {{if disk['bytes'] > 524287:}}
+ (<strong>{{=disk['bytes'] / 1048576}} MB</strong>)
+ {{pass}}
+ </p>
+ <p>
+ DISK contains items up to
+ <strong>{{="%02d" % disk['oldest'][0]}}</strong> hours
+ <strong>{{="%02d" % disk['oldest'][1]}}</strong> minutes
+ <strong>{{="%02d" % disk['oldest'][2]}}</strong> seconds old.
+ </p>
+ </div>
+
+ <div class="list-header">
+ Manage Cache
+ </div>
+ <div class="content">
+ <p>
+ {{=form}}
+ </p>
+ </div>
+</div>
+<div class="clear"></div>
+</div>
+{{pass}}
diff --git a/views/default/_base.html b/views/default/_base.html
new file mode 100644
index 0000000..a277d77
--- /dev/null
+++ b/views/default/_base.html
@@ -0,0 +1,25 @@
+<html>
+ <link rel="stylesheet" href="../static/glike.css" type="text/css" />
+ <head>
+ <title>Turtle Art Image Database</title>
+ </head>
+ <body>
+ <div id="header">
+ <h1><a href="index.html" >Home</a></h1>
+ <ul>
+ {{if auth.is_logged_in():}}
+ <li><a href={{="index?profile="+auth.user.username}}>{{=auth.user.username}}</a>: </li>
+ <li><a href="user/logout">Log Out</li>
+ <li><a href="upload.html" >New Image</a></li>
+ {{pass}}
+ {{if not auth.is_logged_in():}}
+ <li><a href="user.html">log in</a></li>
+ {{pass}}
+ </ul>
+ </div>
+ <div id='bodycontent'>
+ {{include}}
+ </div>
+ </body>
+ </style>
+</html>
diff --git a/views/default/_base.html.1 b/views/default/_base.html.1
new file mode 100644
index 0000000..65a610c
--- /dev/null
+++ b/views/default/_base.html.1
@@ -0,0 +1,19 @@
+<html>
+ <link rel="stylesheet" href="../static/glike.css" type="text/css" />
+ <head>
+ <title>Turtle Art Image Database</title>
+ </head>
+ <body>
+ <div id="header">
+ <h1><a href="index.html" >Home</a></h1>
+ <ul>
+ <li><a href="imagelist.html" >Images</a></li>
+ <li><a href="adminpage.html" >Clear All</a></li>
+ </ul>
+ </div>
+ <div id='bodycontent'>
+ {{include}}
+ </div>
+ </body>
+ </style>
+</html>
diff --git a/views/default/_base.html.bak b/views/default/_base.html.bak
new file mode 100644
index 0000000..b433666
--- /dev/null
+++ b/views/default/_base.html.bak
@@ -0,0 +1,20 @@
+<html>
+ <link rel="stylesheet" href="../static/glike.css" type="text/css" />
+ <head>
+ <title>Turtle Art Image Database</title>
+ </head>
+ <body>
+ <div id="header">
+ <h1><a href="index.html" >Home</a></h1>
+ <ul>
+ <li><a href="imagelist.html" >Images</a></li>
+ <li><a href="submit.html">Submit</a></li>
+ <li><a href="adminpage.html" >Clear All</a></li>
+ </ul>
+ </div>
+ <div id='bodycontent'>
+ {{include}}
+ </div>
+ </body>
+ </style>
+</html>
diff --git a/views/default/adminpage.html b/views/default/adminpage.html
new file mode 100644
index 0000000..fb04ab0
--- /dev/null
+++ b/views/default/adminpage.html
@@ -0,0 +1,3 @@
+{{extend 'layout.html'}}
+<h1>This is the default/adminpage.html template</h1>
+{{=BEAUTIFY(response._vars)}}
diff --git a/views/default/image.html b/views/default/image.html
new file mode 100644
index 0000000..7af062f
--- /dev/null
+++ b/views/default/image.html
@@ -0,0 +1,23 @@
+{{extend 'default/_base.html'}}
+<h1>{{ = image.title}}</h1>
+<img width="1000px"src="{{=URL(r=request, f='download', args=image.newimage)}}">
+<br>
+{{if auth.is_logged_in():}}
+ {{if image.creator == auth.user.username:}}
+ <a href={{="delete?id="+str(image.id)}}>delete image</a>
+ {{pass}}
+ {{pass}}
+<p>{{ = "author: "}}<a href={{= "index?profile=" +str(image.creator)}}>{{=image.creator}} </a></p>
+<a href="{{=URL(r=request, f='download', args=image.file)}}"> Download TA file</a>
+<p>{{ = "description: " + str(image.description)}}</p>
+<p>views: {{=image.views}}</p>
+<h2>Comments</h2>
+{{for comment in comments:}}
+ <a href={{= "profile?user=" +str(comment.author)}}>{{=comment.author}} </a>
+ {{=": " + comment.body}}
+ <br>
+ <br>
+ {{pass}}
+{{if auth.is_logged_in():}}
+ <h2>Write a Comment</h2>
+ {{=form}}
diff --git a/views/default/index.html b/views/default/index.html
new file mode 100644
index 0000000..da1f19c
--- /dev/null
+++ b/views/default/index.html
@@ -0,0 +1,55 @@
+{{extend 'default/_base.html'}}
+{{if profile != None:}}
+ <h1>{{=profile+ "'s Submissions"}}</h1>
+ {{pass}}
+{{if profile == None:}}
+ <h1>Submissions</h1>
+ {{pass}}
+<p>Sort by:
+{{if profile == None:}}
+ {{if sort == "newest":}}
+ {{=sort}}
+ <a href="index.html?sort=views"> views</a></p>
+ {{pass}}
+ {{if sort == "views":}}
+ <a href="index.html"> newest</a>
+ {{=sort}}</p>
+ {{pass}}
+ {{pass}}
+{{if profile != None:}}
+ {{if sort == "newest":}}
+ {{=sort}}
+ <a href={{="index.html?sort=views;profile="+profile}}> views</a></p>
+ {{pass}}
+ {{if sort == "views":}}
+ <a href={{="index.html?profile="+profile}}> newest</a>
+ {{=sort}}</p>
+ {{pass}}
+ {{pass}}
+{{for row in images:}}
+ <table><tr>
+ {{for image in row:}}
+ <td><a href = {{="image.html?image="+str(image.id)}}>
+ <img width="250px" src="{{=URL(r=request, f='download', args=image.newimage)}}"
+ onclick="ajax('ajaxwiki_onclick',['text'],'html')"/>
+ <br><center>{{=image.title}}</center></a></td>
+ {{pass}}
+ </tr></table>
+ {{pass}}
+<center>
+<ul id="navlist">
+{{for count in range(pages):}}
+ {{if count+1 == page:}}
+ <li>{{=str(page)}}</li>
+ {{pass}}
+ {{if count+1 != page:}}
+ {{if profile == None:}}
+ <li><a href = {{="index.html?page="+str(count+1)+";sort="+sort}}>{{ = str(count+1)}}</a></li>
+ {{pass}}
+ {{if profile != None:}}
+ <li><a href = {{="index.html?page="+str(count+1)+";sort="+sort}}+";profile="+profile>{{ = str(count+1)}}</a></li>
+ {{pass}}
+ {{pass}}
+ {{pass}}
+</ul>
+</center>
diff --git a/views/default/index.html.1 b/views/default/index.html.1
new file mode 100644
index 0000000..a1e2ae4
--- /dev/null
+++ b/views/default/index.html.1
@@ -0,0 +1,4 @@
+{{extend 'default/_base.html'}}
+<form action="jamiesprogram">
+{{=form}}
+</form>
diff --git a/views/default/index.html.bak b/views/default/index.html.bak
new file mode 100644
index 0000000..a1e2ae4
--- /dev/null
+++ b/views/default/index.html.bak
@@ -0,0 +1,4 @@
+{{extend 'default/_base.html'}}
+<form action="jamiesprogram">
+{{=form}}
+</form>
diff --git a/views/default/submit.html b/views/default/submit.html
new file mode 100644
index 0000000..036a269
--- /dev/null
+++ b/views/default/submit.html
@@ -0,0 +1,4 @@
+{{extend 'default/_base.html'}}
+<form action="jamiesprogram">
+{{=form}}
+</form>}
diff --git a/views/default/testpage.html b/views/default/testpage.html
new file mode 100644
index 0000000..8ddcc98
--- /dev/null
+++ b/views/default/testpage.html
@@ -0,0 +1,2 @@
+{{extend 'default/_base.html'}}
+This is a test page.
diff --git a/views/default/testpage.html.bak b/views/default/testpage.html.bak
new file mode 100644
index 0000000..f111380
--- /dev/null
+++ b/views/default/testpage.html.bak
@@ -0,0 +1,4 @@
+
+{{extend 'layout.html'}}
+<h1>This is the default/testpage.html template</h1>
+{{=BEAUTIFY(response._vars)}} \ No newline at end of file
diff --git a/views/default/upload.html b/views/default/upload.html
new file mode 100644
index 0000000..4394df6
--- /dev/null
+++ b/views/default/upload.html
@@ -0,0 +1,2 @@
+{{extend 'default/_base.html'}}
+{{=form}}
diff --git a/views/default/user.html b/views/default/user.html
new file mode 100644
index 0000000..755d1c0
--- /dev/null
+++ b/views/default/user.html
@@ -0,0 +1,20 @@
+<html>
+ <link rel="stylesheet" href="../../static/glike.css" type="text/css" />
+ <head>
+ <title>Turtle Art Image Database</title>
+ </head>
+ <body>
+ <div id="header">
+ <h1><a href="index" >Home</a></h1>
+ </div>
+ <div id='bodycontent'>
+<h2>{{=request.args(0)}}</h2>
+{{=form}}
+{{if request.args(0)=='login':}}
+<a href="{{=URL(r=request, args='register')}}" >register</a><br />
+<a href="{{=URL(r=request, args='request_reset_password')}}" >lost password</a><br />
+{{pass}}
+ </div>
+ </body>
+ </style>
+</html>
diff --git a/views/generic.html b/views/generic.html
new file mode 100644
index 0000000..287dafd
--- /dev/null
+++ b/views/generic.html
@@ -0,0 +1,18 @@
+{{extend 'layout.html'}}
+{{"""
+
+You should not modify this file.
+It is used as default when a view is not provided for your controllers
+
+"""}}
+
+{{=BEAUTIFY(response._vars)}}
+
+<button onclick="document.location='{{=URL("admin","default","design",args=request.application)}}'">admin</button>
+<button onclick="jQuery('#request').slideToggle()">request</button>
+<div class="hidden" id="request"><h2>request</h2>{{=BEAUTIFY(request)}}</div>
+<button onclick="jQuery('#session').slideToggle()">session</button>
+<div class="hidden" id="session"><h2>session</h2>{{=BEAUTIFY(session)}}</div>
+<button onclick="jQuery('#response').slideToggle()">response</button>
+<div class="hidden" id="response"><h2>response</h2>{{=BEAUTIFY(response)}}</div>
+<script>jQuery('.hidden').hide();</script>
diff --git a/views/generic.json b/views/generic.json
new file mode 100644
index 0000000..23f5181
--- /dev/null
+++ b/views/generic.json
@@ -0,0 +1,11 @@
+{{
+###
+# response._vars contains the dictionary returned by the controller action
+###
+try:
+ from gluon.serializers import json
+ response.write(json(response._vars),escape=False)
+ response.headers['Content-Type']='text/json'
+except:
+ raise HTTP(405,'no json')
+}}
diff --git a/views/generic.rss b/views/generic.rss
new file mode 100644
index 0000000..9833a89
--- /dev/null
+++ b/views/generic.rss
@@ -0,0 +1,16 @@
+{{
+###
+# response._vars contains the dictionary returned by the controller action
+# for this to work the action must return something like
+#
+# dict(title=...,link=...,description=...,created_on='...',items=...)
+#
+# items is a list of dictionaries each with title, link, description, pub_date.
+###
+try:
+ from gluon.serializers import rss
+ response.write(rss(response._vars),escape=False)
+ response.headers['Content-Type']='application/rss+xml'
+except:
+ raise HTTP(405,'no rss')
+}} \ No newline at end of file
diff --git a/views/generic.xml b/views/generic.xml
new file mode 100644
index 0000000..8be0ceb
--- /dev/null
+++ b/views/generic.xml
@@ -0,0 +1,11 @@
+{{
+###
+# response._vars contains the dictionary returned by thecontroller action
+###
+try:
+ from gluon.serializers import xml
+ response.write(xml(response._vars),escape=False)
+ response.headers['Content-Type']='text/xml'
+except:
+ raise HTTP(405,'no xml')
+}}
diff --git a/views/layout.html b/views/layout.html
new file mode 100644
index 0000000..7e2d27f
--- /dev/null
+++ b/views/layout.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="{{=T.accepted_language or 'en'}}">
+ <head>
+ <title>{{=response.title or request.application}}</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <!-- include requires CSS files
+ {{response.files.append(URL(request.application,'static','base.css'))}}
+ {{response.files.append(URL(request.application,'static','ez-plug-min.css'))}}
+ -->
+ {{include 'web2py_ajax.html'}}
+ <script type="text/javascript">
+ <!-- /* this adds sfhover class to menu li items to make IE6 work */ jQuery(document).ready(function(){jQuery('li.web2py-menu-expand').hover(function () {jQuery(this).addClass('sfhover');},function () {jQuery(this).removeClass('sfhover');});});//-->
+ </script>
+ </head>
+ <body>
+ <div class="flash">{{=response.flash or ''}}</div>
+ <div class="ez-wr wrapper layout">
+ <div class="ez-box header">
+ <h1>
+ {{=A(response.title or request.application, _href=URL(request.application,'default','index'))}}
+ </h1>
+ <h3>{{=response.subtitle or ''}}</h3>
+ </div>
+ <div class="ez-box statusbar">
+ {{ if 'auth' in globals():}}
+ {{if not auth.user:}} [
+ {{=A(T('login'),_href=URL(r=request,c='default',f='user/login'))}} |
+ {{=A(T('register'),_href=URL(r=request,c='default',f='user/register'))}} ]
+ {{else:}}
+ {{=T('Welcome %s',auth.user.first_name)}} [
+ {{=A(T('logout'),_href=URL(r=request,c='default',f='user/logout'))}} |
+ {{=A(T('edit profile'),_href=URL(r=request,c='default',f='user/profile'))}} |
+ {{=A(T('change password'),_href=URL(r=request,c='default',f='user/change_password'))}} ]
+ {{pass}}
+ {{pass}}
+ </div>
+ <!-- ez-css Module 2A -->
+ <div class="ez-wr">
+ <div class="ez-fl ez-negmr">
+ <!-- td class="width10em column1" -->
+ <div class="ez-box width10em column1">
+ {{if response.menu:}}
+ <h2>{{=T('Main Menu')}}</h2>
+ {{=MENU(response.menu)}}
+ {{pass}}
+ {{if response.menu_edit:}}
+ <h2>{{=T('Edit This App')}}</h2>
+ {{=MENU(response.menu_edit)}}
+ {{pass}}
+ <br />
+ </div>
+ </div>
+ <div class="ez-last ez-oh">
+ <div class="ez-box expandable">
+ {{include}}
+ </div>
+ </div>
+ </div>
+ <div class="ez-box footer">
+ <p>
+ {{=T('Copyright')}} &#169; 2009 -
+ {{=T('Powered by')}} <a href="http://www.web2py.com">web2py</a>
+ </p>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/views/web2py_ajax.html b/views/web2py_ajax.html
new file mode 100644
index 0000000..a607983
--- /dev/null
+++ b/views/web2py_ajax.html
@@ -0,0 +1,90 @@
+{{
+response.files.insert(0,URL(r=request,c='static',f='jquery.js'))
+response.files.insert(1,URL(r=request,c='static',f='calendar.css'))
+response.files.insert(2,URL(r=request,c='static',f='calendar.js'))
+for _item in response.meta or []:}}
+ <meta name="{{=_item}}" content="{{=response.meta[_item]}}" />{{
+pass
+for _k,_file in enumerate(response.files or []):
+ if _file in response.files[:_k]:
+ continue
+ elif _file[-4:].lower()=='.css':}}
+ <link href="{{=_file}}" rel="stylesheet" type="text/css" />{{
+ elif _file[-3:].lower()=='.js':}}
+ <script src="{{=_file}}" type="text/javascript"></script>{{
+ pass
+pass
+}}
+<script type="text/javascript"><!--
+function popup(url) {
+ newwindow=window.open(url,'name','height=400,width=600');
+ if (window.focus) newwindow.focus();
+ return false;
+}
+function collapse(id) { jQuery('#'+id).slideToggle(); }
+function fade(id,value) { if(value>0) jQuery('#'+id).hide().fadeIn('slow'); else jQuery('#'+id).show().fadeOut('slow'); }
+function ajax(u,s,t) {
+ var query="";
+ for(i=0; i<s.length; i++) {
+ if(i>0) query=query+"&";
+ query=query+encodeURIComponent(s[i])+"="+encodeURIComponent(document.getElementById(s[i]).value);
+ }
+ jQuery.ajax({type: "POST", url: u, data: query, success: function(msg) { if(t==':eval') eval(msg); else document.getElementById(t).innerHTML=msg; } });
+}
+String.prototype.reverse = function () { return this.split('').reverse().join('');};
+function web2py_ajax_init() {
+ jQuery('.hidden').hide();
+ jQuery('.error').hide().slideDown('slow');
+ jQuery('.flash').click(function() { jQuery(this).fadeOut('slow'); return false; });
+ jQuery('input.integer').keyup(function(){this.value=this.value.reverse().replace(/[^0-9\-]|\-(?=.)/g,'').reverse();});
+ jQuery('input.double').keyup(function(){this.value=this.value.reverse().replace(/[^0-9\-\.]|[\-](?=.)|[\.](?=[0-9]*[\.])/g,'').reverse();});
+ jQuery("input[type='checkbox'].delete").each(function(){jQuery(this).click(function() { if(this.checked) if(!confirm("{{=T('Sure you want to delete this object?')}}")) this.checked=false; });});
+ try {jQuery("input.date").focus( function() {Calendar.setup({
+ inputField:this.id, ifFormat:"{{=T('%Y-%m-%d')}}", showsTime:false
+ }); }); } catch(e) {};
+ try { jQuery("input.datetime").focus( function() {Calendar.setup({
+ inputField:this.id, ifFormat:"{{=T('%Y-%m-%d %H:%M:%S')}}", showsTime: true,timeFormat: "24"
+ }); }); } catch(e) {};
+ try { jQuery("input.time").clockpick({
+ starthour:0, endhour:23, showminutes:true, military:true
+ }); } catch(e) {};
+};
+jQuery(document).ready(function(){
+ jQuery('.flash').hide();
+ if(jQuery('.flash').html()!='') jQuery('.flash').slideDown('slow');
+ web2py_ajax_init();});
+
+function web2py_trap_form(action,target) {
+ jQuery('#'+target+' form').each(function(i){
+ var form=jQuery(this);
+ if(!form.hasClass('no_trap'))
+ form.submit(function(obj){
+ jQuery('.flash').hide().html('');
+ web2py_ajax_page('post',action,form.serialize(),target);
+ return false;
+ });
+ });
+}
+
+function web2py_ajax_page(method,action,data,target) {
+ jQuery.ajax({'type':method,'url':action,'data':data,
+ 'beforeSend':function(xhr){
+ xhr.setRequestHeader('web2py-component-location',document.location);
+ xhr.setRequestHeader('web2py-component-element',target);},
+ 'complete':function(xhr,text){
+ command=xhr.getResponseHeader('web2py-component-command');
+ if(command) eval(command);
+ flash=xhr.getResponseHeader('web2py-component-flash');
+ if(flash) jQuery('.flash').html(flash).slideDown();
+ },
+ 'success': function(text) {
+ jQuery('#'+target).html(text);
+ web2py_trap_form(action,target);
+ web2py_ajax_init();
+ }
+ });
+}
+function web2py_component(action,target) {
+ jQuery(document).ready(function(){ web2py_ajax_page('get',action,null,target); });
+}
+//--></script>