#
#   Licensed to the Apache Software Foundation (ASF) under one or more
#   contributor license agreements.  See the NOTICE file distributed with
#   this work for additional information regarding copyright ownership.
#   The ASF licenses this file to You under the Apache License, Version 2.0
#   (the "License"); you may not use this file except in compliance with
#   the License.  You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
#   Unless required by applicable law or agreed to in writing, software
#   distributed under the License is distributed on an "AS IS" BASIS,
#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#   See the License for the specific language governing permissions and
#   limitations under the License.
#Here is the starter pack
http://www.myexperiment.org/workflows/2254/download/secure_web_service_call_example_565494.t2flow?version=1
http://www.myexperiment.org/workflows/2253/download/secure_rest_service_call_example_19600.t2flow?version=1
http://www.myexperiment.org/workflows/2231/download/numerically_adding_two_values._763485.t2flow?version=1
http://www.myexperiment.org/workflows/2230/download/example_for_external_tools_with_zip_and_unzip_57117.t2flow?version=1
http://www.myexperiment.org/workflows/2229/download/unix_tool_service_using_string_replacement_219870.t2flow?version=1
http://www.myexperiment.org/workflows/2226/download/a_workflow_version_of_the_emboss_tutorial_602335.t2flow?version=1
#http://www.myexperiment.org/workflows/2225/download/biomoby_tutorial_workflow_822226.t2flow?version=1
http://www.myexperiment.org/workflows/2224/download/demonstration_of_configurable_iteration_687594.t2flow?version=1
http://www.myexperiment.org/workflows/2223/download/fetch_pdb_flatfile_from_rcsb_server_969158.t2flow?version=1
http://www.myexperiment.org/workflows/2222/download/fetch_today_s_xkcd_comic_451319.t2flow?version=1
http://www.myexperiment.org/workflows/2221/download/gbseq_test_330068.t2flow?version=1
http://www.myexperiment.org/workflows/2220/download/pipelined_list_iteration_106641.t2flow?version=1
http://www.myexperiment.org/workflows/2219/download/retrieve_sequence_in_embl_format_491484.t2flow?version=1
http://www.myexperiment.org/workflows/2218/download/spreadsheet_import_example_392470.t2flow?version=1
#http://www.myexperiment.org/workflows/2217/download/fetch_dragon_images_from_biomoby_210389.t2flow?version=1
http://www.myexperiment.org/workflows/2216/download/multiple_choice_quiz_541689.t2flow?version=1
http://www.myexperiment.org/workflows/2215/download/example_workflow_for_rest_and_xpath_activities_912889.t2flow?version=1
http://www.myexperiment.org/workflows/2214/download/ebi_interproscan_newservices_702837.t2flow?version=1
http://www.myexperiment.org/workflows/2213/download/biomartandembossdisease_841605.t2flow?version=1

#Here are the secured workflows
http://www.mygrid.org.uk/dev/wiki/download/attachments/6652086/secure-basic-authentication.t2flow?version=2&modificationDate=1308826501000
http://www.mygrid.org.uk/dev/wiki/download/attachments/6652086/secure-basic-authentication-https.t2flow?version=2&modificationDate=1308826501000
http://www.mygrid.org.uk/dev/wiki/download/attachments/6652086/secure-digest-authentication.t2flow?version=2&modificationDate=1308826485000
http://www.mygrid.org.uk/dev/wiki/download/attachments/6652086/secure-digest-authentication-https.t2flow?version=2&modificationDate=1308826485000
http://www.mygrid.org.uk/dev/wiki/download/attachments/6652086/secure-ws.t2flow?version=2&modificationDate=1308826485000
http://www.mygrid.org.uk/dev/wiki/download/attachments/6652086/secure-ws-https.t2flow?version=2&modificationDate=1308826485000
http://www.mygrid.org.uk/dev/wiki/download/attachments/6652086/secure-client-cert-authentication-https.t2flow?version=1&modificationDate=1308826485000

