From aad0547b40ea28c0ee447bb3b2337c793db9373c Mon Sep 17 00:00:00 2001 From: xhh Date: Thu, 21 Jan 2016 18:01:03 +0800 Subject: [PATCH 001/189] Ruby: support binary (byte array) for body parameter and response --- .../codegen/languages/RubyClientCodegen.java | 1 + .../src/main/resources/ruby/api.mustache | 11 +- .../main/resources/ruby/api_client.mustache | 3 + .../petstore/ruby/lib/petstore/api/pet_api.rb | 129 ++++++++++++++++-- .../ruby/lib/petstore/api/store_api.rb | 8 -- .../ruby/lib/petstore/api/user_api.rb | 12 -- .../petstore/ruby/lib/petstore/api_client.rb | 3 + samples/client/petstore/ruby/spec/pet_spec.rb | 39 +++++- .../client/petstore/ruby/spec/store_spec.rb | 9 +- 9 files changed, 167 insertions(+), 48 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RubyClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RubyClientCodegen.java index ddc4f35346f..5ff6e82cff1 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RubyClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RubyClientCodegen.java @@ -86,6 +86,7 @@ public class RubyClientCodegen extends DefaultCodegen implements CodegenConfig { typeMapping.put("map", "Hash"); typeMapping.put("object", "Object"); typeMapping.put("file", "File"); + typeMapping.put("binary", "Byte Array"); // remove modelPackage and apiPackage added by default Iterator itr = cliOptions.iterator(); diff --git a/modules/swagger-codegen/src/main/resources/ruby/api.mustache b/modules/swagger-codegen/src/main/resources/ruby/api.mustache index d7967135336..7df6c3ec42a 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/api.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/api.mustache @@ -70,9 +70,10 @@ module {{moduleName}} # http body (model) {{^bodyParam}}post_body = nil - {{/bodyParam}}{{#bodyParam}}post_body = @api_client.object_to_http_body({{#required}}{{{paramName}}}{{/required}}{{^required}}opts[:'{{{paramName}}}']{{/required}}) - {{/bodyParam}} - + {{/bodyParam}}{{#bodyParam}}{{#isBinary}}post_body = {{#required}}{{{paramName}}}{{/required}}{{^required}}opts[:'{{{paramName}}}']{{/required}} + post_body = post_body.pack('C*') if post_body + {{/isBinary}}{{^isBinary}}post_body = @api_client.object_to_http_body({{#required}}{{{paramName}}}{{/required}}{{^required}}opts[:'{{{paramName}}}']{{/required}}) + {{/isBinary}}{{/bodyParam}} auth_names = [{{#authMethods}}'{{name}}'{{#hasMore}}, {{/hasMore}}{{/authMethods}}] data, status_code, headers = @api_client.call_api(:{{httpMethod}}, path, :header_params => header_params, @@ -90,7 +91,3 @@ module {{moduleName}} end {{/operations}} end - - - - diff --git a/modules/swagger-codegen/src/main/resources/ruby/api_client.mustache b/modules/swagger-codegen/src/main/resources/ruby/api_client.mustache index e9c2160450e..cd17609028a 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/api_client.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/api_client.mustache @@ -106,6 +106,9 @@ module {{moduleName}} body = response.body return nil if body.nil? || body.empty? + # handle binary response (byte array) + return body.bytes if return_type == 'Byte Array' + # handle file downloading - save response body into a tmp file and return the File instance return download_file(response) if return_type == 'File' diff --git a/samples/client/petstore/ruby/lib/petstore/api/pet_api.rb b/samples/client/petstore/ruby/lib/petstore/api/pet_api.rb index 9641ad0b707..c0b6bf2736d 100644 --- a/samples/client/petstore/ruby/lib/petstore/api/pet_api.rb +++ b/samples/client/petstore/ruby/lib/petstore/api/pet_api.rb @@ -51,7 +51,6 @@ module Petstore # http body (model) post_body = @api_client.object_to_http_body(opts[:'body']) - auth_names = ['petstore_auth'] data, status_code, headers = @api_client.call_api(:PUT, path, :header_params => header_params, @@ -108,7 +107,6 @@ module Petstore # http body (model) post_body = @api_client.object_to_http_body(opts[:'body']) - auth_names = ['petstore_auth'] data, status_code, headers = @api_client.call_api(:POST, path, :header_params => header_params, @@ -166,7 +164,6 @@ module Petstore # http body (model) post_body = nil - auth_names = ['petstore_auth'] data, status_code, headers = @api_client.call_api(:GET, path, :header_params => header_params, @@ -225,7 +222,6 @@ module Petstore # http body (model) post_body = nil - auth_names = ['petstore_auth'] data, status_code, headers = @api_client.call_api(:GET, path, :header_params => header_params, @@ -286,7 +282,6 @@ module Petstore # http body (model) post_body = nil - auth_names = ['api_key'] data, status_code, headers = @api_client.call_api(:GET, path, :header_params => header_params, @@ -353,7 +348,6 @@ module Petstore # http body (model) post_body = nil - auth_names = ['petstore_auth'] data, status_code, headers = @api_client.call_api(:POST, path, :header_params => header_params, @@ -416,7 +410,6 @@ module Petstore # http body (model) post_body = nil - auth_names = ['petstore_auth'] data, status_code, headers = @api_client.call_api(:DELETE, path, :header_params => header_params, @@ -482,7 +475,6 @@ module Petstore # http body (model) post_body = nil - auth_names = ['petstore_auth'] data, status_code, headers = @api_client.call_api(:POST, path, :header_params => header_params, @@ -495,9 +487,122 @@ module Petstore end return data, status_code, headers end + + # Fake endpoint to test byte array return by 'Find pet by ID' + # Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions + # @param pet_id ID of pet that needs to be fetched + # @param [Hash] opts the optional parameters + # @return [Byte Array] + def get_pet_by_id_with_byte_array(pet_id, opts = {}) + data, status_code, headers = get_pet_by_id_with_byte_array_with_http_info(pet_id, opts) + return data + end + + # Fake endpoint to test byte array return by 'Find pet by ID' + # Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions + # @param pet_id ID of pet that needs to be fetched + # @param [Hash] opts the optional parameters + # @return [Array<(Byte Array, Fixnum, Hash)>] Byte Array data, response status code and response headers + def get_pet_by_id_with_byte_array_with_http_info(pet_id, opts = {}) + if @api_client.config.debugging + @api_client.config.logger.debug "Calling API: PetApi#get_pet_by_id_with_byte_array ..." + end + + # verify the required parameter 'pet_id' is set + fail "Missing the required parameter 'pet_id' when calling get_pet_by_id_with_byte_array" if pet_id.nil? + + # resource path + path = "/pet/{petId}?testing_byte_array=true".sub('{format}','json').sub('{' + 'petId' + '}', pet_id.to_s) + + # query parameters + query_params = {} + + # header parameters + header_params = {} + + # HTTP header 'Accept' (if needed) + _header_accept = ['application/json', 'application/xml'] + _header_accept_result = @api_client.select_header_accept(_header_accept) and header_params['Accept'] = _header_accept_result + + # HTTP header 'Content-Type' + _header_content_type = [] + header_params['Content-Type'] = @api_client.select_header_content_type(_header_content_type) + + # form parameters + form_params = {} + + # http body (model) + post_body = nil + + auth_names = ['api_key'] + data, status_code, headers = @api_client.call_api(:GET, path, + :header_params => header_params, + :query_params => query_params, + :form_params => form_params, + :body => post_body, + :auth_names => auth_names, + :return_type => 'Byte Array') + if @api_client.config.debugging + @api_client.config.logger.debug "API called: PetApi#get_pet_by_id_with_byte_array\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}" + end + return data, status_code, headers + end + + # Fake endpoint to test byte array in body parameter for adding a new pet to the store + # + # @param [Hash] opts the optional parameters + # @option opts [Byte Array] :body Pet object in the form of byte array + # @return [nil] + def add_pet_using_byte_array(opts = {}) + add_pet_using_byte_array_with_http_info(opts) + return nil + end + + # Fake endpoint to test byte array in body parameter for adding a new pet to the store + # + # @param [Hash] opts the optional parameters + # @option opts [Byte Array] :body Pet object in the form of byte array + # @return [Array<(nil, Fixnum, Hash)>] nil, response status code and response headers + def add_pet_using_byte_array_with_http_info(opts = {}) + if @api_client.config.debugging + @api_client.config.logger.debug "Calling API: PetApi#add_pet_using_byte_array ..." + end + + # resource path + path = "/pet?testing_byte_array=true".sub('{format}','json') + + # query parameters + query_params = {} + + # header parameters + header_params = {} + + # HTTP header 'Accept' (if needed) + _header_accept = ['application/json', 'application/xml'] + _header_accept_result = @api_client.select_header_accept(_header_accept) and header_params['Accept'] = _header_accept_result + + # HTTP header 'Content-Type' + _header_content_type = ['application/json', 'application/xml'] + header_params['Content-Type'] = @api_client.select_header_content_type(_header_content_type) + + # form parameters + form_params = {} + + # http body (model) + post_body = opts[:'body'] + post_body = post_body.pack('C*') if post_body + + auth_names = ['petstore_auth'] + data, status_code, headers = @api_client.call_api(:POST, path, + :header_params => header_params, + :query_params => query_params, + :form_params => form_params, + :body => post_body, + :auth_names => auth_names) + if @api_client.config.debugging + @api_client.config.logger.debug "API called: PetApi#add_pet_using_byte_array\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}" + end + return data, status_code, headers + end end end - - - - diff --git a/samples/client/petstore/ruby/lib/petstore/api/store_api.rb b/samples/client/petstore/ruby/lib/petstore/api/store_api.rb index 1d8a92e288f..18ad29af7e9 100644 --- a/samples/client/petstore/ruby/lib/petstore/api/store_api.rb +++ b/samples/client/petstore/ruby/lib/petstore/api/store_api.rb @@ -49,7 +49,6 @@ module Petstore # http body (model) post_body = nil - auth_names = ['api_key'] data, status_code, headers = @api_client.call_api(:GET, path, :header_params => header_params, @@ -107,7 +106,6 @@ module Petstore # http body (model) post_body = @api_client.object_to_http_body(opts[:'body']) - auth_names = [] data, status_code, headers = @api_client.call_api(:POST, path, :header_params => header_params, @@ -168,7 +166,6 @@ module Petstore # http body (model) post_body = nil - auth_names = [] data, status_code, headers = @api_client.call_api(:GET, path, :header_params => header_params, @@ -229,7 +226,6 @@ module Petstore # http body (model) post_body = nil - auth_names = [] data, status_code, headers = @api_client.call_api(:DELETE, path, :header_params => header_params, @@ -244,7 +240,3 @@ module Petstore end end end - - - - diff --git a/samples/client/petstore/ruby/lib/petstore/api/user_api.rb b/samples/client/petstore/ruby/lib/petstore/api/user_api.rb index e1c8332b835..7b44fa8808a 100644 --- a/samples/client/petstore/ruby/lib/petstore/api/user_api.rb +++ b/samples/client/petstore/ruby/lib/petstore/api/user_api.rb @@ -51,7 +51,6 @@ module Petstore # http body (model) post_body = @api_client.object_to_http_body(opts[:'body']) - auth_names = [] data, status_code, headers = @api_client.call_api(:POST, path, :header_params => header_params, @@ -108,7 +107,6 @@ module Petstore # http body (model) post_body = @api_client.object_to_http_body(opts[:'body']) - auth_names = [] data, status_code, headers = @api_client.call_api(:POST, path, :header_params => header_params, @@ -165,7 +163,6 @@ module Petstore # http body (model) post_body = @api_client.object_to_http_body(opts[:'body']) - auth_names = [] data, status_code, headers = @api_client.call_api(:POST, path, :header_params => header_params, @@ -226,7 +223,6 @@ module Petstore # http body (model) post_body = nil - auth_names = [] data, status_code, headers = @api_client.call_api(:GET, path, :header_params => header_params, @@ -282,7 +278,6 @@ module Petstore # http body (model) post_body = nil - auth_names = [] data, status_code, headers = @api_client.call_api(:GET, path, :header_params => header_params, @@ -342,7 +337,6 @@ module Petstore # http body (model) post_body = nil - auth_names = [] data, status_code, headers = @api_client.call_api(:GET, path, :header_params => header_params, @@ -405,7 +399,6 @@ module Petstore # http body (model) post_body = @api_client.object_to_http_body(opts[:'body']) - auth_names = [] data, status_code, headers = @api_client.call_api(:PUT, path, :header_params => header_params, @@ -465,7 +458,6 @@ module Petstore # http body (model) post_body = nil - auth_names = [] data, status_code, headers = @api_client.call_api(:DELETE, path, :header_params => header_params, @@ -480,7 +472,3 @@ module Petstore end end end - - - - diff --git a/samples/client/petstore/ruby/lib/petstore/api_client.rb b/samples/client/petstore/ruby/lib/petstore/api_client.rb index a38f5aa81d7..747bcf85f96 100644 --- a/samples/client/petstore/ruby/lib/petstore/api_client.rb +++ b/samples/client/petstore/ruby/lib/petstore/api_client.rb @@ -106,6 +106,9 @@ module Petstore body = response.body return nil if body.nil? || body.empty? + # handle binary response (byte array) + return body.bytes if return_type == 'Byte Array' + # handle file downloading - save response body into a tmp file and return the File instance return download_file(response) if return_type == 'File' diff --git a/samples/client/petstore/ruby/spec/pet_spec.rb b/samples/client/petstore/ruby/spec/pet_spec.rb index b9aa9398bc2..dc2ff2b5488 100644 --- a/samples/client/petstore/ruby/spec/pet_spec.rb +++ b/samples/client/petstore/ruby/spec/pet_spec.rb @@ -1,6 +1,16 @@ require 'spec_helper' require 'json' +def serialize_json(o) + API_CLIENT.object_to_http_body(o) +end + +def deserialize_json(s, type) + headers = {'Content-Type' => 'application/json'} + response = double('response', headers: headers, body: s) + API_CLIENT.deserialize(response, type) +end + describe "Pet" do before do @pet_api = Petstore::PetApi.new(API_CLIENT) @@ -84,6 +94,25 @@ describe "Pet" do end end + it "should create and get pet with byte array" do + pet = @pet_api.get_pet_by_id(@pet_id) + pet.id = @pet_id + 1 + bytes = serialize_json(pet).bytes + @pet_api.add_pet_using_byte_array(body: bytes) + + fetchedBytes = @pet_api.get_pet_by_id_with_byte_array(pet.id) + fetchedBytes.should be_a(Array) + fetchedBytes[0].should be_a(Fixnum) + + fetched = deserialize_json(fetchedBytes.pack('C*'), 'Pet') + fetched.should be_a(Petstore::Pet) + fetched.id.should == pet.id + fetched.category.should be_a(Petstore::Category) + fetched.category.name.should == pet.category.name + + @pet_api.delete_pet(pet.id) + end + it "should update a pet" do pet = @pet_api.get_pet_by_id(@pet_id) pet.id.should == @pet_id @@ -122,16 +151,18 @@ describe "Pet" do end it "should create a pet" do - pet = Petstore::Pet.new('id' => 10003, 'name' => "RUBY UNIT TESTING") + id = @pet_id + 1 + + pet = Petstore::Pet.new('id' => id, 'name' => "RUBY UNIT TESTING") result = @pet_api.add_pet(:body => pet) # nothing is returned result.should be_nil - pet = @pet_api.get_pet_by_id(10003) - pet.id.should == 10003 + pet = @pet_api.get_pet_by_id(id) + pet.id.should == id pet.name.should == "RUBY UNIT TESTING" - @pet_api.delete_pet(10003) + @pet_api.delete_pet(id) end it "should upload a file to a pet" do diff --git a/samples/client/petstore/ruby/spec/store_spec.rb b/samples/client/petstore/ruby/spec/store_spec.rb index 30743fd374e..46b6071becc 100644 --- a/samples/client/petstore/ruby/spec/store_spec.rb +++ b/samples/client/petstore/ruby/spec/store_spec.rb @@ -3,16 +3,15 @@ require 'spec_helper' describe "Store" do before do @api = Petstore::StoreApi.new(API_CLIENT) - @order_id = prepare_store(@api) - end - - after do - @api.delete_order(@order_id) end it "should fetch an order" do + @order_id = prepare_store(@api) + item = @api.get_order_by_id(@order_id) item.id.should == @order_id + + @api.delete_order(@order_id) end it "should featch the inventory" do From 8c1962609547046398bf708faba735d6505d632d Mon Sep 17 00:00:00 2001 From: xhh Date: Mon, 25 Jan 2016 12:46:26 +0800 Subject: [PATCH 002/189] Handle "binary" as String in Ruby client as it seems weird to handle byte array (array of integer) in Ruby --- .../codegen/languages/RubyClientCodegen.java | 2 +- .../src/main/resources/ruby/api.mustache | 6 ++---- .../src/main/resources/ruby/api_client.mustache | 6 +++--- .../petstore/ruby/lib/petstore/api/pet_api.rb | 13 ++++++------- .../petstore/ruby/lib/petstore/api_client.rb | 6 +++--- samples/client/petstore/ruby/spec/pet_spec.rb | 14 ++++++-------- 6 files changed, 21 insertions(+), 26 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RubyClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RubyClientCodegen.java index 5ff6e82cff1..c746d8ec496 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RubyClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RubyClientCodegen.java @@ -86,7 +86,7 @@ public class RubyClientCodegen extends DefaultCodegen implements CodegenConfig { typeMapping.put("map", "Hash"); typeMapping.put("object", "Object"); typeMapping.put("file", "File"); - typeMapping.put("binary", "Byte Array"); + typeMapping.put("binary", "String"); // remove modelPackage and apiPackage added by default Iterator itr = cliOptions.iterator(); diff --git a/modules/swagger-codegen/src/main/resources/ruby/api.mustache b/modules/swagger-codegen/src/main/resources/ruby/api.mustache index 7df6c3ec42a..85eeec8b962 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/api.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/api.mustache @@ -70,10 +70,8 @@ module {{moduleName}} # http body (model) {{^bodyParam}}post_body = nil - {{/bodyParam}}{{#bodyParam}}{{#isBinary}}post_body = {{#required}}{{{paramName}}}{{/required}}{{^required}}opts[:'{{{paramName}}}']{{/required}} - post_body = post_body.pack('C*') if post_body - {{/isBinary}}{{^isBinary}}post_body = @api_client.object_to_http_body({{#required}}{{{paramName}}}{{/required}}{{^required}}opts[:'{{{paramName}}}']{{/required}}) - {{/isBinary}}{{/bodyParam}} + {{/bodyParam}}{{#bodyParam}}post_body = @api_client.object_to_http_body({{#required}}{{{paramName}}}{{/required}}{{^required}}opts[:'{{{paramName}}}']{{/required}}) + {{/bodyParam}} auth_names = [{{#authMethods}}'{{name}}'{{#hasMore}}, {{/hasMore}}{{/authMethods}}] data, status_code, headers = @api_client.call_api(:{{httpMethod}}, path, :header_params => header_params, diff --git a/modules/swagger-codegen/src/main/resources/ruby/api_client.mustache b/modules/swagger-codegen/src/main/resources/ruby/api_client.mustache index cd17609028a..e3f54f10994 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/api_client.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/api_client.mustache @@ -106,8 +106,8 @@ module {{moduleName}} body = response.body return nil if body.nil? || body.empty? - # handle binary response (byte array) - return body.bytes if return_type == 'Byte Array' + # return response body directly for String return type + return body if return_type == 'String' # handle file downloading - save response body into a tmp file and return the File instance return download_file(response) if return_type == 'File' @@ -277,7 +277,7 @@ module {{moduleName}} # @param [Object] model object to be converted into JSON string # @return [String] JSON string representation of the object def object_to_http_body(model) - return if model.nil? + return model if model.nil? || model.is_a?(String) _body = nil if model.is_a?(Array) _body = model.map{|m| object_to_hash(m) } diff --git a/samples/client/petstore/ruby/lib/petstore/api/pet_api.rb b/samples/client/petstore/ruby/lib/petstore/api/pet_api.rb index c0b6bf2736d..48c4042c1b4 100644 --- a/samples/client/petstore/ruby/lib/petstore/api/pet_api.rb +++ b/samples/client/petstore/ruby/lib/petstore/api/pet_api.rb @@ -492,7 +492,7 @@ module Petstore # Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions # @param pet_id ID of pet that needs to be fetched # @param [Hash] opts the optional parameters - # @return [Byte Array] + # @return [String] def get_pet_by_id_with_byte_array(pet_id, opts = {}) data, status_code, headers = get_pet_by_id_with_byte_array_with_http_info(pet_id, opts) return data @@ -502,7 +502,7 @@ module Petstore # Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions # @param pet_id ID of pet that needs to be fetched # @param [Hash] opts the optional parameters - # @return [Array<(Byte Array, Fixnum, Hash)>] Byte Array data, response status code and response headers + # @return [Array<(String, Fixnum, Hash)>] String data, response status code and response headers def get_pet_by_id_with_byte_array_with_http_info(pet_id, opts = {}) if @api_client.config.debugging @api_client.config.logger.debug "Calling API: PetApi#get_pet_by_id_with_byte_array ..." @@ -541,7 +541,7 @@ module Petstore :form_params => form_params, :body => post_body, :auth_names => auth_names, - :return_type => 'Byte Array') + :return_type => 'String') if @api_client.config.debugging @api_client.config.logger.debug "API called: PetApi#get_pet_by_id_with_byte_array\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}" end @@ -551,7 +551,7 @@ module Petstore # Fake endpoint to test byte array in body parameter for adding a new pet to the store # # @param [Hash] opts the optional parameters - # @option opts [Byte Array] :body Pet object in the form of byte array + # @option opts [String] :body Pet object in the form of byte array # @return [nil] def add_pet_using_byte_array(opts = {}) add_pet_using_byte_array_with_http_info(opts) @@ -561,7 +561,7 @@ module Petstore # Fake endpoint to test byte array in body parameter for adding a new pet to the store # # @param [Hash] opts the optional parameters - # @option opts [Byte Array] :body Pet object in the form of byte array + # @option opts [String] :body Pet object in the form of byte array # @return [Array<(nil, Fixnum, Hash)>] nil, response status code and response headers def add_pet_using_byte_array_with_http_info(opts = {}) if @api_client.config.debugging @@ -589,8 +589,7 @@ module Petstore form_params = {} # http body (model) - post_body = opts[:'body'] - post_body = post_body.pack('C*') if post_body + post_body = @api_client.object_to_http_body(opts[:'body']) auth_names = ['petstore_auth'] data, status_code, headers = @api_client.call_api(:POST, path, diff --git a/samples/client/petstore/ruby/lib/petstore/api_client.rb b/samples/client/petstore/ruby/lib/petstore/api_client.rb index 747bcf85f96..e00be7176b0 100644 --- a/samples/client/petstore/ruby/lib/petstore/api_client.rb +++ b/samples/client/petstore/ruby/lib/petstore/api_client.rb @@ -106,8 +106,8 @@ module Petstore body = response.body return nil if body.nil? || body.empty? - # handle binary response (byte array) - return body.bytes if return_type == 'Byte Array' + # return response body directly for String return type + return body if return_type == 'String' # handle file downloading - save response body into a tmp file and return the File instance return download_file(response) if return_type == 'File' @@ -277,7 +277,7 @@ module Petstore # @param [Object] model object to be converted into JSON string # @return [String] JSON string representation of the object def object_to_http_body(model) - return if model.nil? + return model if model.nil? || model.is_a?(String) _body = nil if model.is_a?(Array) _body = model.map{|m| object_to_hash(m) } diff --git a/samples/client/petstore/ruby/spec/pet_spec.rb b/samples/client/petstore/ruby/spec/pet_spec.rb index dc2ff2b5488..abdc5ba5903 100644 --- a/samples/client/petstore/ruby/spec/pet_spec.rb +++ b/samples/client/petstore/ruby/spec/pet_spec.rb @@ -94,17 +94,15 @@ describe "Pet" do end end - it "should create and get pet with byte array" do + it "should create and get pet with byte array (binary, string)" do pet = @pet_api.get_pet_by_id(@pet_id) pet.id = @pet_id + 1 - bytes = serialize_json(pet).bytes - @pet_api.add_pet_using_byte_array(body: bytes) + str = serialize_json(pet) + @pet_api.add_pet_using_byte_array(body: str) - fetchedBytes = @pet_api.get_pet_by_id_with_byte_array(pet.id) - fetchedBytes.should be_a(Array) - fetchedBytes[0].should be_a(Fixnum) - - fetched = deserialize_json(fetchedBytes.pack('C*'), 'Pet') + fetched_str = @pet_api.get_pet_by_id_with_byte_array(pet.id) + fetched_str.should be_a(String) + fetched = deserialize_json(fetched_str, 'Pet') fetched.should be_a(Petstore::Pet) fetched.id.should == pet.id fetched.category.should be_a(Petstore::Category) From 6b59dd0899303d5911f73e081a5483e8f83d2867 Mon Sep 17 00:00:00 2001 From: evigeant Date: Mon, 25 Jan 2016 13:51:42 -0500 Subject: [PATCH 003/189] Allow mave-codegen-plugin to set additionalProperties even if they are not declared in the cliOptions. --- .../io/swagger/codegen/plugin/CodeGenMojo.java | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/modules/swagger-codegen-maven-plugin/src/main/java/io/swagger/codegen/plugin/CodeGenMojo.java b/modules/swagger-codegen-maven-plugin/src/main/java/io/swagger/codegen/plugin/CodeGenMojo.java index 1608329f953..c29006dec9a 100644 --- a/modules/swagger-codegen-maven-plugin/src/main/java/io/swagger/codegen/plugin/CodeGenMojo.java +++ b/modules/swagger-codegen-maven-plugin/src/main/java/io/swagger/codegen/plugin/CodeGenMojo.java @@ -154,22 +154,15 @@ public class CodeGenMojo extends AbstractMojo { } if (configOptions != null) { - for (CliOption langCliOption : config.cliOptions()) { - if (configOptions.containsKey(langCliOption.getOpt())) { - config.additionalProperties().put(langCliOption.getOpt(), - configOptions.get(langCliOption.getOpt())); - } - } + for(Map.Entry configEntry : configOptions.entrySet()) { + config.additionalProperties().put(configEntry.getKey().toString(), configEntry.getValue()); + } } if (null != configurationFile) { Config genConfig = ConfigParser.read(configurationFile); if (null != genConfig) { - for (CliOption langCliOption : config.cliOptions()) { - if (genConfig.hasOption(langCliOption.getOpt())) { - config.additionalProperties().put(langCliOption.getOpt(), genConfig.getOption(langCliOption.getOpt())); - } - } + config.additionalProperties().putAll(genConfig.getOptions()); } else { throw new RuntimeException("Unable to read configuration file"); } From 68c69546154accca2dedddaa0792fca4b838ff82 Mon Sep 17 00:00:00 2001 From: evigeant Date: Mon, 25 Jan 2016 13:53:31 -0500 Subject: [PATCH 004/189] Fixed indentation --- .../main/java/io/swagger/codegen/plugin/CodeGenMojo.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/swagger-codegen-maven-plugin/src/main/java/io/swagger/codegen/plugin/CodeGenMojo.java b/modules/swagger-codegen-maven-plugin/src/main/java/io/swagger/codegen/plugin/CodeGenMojo.java index c29006dec9a..a9d29a31361 100644 --- a/modules/swagger-codegen-maven-plugin/src/main/java/io/swagger/codegen/plugin/CodeGenMojo.java +++ b/modules/swagger-codegen-maven-plugin/src/main/java/io/swagger/codegen/plugin/CodeGenMojo.java @@ -154,15 +154,15 @@ public class CodeGenMojo extends AbstractMojo { } if (configOptions != null) { - for(Map.Entry configEntry : configOptions.entrySet()) { - config.additionalProperties().put(configEntry.getKey().toString(), configEntry.getValue()); - } + for(Map.Entry configEntry : configOptions.entrySet()) { + config.additionalProperties().put(configEntry.getKey().toString(), configEntry.getValue()); + } } if (null != configurationFile) { Config genConfig = ConfigParser.read(configurationFile); if (null != genConfig) { - config.additionalProperties().putAll(genConfig.getOptions()); + config.additionalProperties().putAll(genConfig.getOptions()); } else { throw new RuntimeException("Unable to read configuration file"); } From f13b4deb2ea7b39ee1a8ffbd2114cd4bf87c802e Mon Sep 17 00:00:00 2001 From: evigeant Date: Mon, 25 Jan 2016 21:22:18 -0500 Subject: [PATCH 005/189] Added warnings when the additionalProperties are not defined in the cliOptions of a language. --- .../swagger/codegen/plugin/CodeGenMojo.java | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/modules/swagger-codegen-maven-plugin/src/main/java/io/swagger/codegen/plugin/CodeGenMojo.java b/modules/swagger-codegen-maven-plugin/src/main/java/io/swagger/codegen/plugin/CodeGenMojo.java index a9d29a31361..a14203e7592 100644 --- a/modules/swagger-codegen-maven-plugin/src/main/java/io/swagger/codegen/plugin/CodeGenMojo.java +++ b/modules/swagger-codegen-maven-plugin/src/main/java/io/swagger/codegen/plugin/CodeGenMojo.java @@ -30,7 +30,9 @@ import org.apache.maven.project.MavenProject; import java.io.File; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; +import java.util.Set; import static io.swagger.codegen.plugin.AdditionalParams.*; @@ -152,17 +154,20 @@ public class CodeGenMojo extends AbstractMojo { if (null != invokerPackage) { config.additionalProperties().put(INVOKER_PACKAGE_PARAM, invokerPackage); } - + + Set definedOptions = new HashSet(); + for (CliOption langCliOption : config.cliOptions()) { + definedOptions.add(langCliOption.getOpt()); + } + if (configOptions != null) { - for(Map.Entry configEntry : configOptions.entrySet()) { - config.additionalProperties().put(configEntry.getKey().toString(), configEntry.getValue()); - } + addAdditionalProperties(config, definedOptions, configOptions); } if (null != configurationFile) { Config genConfig = ConfigParser.read(configurationFile); if (null != genConfig) { - config.additionalProperties().putAll(genConfig.getOptions()); + addAdditionalProperties(config, definedOptions, genConfig.getOptions()); } else { throw new RuntimeException("Unable to read configuration file"); } @@ -193,4 +198,13 @@ public class CodeGenMojo extends AbstractMojo { project.addCompileSourceRoot(output.toString()); } } + + private void addAdditionalProperties(CodegenConfig config, Set definedOptions, Map configOptions) { + for(Map.Entry configEntry : configOptions.entrySet()) { + config.additionalProperties().put(configEntry.getKey().toString(), configEntry.getValue()); + if(!definedOptions.contains(configEntry.getKey())) { + getLog().warn("Additional property: " + configEntry.getKey() + " is not defined for this language."); + } + } + } } From faadccf37161bfda80c6045aa368696836c9d765 Mon Sep 17 00:00:00 2001 From: evigeant Date: Mon, 25 Jan 2016 21:39:58 -0500 Subject: [PATCH 006/189] Added missing cliOptions for the StaticHtmlGenerator and StaticDocGenerator --- .../swagger/codegen/languages/StaticDocCodegen.java | 6 ++++++ .../codegen/languages/StaticHtmlGenerator.java | 12 ++++++++++++ 2 files changed, 18 insertions(+) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/StaticDocCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/StaticDocCodegen.java index 99ba292915a..3ff35f170fd 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/StaticDocCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/StaticDocCodegen.java @@ -1,5 +1,6 @@ package io.swagger.codegen.languages; +import io.swagger.codegen.CliOption; import io.swagger.codegen.CodegenConfig; import io.swagger.codegen.CodegenConstants; import io.swagger.codegen.CodegenType; @@ -22,6 +23,11 @@ public class StaticDocCodegen extends DefaultCodegen implements CodegenConfig { apiTemplateFiles.put("operation.mustache", ".html"); embeddedTemplateDir = templateDir = "swagger-static"; + cliOptions.add(new CliOption(CodegenConstants.INVOKER_PACKAGE, CodegenConstants.INVOKER_PACKAGE_DESC)); + cliOptions.add(new CliOption(CodegenConstants.GROUP_ID, CodegenConstants.GROUP_ID_DESC)); + cliOptions.add(new CliOption(CodegenConstants.ARTIFACT_ID, CodegenConstants.ARTIFACT_ID_DESC)); + cliOptions.add(new CliOption(CodegenConstants.ARTIFACT_VERSION, CodegenConstants.ARTIFACT_VERSION_DESC)); + additionalProperties.put(CodegenConstants.INVOKER_PACKAGE, invokerPackage); additionalProperties.put(CodegenConstants.GROUP_ID, groupId); additionalProperties.put(CodegenConstants.ARTIFACT_ID, artifactId); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/StaticHtmlGenerator.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/StaticHtmlGenerator.java index cb598f8fbd8..2d5457362a1 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/StaticHtmlGenerator.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/StaticHtmlGenerator.java @@ -1,5 +1,6 @@ package io.swagger.codegen.languages; +import io.swagger.codegen.CliOption; import io.swagger.codegen.CodegenConfig; import io.swagger.codegen.CodegenConstants; import io.swagger.codegen.CodegenOperation; @@ -32,6 +33,17 @@ public class StaticHtmlGenerator extends DefaultCodegen implements CodegenConfig defaultIncludes = new HashSet(); + cliOptions.add(new CliOption("appName", "short name of the application")); + cliOptions.add(new CliOption("appDescription", "description of the application")); + cliOptions.add(new CliOption("infoUrl", "a URL where users can get more information about the application")); + cliOptions.add(new CliOption("infoEmail", "an email address to contact for inquiries about the application")); + cliOptions.add(new CliOption("licenseInfo", "a short description of the license")); + cliOptions.add(new CliOption("licenseUrl", "a URL pointing to the full license")); + cliOptions.add(new CliOption(CodegenConstants.INVOKER_PACKAGE, CodegenConstants.INVOKER_PACKAGE_DESC)); + cliOptions.add(new CliOption(CodegenConstants.GROUP_ID, CodegenConstants.GROUP_ID_DESC)); + cliOptions.add(new CliOption(CodegenConstants.ARTIFACT_ID, CodegenConstants.ARTIFACT_ID_DESC)); + cliOptions.add(new CliOption(CodegenConstants.ARTIFACT_VERSION, CodegenConstants.ARTIFACT_VERSION_DESC)); + additionalProperties.put("appName", "Swagger Sample"); additionalProperties.put("appDescription", "A sample swagger server"); additionalProperties.put("infoUrl", "https://helloreverb.com"); From 43807adf4fb402c0b5f72f931633f44cb51429b3 Mon Sep 17 00:00:00 2001 From: evigeant Date: Mon, 25 Jan 2016 21:48:54 -0500 Subject: [PATCH 007/189] Added missing cliOptions for JaxRSServerCodegen --- .../java/io/swagger/codegen/languages/JaxRSServerCodegen.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JaxRSServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JaxRSServerCodegen.java index f681bf5ba96..679a0412777 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JaxRSServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JaxRSServerCodegen.java @@ -50,6 +50,8 @@ public class JaxRSServerCodegen extends JavaClientCodegen { cliOptions.add(library); cliOptions.add(new CliOption(CodegenConstants.IMPL_FOLDER, CodegenConstants.IMPL_FOLDER_DESC)); + cliOptions.add(new CliOption("title", "a title describing the application")); + cliOptions.add(new CliOption("dateLibrary", "the date library to use when generating code: joda or java8")); } @Override From d0b99a0f8306d1f2248664bb8a5af3fe1a7975e4 Mon Sep 17 00:00:00 2001 From: evigeant Date: Mon, 25 Jan 2016 22:17:09 -0500 Subject: [PATCH 008/189] Fixed options provider for all classes where cliOptions were added --- .../options/JaxRSServerOptionsProvider.java | 3 ++- .../codegen/options/StaticDocOptionsProvider.java | 8 ++++++++ .../codegen/options/StaticHtmlOptionsProvider.java | 14 ++++++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/JaxRSServerOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/JaxRSServerOptionsProvider.java index b74623e8517..82b580d2f28 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/JaxRSServerOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/JaxRSServerOptionsProvider.java @@ -25,7 +25,8 @@ public class JaxRSServerOptionsProvider extends JavaOptionsProvider { ImmutableMap.Builder builder = new ImmutableMap.Builder(); builder.putAll(options) - .put(CodegenConstants.IMPL_FOLDER, IMPL_FOLDER_VALUE); + .put(CodegenConstants.IMPL_FOLDER, IMPL_FOLDER_VALUE) + .put("title", "Test title"); return builder.build(); } diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/StaticDocOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/StaticDocOptionsProvider.java index 5e198a0e91a..d5d14238ec7 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/StaticDocOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/StaticDocOptionsProvider.java @@ -9,6 +9,10 @@ import java.util.Map; public class StaticDocOptionsProvider implements OptionsProvider { public static final String SORT_PARAMS_VALUE = "false"; public static final String ENSURE_UNIQUE_PARAMS_VALUE = "true"; + public static final String ARTIFACT_ID_VALUE = "swagger-java-client-test"; + public static final String INVOKER_PACKAGE_VALUE = "io.swagger.client.test"; + public static final String GROUP_ID_VALUE = "io.swagger.test"; + public static final String ARTIFACT_VERSION_VALUE = "1.0.0-SNAPSHOT"; @Override public String getLanguage() { @@ -20,6 +24,10 @@ public class StaticDocOptionsProvider implements OptionsProvider { ImmutableMap.Builder builder = new ImmutableMap.Builder(); return builder.put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) .put(CodegenConstants.ENSURE_UNIQUE_PARAMS, ENSURE_UNIQUE_PARAMS_VALUE) + .put(CodegenConstants.INVOKER_PACKAGE, INVOKER_PACKAGE_VALUE) + .put(CodegenConstants.GROUP_ID, GROUP_ID_VALUE) + .put(CodegenConstants.ARTIFACT_ID, ARTIFACT_ID_VALUE) + .put(CodegenConstants.ARTIFACT_VERSION, ARTIFACT_VERSION_VALUE) .build(); } diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/StaticHtmlOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/StaticHtmlOptionsProvider.java index f236ff40dc0..899eed6f4b7 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/StaticHtmlOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/StaticHtmlOptionsProvider.java @@ -9,6 +9,10 @@ import java.util.Map; public class StaticHtmlOptionsProvider implements OptionsProvider { public static final String SORT_PARAMS_VALUE = "false"; public static final String ENSURE_UNIQUE_PARAMS_VALUE = "true"; + public static final String ARTIFACT_ID_VALUE = "swagger-java-client-test"; + public static final String INVOKER_PACKAGE_VALUE = "io.swagger.client.test"; + public static final String GROUP_ID_VALUE = "io.swagger.test"; + public static final String ARTIFACT_VERSION_VALUE = "1.0.0-SNAPSHOT"; @Override public String getLanguage() { @@ -20,6 +24,16 @@ public class StaticHtmlOptionsProvider implements OptionsProvider { ImmutableMap.Builder builder = new ImmutableMap.Builder(); return builder.put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) .put(CodegenConstants.ENSURE_UNIQUE_PARAMS, ENSURE_UNIQUE_PARAMS_VALUE) + .put("appName", "Swagger Sample") + .put("appDescription", "A sample swagger server") + .put("infoUrl", "https://helloreverb.com") + .put("infoEmail", "hello@helloreverb.com") + .put("licenseInfo", "All rights reserved") + .put("licenseUrl", "http://apache.org/licenses/LICENSE-2.0.html") + .put(CodegenConstants.INVOKER_PACKAGE, INVOKER_PACKAGE_VALUE) + .put(CodegenConstants.GROUP_ID, GROUP_ID_VALUE) + .put(CodegenConstants.ARTIFACT_ID, ARTIFACT_ID_VALUE) + .put(CodegenConstants.ARTIFACT_VERSION, ARTIFACT_VERSION_VALUE) .build(); } From b61d76f291fbc4c53fbe395bbec044f2383798a3 Mon Sep 17 00:00:00 2001 From: evigeant Date: Mon, 25 Jan 2016 22:36:24 -0500 Subject: [PATCH 009/189] Removed a duplicate cliOptions (it is already added by the base class) --- .../java/io/swagger/codegen/languages/JaxRSServerCodegen.java | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JaxRSServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JaxRSServerCodegen.java index 679a0412777..2d7ebac7037 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JaxRSServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JaxRSServerCodegen.java @@ -51,7 +51,6 @@ public class JaxRSServerCodegen extends JavaClientCodegen { cliOptions.add(library); cliOptions.add(new CliOption(CodegenConstants.IMPL_FOLDER, CodegenConstants.IMPL_FOLDER_DESC)); cliOptions.add(new CliOption("title", "a title describing the application")); - cliOptions.add(new CliOption("dateLibrary", "the date library to use when generating code: joda or java8")); } @Override From f435cb65ce378d7ade3b7ac7ca249c94bdeb8f40 Mon Sep 17 00:00:00 2001 From: Joseph Zuromski Date: Wed, 27 Jan 2016 09:39:42 -0800 Subject: [PATCH 010/189] fix issue 1989: generate AnyObject type from json object type instead of generating strings --- .../main/java/io/swagger/codegen/languages/SwiftCodegen.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SwiftCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SwiftCodegen.java index ddd72e4230b..7def2a66833 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SwiftCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SwiftCodegen.java @@ -77,7 +77,8 @@ public class SwiftCodegen extends DefaultCodegen implements CodegenConfig { "Bool", "Void", "String", - "Character") + "Character", + "AnyObject") ); defaultIncludes = new HashSet( Arrays.asList( @@ -118,7 +119,7 @@ public class SwiftCodegen extends DefaultCodegen implements CodegenConfig { typeMapping.put("float", "Float"); typeMapping.put("number", "Double"); typeMapping.put("double", "Double"); - typeMapping.put("object", "String"); + typeMapping.put("object", "AnyObject"); typeMapping.put("file", "NSURL"); importMapping = new HashMap(); From 33b5286ba3f80c1fda4651fa0ebe56fd17a3f91c Mon Sep 17 00:00:00 2001 From: Joseph Zuromski Date: Wed, 27 Jan 2016 10:14:21 -0800 Subject: [PATCH 011/189] fix issue 1992 - ensure that our variable names don't match the names of the generated enums or we will get a compiler error. Also fix the escaping of reserved words to use an underscore as the comment implies instead of the word Swagger. --- .../java/io/swagger/codegen/languages/SwiftCodegen.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SwiftCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SwiftCodegen.java index ddd72e4230b..c294c1c9cf0 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SwiftCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SwiftCodegen.java @@ -185,7 +185,7 @@ public class SwiftCodegen extends DefaultCodegen implements CodegenConfig { @Override public String escapeReservedWord(String name) { - return "Swagger" + name; // add an underscore to the name + return "_" + name; // add an underscore to the name } @Override @@ -260,7 +260,11 @@ public class SwiftCodegen extends DefaultCodegen implements CodegenConfig { codegenProperty.allowableValues.put("values", swiftEnums); codegenProperty.datatypeWithEnum = StringUtils.left(codegenProperty.datatypeWithEnum, codegenProperty.datatypeWithEnum.length() - "Enum".length()); - if (reservedWords.contains(codegenProperty.datatypeWithEnum)) { + // Ensure that the enum type doesn't match a reserved word or + // the variable name doesn't match the generated enum type or the + // Swift compiler will generate an error + if (reservedWords.contains(codegenProperty.datatypeWithEnum) || + name.equals(codegenProperty.datatypeWithEnum)) { codegenProperty.datatypeWithEnum = escapeReservedWord(codegenProperty.datatypeWithEnum); } } From b95027194001818cb6ab4a2f9eee1c9d49dbb130 Mon Sep 17 00:00:00 2001 From: Andrew Z Allen Date: Wed, 27 Jan 2016 19:08:09 -0700 Subject: [PATCH 012/189] Add a Javascript (Closure) Angular generator. --- ...JavascriptClosureAngularClientCodegen.java | 206 ++++++++++++++++++ .../Javascript-Closure-Angular/api.mustache | 143 ++++++++++++ .../Javascript-Closure-Angular/model.mustache | 40 ++++ .../services/io.swagger.codegen.CodegenConfig | 1 + ...iptClosureAnularClientOptionsProvider.java | 30 +++ 5 files changed, 420 insertions(+) create mode 100644 modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClosureAngularClientCodegen.java create mode 100644 modules/swagger-codegen/src/main/resources/Javascript-Closure-Angular/api.mustache create mode 100644 modules/swagger-codegen/src/main/resources/Javascript-Closure-Angular/model.mustache create mode 100644 modules/swagger-codegen/src/test/java/io/swagger/codegen/options/JavascriptClosureAnularClientOptionsProvider.java diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClosureAngularClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClosureAngularClientCodegen.java new file mode 100644 index 00000000000..e74dff5f861 --- /dev/null +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClosureAngularClientCodegen.java @@ -0,0 +1,206 @@ +package io.swagger.codegen.languages; + +import io.swagger.codegen.CodegenModel; +import io.swagger.codegen.*; +import io.swagger.models.properties.*; + +import java.util.TreeSet; +import java.util.*; +import java.io.File; + +public class JavascriptClosureAngularClientCodegen extends DefaultCodegen implements CodegenConfig { + public JavascriptClosureAngularClientCodegen() { + super(); + + supportsInheritance = false; + reservedWords = new HashSet(Arrays.asList("abstract", + "continue", "for", "new", "switch", "assert", "default", "if", + "package", "synchronized", "do", "goto", "private", + "this", "break", "double", "implements", "protected", "throw", + "byte", "else", "import", "public", "throws", "case", "enum", + "instanceof", "return", "transient", "catch", "extends", "int", + "short", "try", "char", "final", "interface", "static", "void", + "class", "finally", "const", "super", "while")); + + languageSpecificPrimitives = new HashSet(Arrays.asList( + "string", + "boolean", + "number", + "Object", + "Blob", + "Date")); + instantiationTypes.put("array", "Array"); + + typeMapping = new HashMap(); + typeMapping.put("Array", "Array"); + typeMapping.put("array", "Array"); + typeMapping.put("List", "Array"); + typeMapping.put("boolean", "boolean"); + typeMapping.put("string", "string"); + typeMapping.put("int", "number"); + typeMapping.put("float", "number"); + typeMapping.put("number", "number"); + typeMapping.put("long", "number"); + typeMapping.put("short", "number"); + typeMapping.put("char", "string"); + typeMapping.put("double", "number"); + typeMapping.put("object", "Object"); + typeMapping.put("Object", "Object"); + typeMapping.put("File", "Blob"); + typeMapping.put("file", "Blob"); + typeMapping.put("integer", "number"); + typeMapping.put("Map", "Object"); + typeMapping.put("map", "Object"); + typeMapping.put("DateTime", "Date"); + + outputFolder = "generated-code/javascript-closure-angular"; + modelTemplateFiles.put("model.mustache", ".js"); + apiTemplateFiles.put("api.mustache", ".js"); + embeddedTemplateDir = templateDir = "Javascript-Closure-Angular"; + apiPackage = "API.Client"; + modelPackage = "API.Client"; + } + + @Override + public String getName() { + return "javascript-closure-angular"; + } + + @Override + public String getHelp() { + return "Generates a Javascript AngularJS client library annotated with Google Closure Compiler annotations" + + "(https://developers.google.com/closure/compiler/docs/js-for-compiler?hl=en)"; + } + + @Override + public CodegenType getTag() { + return CodegenType.CLIENT; + } + + @Override + public String escapeReservedWord(String name) { + return "_" + name; + } + + @Override + public String apiFileFolder() { + return outputFolder + "/" + apiPackage().replace('.', File.separatorChar); + } + + public String modelFileFolder() { + return outputFolder + "/" + modelPackage().replace('.', File.separatorChar); + } + + @Override + public String toVarName(String name) { + // replace - with _ e.g. created-at => created_at + name = name.replaceAll("-", "_"); + + // if it's all uppper case, do nothing + if (name.matches("^[A-Z_]*$")) + return name; + + // camelize the variable name + // pet_id => PetId + name = camelize(name, true); + + // for reserved word or word starting with number, append _ + if (reservedWords.contains(name) || name.matches("^\\d.*")) + name = escapeReservedWord(name); + + return name; + } + + @Override + public String toParamName(String name) { + // should be the same as variable name + return toVarName(name); + } + + @Override + public String toModelName(String name) { + // model name cannot use reserved keyword, e.g. return + if (reservedWords.contains(name)) + throw new RuntimeException(name + + " (reserved word) cannot be used as a model name"); + + // camelize the model name + // phone_number => PhoneNumber + return camelize(name); + } + + @Override + public String toModelFilename(String name) { + // should be the same as the model name + return toModelName(name); + } + + @Override + public String getTypeDeclaration(Property p) { + if (p instanceof ArrayProperty) { + ArrayProperty ap = (ArrayProperty) p; + Property inner = ap.getItems(); + return getSwaggerType(p) + ""; + } else if (p instanceof MapProperty) { + MapProperty mp = (MapProperty) p; + Property inner = mp.getAdditionalProperties(); + return "Object"; + } else if (p instanceof FileProperty) { + return "Object"; + } + String type = super.getTypeDeclaration(p); + if (type.equals("boolean") || + type.equals("Date") || + type.equals("number") || + type.equals("string")) { + return type; + } + return apiPackage + "." + type; + } + + @Override + public String getSwaggerType(Property p) { + String swaggerType = super.getSwaggerType(p); + String type = null; + if (typeMapping.containsKey(swaggerType)) { + type = typeMapping.get(swaggerType); + if (languageSpecificPrimitives.contains(type)) + return type; + } else + type = swaggerType; + return type; + } + + @Override + public Map postProcessModels(Map objs) { + + List models = (List) objs.get("models"); + for (Object _mo : models) { + Map mo = (Map) _mo; + CodegenModel cm = (CodegenModel) mo.get("model"); + cm.imports = new TreeSet(cm.imports); + for (CodegenProperty var : cm.vars) { + // handle default value for enum, e.g. available => StatusEnum.available + if (var.isEnum && var.defaultValue != null && !"null".equals(var.defaultValue)) { + var.defaultValue = var.datatypeWithEnum + "." + var.defaultValue; + } + } + } + return objs; + } + + @Override + public Map postProcessOperations(Map objs) { + if (objs.get("imports") instanceof List) { + List> imports = (ArrayList>)objs.get("imports"); + Collections.sort(imports, new Comparator>() { + public int compare(Map o1, Map o2) { + return o1.get("import").compareTo(o2.get("import")); + } + }); + objs.put("imports", imports); + } + return objs; + } + +} diff --git a/modules/swagger-codegen/src/main/resources/Javascript-Closure-Angular/api.mustache b/modules/swagger-codegen/src/main/resources/Javascript-Closure-Angular/api.mustache new file mode 100644 index 00000000000..e6934799f52 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/Javascript-Closure-Angular/api.mustache @@ -0,0 +1,143 @@ +/** + * @fileoverview AUTOMATICALLY GENERATED service for {{package}}.{{classname}}. + * Do not edit this file by hand or your changes will be lost next time it is + * generated.{{#appDescription}} + * + * {{ appDescription }}{{/appDescription}}{{#version}} + * Version: {{version}}{{/version}}{{#appContact}} + * Contact: {{appContact}}{{/appContact}} + * Generated at: {{generatedDate}} + * Generated by: {{generatorClass}} + */{{#licenseInfo}} +/** + * @license {{licenseInfo}}{{#licenseUrl}} + * {{licenseUrl}}{{/licenseUrl}} + */ +{{/licenseInfo}} + +goog.provide('{{package}}.{{classname}}'); + +{{#imports}} +goog.require('{{import}}'); +{{/imports}} +{{#operations}} + +/** +{{#description}} + * {{&description}} +{{/description}} + * @constructor + * @param {!angular.$http} $http + * @param {!angular.$injector} $injector + * @struct + */ +{{package}}.{{classname}} = function($http, $injector) { + /** @private {!string} */ + this.basePath_ = $injector.has('{{classname}}BasePath') ? + /** @type {!string} */ ($injector.get('{{classname}}BasePath')) : + '{{basePath}}'; + + /** @private {!Object} */ + this.defaultHeaders_ = $injector.has('{{classname}}DefaultHeaders') ? + /** @type {!Object} */ ( + $injector.get('{{classname}}DefaultHeaders')) : + {}; + + /** @private {!angular.$http} */ + this.http_ = $http; +} +{{package}}.{{classname}}.$inject = ['$http', '$injector']; +{{#operation}} + +/** + * {{summary}} + * {{notes}}{{#allParams}} + * @param {!{{{dataType}}}{{^required}}={{/required}}} {{^required}}opt_{{/required}}{{paramName}} {{description}}{{/allParams}} + * @param {!angular.$http.Config=} opt_extraHttpRequestParams Extra HTTP parameters to send. + * @return {!angular.$q.Promise{{#returnType}}{{/returnType}}} + */ +{{package}}.{{classname}}.prototype.{{nickname}} = function({{#allParams}}{{^required}}opt_{{/required}}{{paramName}}, {{/allParams}}opt_extraHttpRequestParams) { + /** @const {!string} */ + var path = this.basePath_ + '{{path}}'{{#pathParams}} + .replace('{' + '{{baseName}}' + '}', String({{^required}}opt_{{/required}}{{paramName}})){{/pathParams}}; +{{#required}} + + // verify required parameter '{{paramName}}' is set + if (!{{paramName}}) { + throw new Error('Missing required parameter {{paramName}} when calling {{nickname}}'); + } +{{/required}} + + /** @type {!Object} */ + var queryParameters = {}; +{{#queryParams}} + if ({{^required}}opt_{{/required}}{{paramName}} !== undefined) { + queryParameters['{{baseName}}'] = String({{^required}}opt_{{/required}}{{paramName}}); + } +{{/queryParams}} + + /** @type {!Object} */ + var headerParams = angular.copy(this.defaultHeaders_); +{{#headerParams}} + if ({{^required}}opt_{{/required}}{{paramName}} !== undefined) { + headerParams['{{baseName}}'] = {{^required}}opt_{{/required}}{{paramName}}; + } +{{/headerParams}} +{{#hasFormParams}} + + /** @type {!FormData} */ + var formParams = new FormData(); +{{/hasFormParams}} +{{#formParams}} + if ({{^required}}opt_{{/required}}{{paramName}} !== undefined) { + var {{paramName}}_ = /** @type {?} */ ({{^required}}opt_{{/required}}{{paramName}}); + if ({{paramName}}_ instanceof Blob) { + formParams.append('{{baseName}}', {{paramName}}_); + } else if (typeof {{paramName}}_ === 'string') { + formParams.append('{{baseName}}', {{paramName}}_); + } else { + throw new Error('Forms parameter {{^required}}opt_{{/required}}{{paramName}} is required to be a string or a Blob (https://developer.mozilla.org/en-US/docs/Web/API/Blob/Blob)'); + } + } +{{/formParams}} +{{#allParams}} +{{/allParams}} + + /** @type {!angular.$http.Config} */ + var httpRequestConfig = /** @type {!angular.$http.Config} */ ({ + url: path, + json: {{#hasFormParams}}false{{/hasFormParams}}{{^hasFormParams}}true{{/hasFormParams}},{{#bodyParam}} + data: {{paramName}},{{/bodyParam}}{{#hasFormParams}} + data: formParams,{{/hasFormParams}} + params: queryParameters, + headers: headerParams + }); + + if (opt_extraHttpRequestParams) { + // If an opt_extraHttpRequestParams object is passed in, override values + // set the generated config with the passed in values. + httpRequestConfig = angular.merge(httpRequestConfig, opt_extraHttpRequestParams); + } + + // This whole block is to work around a limitation in closure compiler. It + // would be better to call the $http service directly as a function, but that + // isn't permitted since it has methods attached to it. Manually confirmed to + // compile down to just a single method even with only SIMPLE optimization on. + // https://github.com/google/closure-compiler/blob/90769b826df65eabfb0211517b0d6d85c0c1c60b/contrib/externs/angular-1.4.js#L1393 + switch ('{{httpMethod}}') { + case 'GET': + return this.http_.get(path, httpRequestConfig); + case 'HEAD': + return this.http_.head(path, httpRequestConfig); + case 'POST': + return this.http_.post(path, {}, httpRequestConfig); + case 'PUT': + return this.http_.put(path, {}, httpRequestConfig); + case 'DELETE': + return this.http_.delete(path, httpRequestConfig); + case 'PATCH': + return this.http_.patch(path, {}, httpRequestConfig); + } +} +{{/operation}} +{{/operations}} diff --git a/modules/swagger-codegen/src/main/resources/Javascript-Closure-Angular/model.mustache b/modules/swagger-codegen/src/main/resources/Javascript-Closure-Angular/model.mustache new file mode 100644 index 00000000000..81ec7591c87 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/Javascript-Closure-Angular/model.mustache @@ -0,0 +1,40 @@ +{{#models}} +{{#model}} +goog.provide('{{package}}.{{name}}'); +{{/model}} +{{/models}} + +{{#models}} +{{#model}} +/** +{{#description}} + * {{{description}}} +{{/description}} + * @record + */ +{{package}}.{{classname}} = function() {} +{{#vars}} + +/** +{{#description}} + * {{{description}}} +{{/description}} +{{! Explicitly force types to be non-nullable using !. This is redundant but valid }} + * @type {!{{{datatype}}}} + * @export + */ +{{package}}.{{classname}}.prototype.{{name}}; +{{/vars}} + +{{#hasEnums}} +{{#vars}} +{{#isEnum}} +/** @enum {string} */ +{{package}}.{{classname}}.{{datatypeWithEnum}} = { {{#allowableValues}}{{#values}} + {{.}}: '{{.}}',{{/values}}{{/allowableValues}} +} +{{/isEnum}} +{{/vars}} +{{/hasEnums}} +{{/model}} +{{/models}} diff --git a/modules/swagger-codegen/src/main/resources/META-INF/services/io.swagger.codegen.CodegenConfig b/modules/swagger-codegen/src/main/resources/META-INF/services/io.swagger.codegen.CodegenConfig index 18015a9328b..d023052aa55 100644 --- a/modules/swagger-codegen/src/main/resources/META-INF/services/io.swagger.codegen.CodegenConfig +++ b/modules/swagger-codegen/src/main/resources/META-INF/services/io.swagger.codegen.CodegenConfig @@ -10,6 +10,7 @@ io.swagger.codegen.languages.JavaJerseyServerCodegen io.swagger.codegen.languages.JavaCXFServerCodegen io.swagger.codegen.languages.JavaInflectorServerCodegen io.swagger.codegen.languages.JavascriptClientCodegen +io.swagger.codegen.languages.JavascriptClosureAngularClientCodegen io.swagger.codegen.languages.JMeterCodegen io.swagger.codegen.languages.NodeJSServerCodegen io.swagger.codegen.languages.ObjcClientCodegen diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/JavascriptClosureAnularClientOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/JavascriptClosureAnularClientOptionsProvider.java new file mode 100644 index 00000000000..3bc5a3df22d --- /dev/null +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/JavascriptClosureAnularClientOptionsProvider.java @@ -0,0 +1,30 @@ +package io.swagger.codegen.options; + +import io.swagger.codegen.CodegenConstants; + +import com.google.common.collect.ImmutableMap; + +import java.util.Map; + +public class JavascriptClosureAnularClientOptionsProvider implements OptionsProvider { + public static final String SORT_PARAMS_VALUE = "false"; + public static final String ENSURE_UNIQUE_PARAMS_VALUE = "true"; + + @Override + public String getLanguage() { + return "javascript-closure-angular"; + } + + @Override + public Map createOptions() { + ImmutableMap.Builder builder = new ImmutableMap.Builder(); + return builder.put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) + .put(CodegenConstants.ENSURE_UNIQUE_PARAMS, ENSURE_UNIQUE_PARAMS_VALUE) + .build(); + } + + @Override + public boolean isServer() { + return false; + } +} From 8ea7cbc79d7b081b2c4fdc6122a4a361d24b5264 Mon Sep 17 00:00:00 2001 From: Andrew Z Allen Date: Wed, 27 Jan 2016 21:52:20 -0700 Subject: [PATCH 013/189] Add bash script to run --- bin/javascript-closure-angular.sh | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100755 bin/javascript-closure-angular.sh diff --git a/bin/javascript-closure-angular.sh b/bin/javascript-closure-angular.sh new file mode 100755 index 00000000000..efd830034dc --- /dev/null +++ b/bin/javascript-closure-angular.sh @@ -0,0 +1,31 @@ +#!/bin/sh + +SCRIPT="$0" + +while [ -h "$SCRIPT" ] ; do + ls=`ls -ld "$SCRIPT"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + SCRIPT="$link" + else + SCRIPT=`dirname "$SCRIPT"`/"$link" + fi +done + +if [ ! -d "${APP_DIR}" ]; then + APP_DIR=`dirname "$SCRIPT"`/.. + APP_DIR=`cd "${APP_DIR}"; pwd` +fi + +executable="./modules/swagger-codegen-cli/target/swagger-codegen-cli.jar" + +if [ ! -f "$executable" ] +then + mvn clean package +fi + +# if you've executed sbt assembly previously it will use that instead. +export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties" +ags="$@ generate -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l javascript-closure-angular -o samples/client/petstore/javascript-closure-angular" + +java $JAVA_OPTS -jar $executable $ags From af6926bd6f092b3d34b1e7207feb6c15e3a652a2 Mon Sep 17 00:00:00 2001 From: Andrew Z Allen Date: Wed, 27 Jan 2016 23:29:51 -0700 Subject: [PATCH 014/189] Add sample output from Javascript Closure Angular --- .../API/Client/Category.js | 19 + .../API/Client/Order.js | 50 ++ .../API/Client/Pet.js | 50 ++ .../API/Client/PetApi.js | 632 ++++++++++++++++++ .../API/Client/StoreApi.js | 251 +++++++ .../API/Client/Tag.js | 19 + .../API/Client/User.js | 56 ++ .../API/Client/UserApi.js | 472 +++++++++++++ 8 files changed, 1549 insertions(+) create mode 100644 samples/client/petstore/javascript-closure-angular/API/Client/Category.js create mode 100644 samples/client/petstore/javascript-closure-angular/API/Client/Order.js create mode 100644 samples/client/petstore/javascript-closure-angular/API/Client/Pet.js create mode 100644 samples/client/petstore/javascript-closure-angular/API/Client/PetApi.js create mode 100644 samples/client/petstore/javascript-closure-angular/API/Client/StoreApi.js create mode 100644 samples/client/petstore/javascript-closure-angular/API/Client/Tag.js create mode 100644 samples/client/petstore/javascript-closure-angular/API/Client/User.js create mode 100644 samples/client/petstore/javascript-closure-angular/API/Client/UserApi.js diff --git a/samples/client/petstore/javascript-closure-angular/API/Client/Category.js b/samples/client/petstore/javascript-closure-angular/API/Client/Category.js new file mode 100644 index 00000000000..fe9d23c34ff --- /dev/null +++ b/samples/client/petstore/javascript-closure-angular/API/Client/Category.js @@ -0,0 +1,19 @@ +goog.provide('API.Client.Category'); + +/** + * @record + */ +API.Client.Category = function() {} + +/** + * @type {!number} + * @export + */ +API.Client.Category.prototype.id; + +/** + * @type {!string} + * @export + */ +API.Client.Category.prototype.name; + diff --git a/samples/client/petstore/javascript-closure-angular/API/Client/Order.js b/samples/client/petstore/javascript-closure-angular/API/Client/Order.js new file mode 100644 index 00000000000..c4ec23a066a --- /dev/null +++ b/samples/client/petstore/javascript-closure-angular/API/Client/Order.js @@ -0,0 +1,50 @@ +goog.provide('API.Client.Order'); + +/** + * @record + */ +API.Client.Order = function() {} + +/** + * @type {!number} + * @export + */ +API.Client.Order.prototype.id; + +/** + * @type {!number} + * @export + */ +API.Client.Order.prototype.petId; + +/** + * @type {!number} + * @export + */ +API.Client.Order.prototype.quantity; + +/** + * @type {!Date} + * @export + */ +API.Client.Order.prototype.shipDate; + +/** + * Order Status + * @type {!string} + * @export + */ +API.Client.Order.prototype.status; + +/** + * @type {!boolean} + * @export + */ +API.Client.Order.prototype.complete; + +/** @enum {string} */ +API.Client.Order.StatusEnum = { + placed: 'placed', + approved: 'approved', + delivered: 'delivered', +} diff --git a/samples/client/petstore/javascript-closure-angular/API/Client/Pet.js b/samples/client/petstore/javascript-closure-angular/API/Client/Pet.js new file mode 100644 index 00000000000..2c734557b64 --- /dev/null +++ b/samples/client/petstore/javascript-closure-angular/API/Client/Pet.js @@ -0,0 +1,50 @@ +goog.provide('API.Client.Pet'); + +/** + * @record + */ +API.Client.Pet = function() {} + +/** + * @type {!number} + * @export + */ +API.Client.Pet.prototype.id; + +/** + * @type {!API.Client.Category} + * @export + */ +API.Client.Pet.prototype.category; + +/** + * @type {!string} + * @export + */ +API.Client.Pet.prototype.name; + +/** + * @type {!Array} + * @export + */ +API.Client.Pet.prototype.photoUrls; + +/** + * @type {!Array} + * @export + */ +API.Client.Pet.prototype.tags; + +/** + * pet status in the store + * @type {!string} + * @export + */ +API.Client.Pet.prototype.status; + +/** @enum {string} */ +API.Client.Pet.StatusEnum = { + available: 'available', + pending: 'pending', + sold: 'sold', +} diff --git a/samples/client/petstore/javascript-closure-angular/API/Client/PetApi.js b/samples/client/petstore/javascript-closure-angular/API/Client/PetApi.js new file mode 100644 index 00000000000..395a3d4041d --- /dev/null +++ b/samples/client/petstore/javascript-closure-angular/API/Client/PetApi.js @@ -0,0 +1,632 @@ +/** + * @fileoverview AUTOMATICALLY GENERATED service for API.Client.PetApi. + * Do not edit this file by hand or your changes will be lost next time it is + * generated. + * + * This is a sample server Petstore server. You can find out more about Swagger at <a href=\"http://swagger.io\">http://swagger.io</a> or on irc.freenode.net, #swagger. For this sample, you can use the api key \"special-key\" to test the authorization filters + * Version: 1.0.0 + * Generated at: 2016-01-27T23:29:24.021-07:00 + * Generated by: class io.swagger.codegen.languages.JavascriptClosureAngularClientCodegen + */ +/** + * @license Apache 2.0 + * http://www.apache.org/licenses/LICENSE-2.0.html + */ + +goog.provide('API.Client.PetApi'); + +goog.require('API.Client.Pet'); +goog.require('API.Client.binary'); + +/** + * @constructor + * @param {!angular.$http} $http + * @param {!angular.$injector} $injector + * @struct + */ +API.Client.PetApi = function($http, $injector) { + /** @private {!string} */ + this.basePath_ = $injector.has('PetApiBasePath') ? + /** @type {!string} */ ($injector.get('PetApiBasePath')) : + 'http://petstore.swagger.io/v2'; + + /** @private {!Object} */ + this.defaultHeaders_ = $injector.has('PetApiDefaultHeaders') ? + /** @type {!Object} */ ( + $injector.get('PetApiDefaultHeaders')) : + {}; + + /** @private {!angular.$http} */ + this.http_ = $http; +} +API.Client.PetApi.$inject = ['$http', '$injector']; + +/** + * Update an existing pet + * + * @param {!Pet=} opt_body Pet object that needs to be added to the store + * @param {!angular.$http.Config=} opt_extraHttpRequestParams Extra HTTP parameters to send. + * @return {!angular.$q.Promise} + */ +API.Client.PetApi.prototype.updatePet = function(opt_body, opt_extraHttpRequestParams) { + /** @const {!string} */ + var path = this.basePath_ + '/pet'; + + /** @type {!Object} */ + var queryParameters = {}; + + /** @type {!Object} */ + var headerParams = angular.copy(this.defaultHeaders_); + + /** @type {!angular.$http.Config} */ + var httpRequestConfig = /** @type {!angular.$http.Config} */ ({ + url: path, + json: true, + data: body, + params: queryParameters, + headers: headerParams + }); + + if (opt_extraHttpRequestParams) { + // If an opt_extraHttpRequestParams object is passed in, override values + // set the generated config with the passed in values. + httpRequestConfig = angular.merge(httpRequestConfig, opt_extraHttpRequestParams); + } + + // This whole block is to work around a limitation in closure compiler. It + // would be better to call the $http service directly as a function, but that + // isn't permitted since it has methods attached to it. Manually confirmed to + // compile down to just a single method even with only SIMPLE optimization on. + // https://github.com/google/closure-compiler/blob/90769b826df65eabfb0211517b0d6d85c0c1c60b/contrib/externs/angular-1.4.js#L1393 + switch ('PUT') { + case 'GET': + return this.http_.get(path, httpRequestConfig); + case 'HEAD': + return this.http_.head(path, httpRequestConfig); + case 'POST': + return this.http_.post(path, {}, httpRequestConfig); + case 'PUT': + return this.http_.put(path, {}, httpRequestConfig); + case 'DELETE': + return this.http_.delete(path, httpRequestConfig); + case 'PATCH': + return this.http_.patch(path, {}, httpRequestConfig); + } +} + +/** + * Add a new pet to the store + * + * @param {!Pet=} opt_body Pet object that needs to be added to the store + * @param {!angular.$http.Config=} opt_extraHttpRequestParams Extra HTTP parameters to send. + * @return {!angular.$q.Promise} + */ +API.Client.PetApi.prototype.addPet = function(opt_body, opt_extraHttpRequestParams) { + /** @const {!string} */ + var path = this.basePath_ + '/pet'; + + /** @type {!Object} */ + var queryParameters = {}; + + /** @type {!Object} */ + var headerParams = angular.copy(this.defaultHeaders_); + + /** @type {!angular.$http.Config} */ + var httpRequestConfig = /** @type {!angular.$http.Config} */ ({ + url: path, + json: true, + data: body, + params: queryParameters, + headers: headerParams + }); + + if (opt_extraHttpRequestParams) { + // If an opt_extraHttpRequestParams object is passed in, override values + // set the generated config with the passed in values. + httpRequestConfig = angular.merge(httpRequestConfig, opt_extraHttpRequestParams); + } + + // This whole block is to work around a limitation in closure compiler. It + // would be better to call the $http service directly as a function, but that + // isn't permitted since it has methods attached to it. Manually confirmed to + // compile down to just a single method even with only SIMPLE optimization on. + // https://github.com/google/closure-compiler/blob/90769b826df65eabfb0211517b0d6d85c0c1c60b/contrib/externs/angular-1.4.js#L1393 + switch ('POST') { + case 'GET': + return this.http_.get(path, httpRequestConfig); + case 'HEAD': + return this.http_.head(path, httpRequestConfig); + case 'POST': + return this.http_.post(path, {}, httpRequestConfig); + case 'PUT': + return this.http_.put(path, {}, httpRequestConfig); + case 'DELETE': + return this.http_.delete(path, httpRequestConfig); + case 'PATCH': + return this.http_.patch(path, {}, httpRequestConfig); + } +} + +/** + * Finds Pets by status + * Multiple status values can be provided with comma seperated strings + * @param {!Array=} opt_status Status values that need to be considered for filter + * @param {!angular.$http.Config=} opt_extraHttpRequestParams Extra HTTP parameters to send. + * @return {!angular.$q.Promise>} + */ +API.Client.PetApi.prototype.findPetsByStatus = function(opt_status, opt_extraHttpRequestParams) { + /** @const {!string} */ + var path = this.basePath_ + '/pet/findByStatus'; + + /** @type {!Object} */ + var queryParameters = {}; + if (opt_status !== undefined) { + queryParameters['status'] = String(opt_status); + } + + /** @type {!Object} */ + var headerParams = angular.copy(this.defaultHeaders_); + + /** @type {!angular.$http.Config} */ + var httpRequestConfig = /** @type {!angular.$http.Config} */ ({ + url: path, + json: true, + params: queryParameters, + headers: headerParams + }); + + if (opt_extraHttpRequestParams) { + // If an opt_extraHttpRequestParams object is passed in, override values + // set the generated config with the passed in values. + httpRequestConfig = angular.merge(httpRequestConfig, opt_extraHttpRequestParams); + } + + // This whole block is to work around a limitation in closure compiler. It + // would be better to call the $http service directly as a function, but that + // isn't permitted since it has methods attached to it. Manually confirmed to + // compile down to just a single method even with only SIMPLE optimization on. + // https://github.com/google/closure-compiler/blob/90769b826df65eabfb0211517b0d6d85c0c1c60b/contrib/externs/angular-1.4.js#L1393 + switch ('GET') { + case 'GET': + return this.http_.get(path, httpRequestConfig); + case 'HEAD': + return this.http_.head(path, httpRequestConfig); + case 'POST': + return this.http_.post(path, {}, httpRequestConfig); + case 'PUT': + return this.http_.put(path, {}, httpRequestConfig); + case 'DELETE': + return this.http_.delete(path, httpRequestConfig); + case 'PATCH': + return this.http_.patch(path, {}, httpRequestConfig); + } +} + +/** + * Finds Pets by tags + * Muliple tags can be provided with comma seperated strings. Use tag1, tag2, tag3 for testing. + * @param {!Array=} opt_tags Tags to filter by + * @param {!angular.$http.Config=} opt_extraHttpRequestParams Extra HTTP parameters to send. + * @return {!angular.$q.Promise>} + */ +API.Client.PetApi.prototype.findPetsByTags = function(opt_tags, opt_extraHttpRequestParams) { + /** @const {!string} */ + var path = this.basePath_ + '/pet/findByTags'; + + /** @type {!Object} */ + var queryParameters = {}; + if (opt_tags !== undefined) { + queryParameters['tags'] = String(opt_tags); + } + + /** @type {!Object} */ + var headerParams = angular.copy(this.defaultHeaders_); + + /** @type {!angular.$http.Config} */ + var httpRequestConfig = /** @type {!angular.$http.Config} */ ({ + url: path, + json: true, + params: queryParameters, + headers: headerParams + }); + + if (opt_extraHttpRequestParams) { + // If an opt_extraHttpRequestParams object is passed in, override values + // set the generated config with the passed in values. + httpRequestConfig = angular.merge(httpRequestConfig, opt_extraHttpRequestParams); + } + + // This whole block is to work around a limitation in closure compiler. It + // would be better to call the $http service directly as a function, but that + // isn't permitted since it has methods attached to it. Manually confirmed to + // compile down to just a single method even with only SIMPLE optimization on. + // https://github.com/google/closure-compiler/blob/90769b826df65eabfb0211517b0d6d85c0c1c60b/contrib/externs/angular-1.4.js#L1393 + switch ('GET') { + case 'GET': + return this.http_.get(path, httpRequestConfig); + case 'HEAD': + return this.http_.head(path, httpRequestConfig); + case 'POST': + return this.http_.post(path, {}, httpRequestConfig); + case 'PUT': + return this.http_.put(path, {}, httpRequestConfig); + case 'DELETE': + return this.http_.delete(path, httpRequestConfig); + case 'PATCH': + return this.http_.patch(path, {}, httpRequestConfig); + } +} + +/** + * Find pet by ID + * Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions + * @param {!number} petId ID of pet that needs to be fetched + * @param {!angular.$http.Config=} opt_extraHttpRequestParams Extra HTTP parameters to send. + * @return {!angular.$q.Promise} + */ +API.Client.PetApi.prototype.getPetById = function(petId, opt_extraHttpRequestParams) { + /** @const {!string} */ + var path = this.basePath_ + '/pet/{petId}' + .replace('{' + 'petId' + '}', String(petId)); + + /** @type {!Object} */ + var queryParameters = {}; + + /** @type {!Object} */ + var headerParams = angular.copy(this.defaultHeaders_); + + /** @type {!angular.$http.Config} */ + var httpRequestConfig = /** @type {!angular.$http.Config} */ ({ + url: path, + json: true, + params: queryParameters, + headers: headerParams + }); + + if (opt_extraHttpRequestParams) { + // If an opt_extraHttpRequestParams object is passed in, override values + // set the generated config with the passed in values. + httpRequestConfig = angular.merge(httpRequestConfig, opt_extraHttpRequestParams); + } + + // This whole block is to work around a limitation in closure compiler. It + // would be better to call the $http service directly as a function, but that + // isn't permitted since it has methods attached to it. Manually confirmed to + // compile down to just a single method even with only SIMPLE optimization on. + // https://github.com/google/closure-compiler/blob/90769b826df65eabfb0211517b0d6d85c0c1c60b/contrib/externs/angular-1.4.js#L1393 + switch ('GET') { + case 'GET': + return this.http_.get(path, httpRequestConfig); + case 'HEAD': + return this.http_.head(path, httpRequestConfig); + case 'POST': + return this.http_.post(path, {}, httpRequestConfig); + case 'PUT': + return this.http_.put(path, {}, httpRequestConfig); + case 'DELETE': + return this.http_.delete(path, httpRequestConfig); + case 'PATCH': + return this.http_.patch(path, {}, httpRequestConfig); + } +} + +/** + * Updates a pet in the store with form data + * + * @param {!string} petId ID of pet that needs to be updated + * @param {!string=} opt_name Updated name of the pet + * @param {!string=} opt_status Updated status of the pet + * @param {!angular.$http.Config=} opt_extraHttpRequestParams Extra HTTP parameters to send. + * @return {!angular.$q.Promise} + */ +API.Client.PetApi.prototype.updatePetWithForm = function(petId, opt_name, opt_status, opt_extraHttpRequestParams) { + /** @const {!string} */ + var path = this.basePath_ + '/pet/{petId}' + .replace('{' + 'petId' + '}', String(petId)); + + /** @type {!Object} */ + var queryParameters = {}; + + /** @type {!Object} */ + var headerParams = angular.copy(this.defaultHeaders_); + + /** @type {!FormData} */ + var formParams = new FormData(); + if (opt_name !== undefined) { + var name_ = /** @type {?} */ (opt_name); + if (name_ instanceof Blob) { + formParams.append('name', name_); + } else if (typeof name_ === 'string') { + formParams.append('name', name_); + } else { + throw new Error('Forms parameter opt_name is required to be a string or a Blob (https://developer.mozilla.org/en-US/docs/Web/API/Blob/Blob)'); + } + } + if (opt_status !== undefined) { + var status_ = /** @type {?} */ (opt_status); + if (status_ instanceof Blob) { + formParams.append('status', status_); + } else if (typeof status_ === 'string') { + formParams.append('status', status_); + } else { + throw new Error('Forms parameter opt_status is required to be a string or a Blob (https://developer.mozilla.org/en-US/docs/Web/API/Blob/Blob)'); + } + } + + /** @type {!angular.$http.Config} */ + var httpRequestConfig = /** @type {!angular.$http.Config} */ ({ + url: path, + json: false, + data: formParams, + params: queryParameters, + headers: headerParams + }); + + if (opt_extraHttpRequestParams) { + // If an opt_extraHttpRequestParams object is passed in, override values + // set the generated config with the passed in values. + httpRequestConfig = angular.merge(httpRequestConfig, opt_extraHttpRequestParams); + } + + // This whole block is to work around a limitation in closure compiler. It + // would be better to call the $http service directly as a function, but that + // isn't permitted since it has methods attached to it. Manually confirmed to + // compile down to just a single method even with only SIMPLE optimization on. + // https://github.com/google/closure-compiler/blob/90769b826df65eabfb0211517b0d6d85c0c1c60b/contrib/externs/angular-1.4.js#L1393 + switch ('POST') { + case 'GET': + return this.http_.get(path, httpRequestConfig); + case 'HEAD': + return this.http_.head(path, httpRequestConfig); + case 'POST': + return this.http_.post(path, {}, httpRequestConfig); + case 'PUT': + return this.http_.put(path, {}, httpRequestConfig); + case 'DELETE': + return this.http_.delete(path, httpRequestConfig); + case 'PATCH': + return this.http_.patch(path, {}, httpRequestConfig); + } +} + +/** + * Deletes a pet + * + * @param {!number} petId Pet id to delete + * @param {!string=} opt_apiKey + * @param {!angular.$http.Config=} opt_extraHttpRequestParams Extra HTTP parameters to send. + * @return {!angular.$q.Promise} + */ +API.Client.PetApi.prototype.deletePet = function(petId, opt_apiKey, opt_extraHttpRequestParams) { + /** @const {!string} */ + var path = this.basePath_ + '/pet/{petId}' + .replace('{' + 'petId' + '}', String(petId)); + + /** @type {!Object} */ + var queryParameters = {}; + + /** @type {!Object} */ + var headerParams = angular.copy(this.defaultHeaders_); + if (opt_apiKey !== undefined) { + headerParams['api_key'] = opt_apiKey; + } + + /** @type {!angular.$http.Config} */ + var httpRequestConfig = /** @type {!angular.$http.Config} */ ({ + url: path, + json: true, + params: queryParameters, + headers: headerParams + }); + + if (opt_extraHttpRequestParams) { + // If an opt_extraHttpRequestParams object is passed in, override values + // set the generated config with the passed in values. + httpRequestConfig = angular.merge(httpRequestConfig, opt_extraHttpRequestParams); + } + + // This whole block is to work around a limitation in closure compiler. It + // would be better to call the $http service directly as a function, but that + // isn't permitted since it has methods attached to it. Manually confirmed to + // compile down to just a single method even with only SIMPLE optimization on. + // https://github.com/google/closure-compiler/blob/90769b826df65eabfb0211517b0d6d85c0c1c60b/contrib/externs/angular-1.4.js#L1393 + switch ('DELETE') { + case 'GET': + return this.http_.get(path, httpRequestConfig); + case 'HEAD': + return this.http_.head(path, httpRequestConfig); + case 'POST': + return this.http_.post(path, {}, httpRequestConfig); + case 'PUT': + return this.http_.put(path, {}, httpRequestConfig); + case 'DELETE': + return this.http_.delete(path, httpRequestConfig); + case 'PATCH': + return this.http_.patch(path, {}, httpRequestConfig); + } +} + +/** + * uploads an image + * + * @param {!number} petId ID of pet to update + * @param {!string=} opt_additionalMetadata Additional data to pass to server + * @param {!Object=} opt_file file to upload + * @param {!angular.$http.Config=} opt_extraHttpRequestParams Extra HTTP parameters to send. + * @return {!angular.$q.Promise} + */ +API.Client.PetApi.prototype.uploadFile = function(petId, opt_additionalMetadata, opt_file, opt_extraHttpRequestParams) { + /** @const {!string} */ + var path = this.basePath_ + '/pet/{petId}/uploadImage' + .replace('{' + 'petId' + '}', String(petId)); + + /** @type {!Object} */ + var queryParameters = {}; + + /** @type {!Object} */ + var headerParams = angular.copy(this.defaultHeaders_); + + /** @type {!FormData} */ + var formParams = new FormData(); + if (opt_additionalMetadata !== undefined) { + var additionalMetadata_ = /** @type {?} */ (opt_additionalMetadata); + if (additionalMetadata_ instanceof Blob) { + formParams.append('additionalMetadata', additionalMetadata_); + } else if (typeof additionalMetadata_ === 'string') { + formParams.append('additionalMetadata', additionalMetadata_); + } else { + throw new Error('Forms parameter opt_additionalMetadata is required to be a string or a Blob (https://developer.mozilla.org/en-US/docs/Web/API/Blob/Blob)'); + } + } + if (opt_file !== undefined) { + var file_ = /** @type {?} */ (opt_file); + if (file_ instanceof Blob) { + formParams.append('file', file_); + } else if (typeof file_ === 'string') { + formParams.append('file', file_); + } else { + throw new Error('Forms parameter opt_file is required to be a string or a Blob (https://developer.mozilla.org/en-US/docs/Web/API/Blob/Blob)'); + } + } + + /** @type {!angular.$http.Config} */ + var httpRequestConfig = /** @type {!angular.$http.Config} */ ({ + url: path, + json: false, + data: formParams, + params: queryParameters, + headers: headerParams + }); + + if (opt_extraHttpRequestParams) { + // If an opt_extraHttpRequestParams object is passed in, override values + // set the generated config with the passed in values. + httpRequestConfig = angular.merge(httpRequestConfig, opt_extraHttpRequestParams); + } + + // This whole block is to work around a limitation in closure compiler. It + // would be better to call the $http service directly as a function, but that + // isn't permitted since it has methods attached to it. Manually confirmed to + // compile down to just a single method even with only SIMPLE optimization on. + // https://github.com/google/closure-compiler/blob/90769b826df65eabfb0211517b0d6d85c0c1c60b/contrib/externs/angular-1.4.js#L1393 + switch ('POST') { + case 'GET': + return this.http_.get(path, httpRequestConfig); + case 'HEAD': + return this.http_.head(path, httpRequestConfig); + case 'POST': + return this.http_.post(path, {}, httpRequestConfig); + case 'PUT': + return this.http_.put(path, {}, httpRequestConfig); + case 'DELETE': + return this.http_.delete(path, httpRequestConfig); + case 'PATCH': + return this.http_.patch(path, {}, httpRequestConfig); + } +} + +/** + * Fake endpoint to test byte array return by 'Find pet by ID' + * Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions + * @param {!number} petId ID of pet that needs to be fetched + * @param {!angular.$http.Config=} opt_extraHttpRequestParams Extra HTTP parameters to send. + * @return {!angular.$q.Promise} + */ +API.Client.PetApi.prototype.getPetByIdWithByteArray = function(petId, opt_extraHttpRequestParams) { + /** @const {!string} */ + var path = this.basePath_ + '/pet/{petId}?testing_byte_array=true' + .replace('{' + 'petId' + '}', String(petId)); + + /** @type {!Object} */ + var queryParameters = {}; + + /** @type {!Object} */ + var headerParams = angular.copy(this.defaultHeaders_); + + /** @type {!angular.$http.Config} */ + var httpRequestConfig = /** @type {!angular.$http.Config} */ ({ + url: path, + json: true, + params: queryParameters, + headers: headerParams + }); + + if (opt_extraHttpRequestParams) { + // If an opt_extraHttpRequestParams object is passed in, override values + // set the generated config with the passed in values. + httpRequestConfig = angular.merge(httpRequestConfig, opt_extraHttpRequestParams); + } + + // This whole block is to work around a limitation in closure compiler. It + // would be better to call the $http service directly as a function, but that + // isn't permitted since it has methods attached to it. Manually confirmed to + // compile down to just a single method even with only SIMPLE optimization on. + // https://github.com/google/closure-compiler/blob/90769b826df65eabfb0211517b0d6d85c0c1c60b/contrib/externs/angular-1.4.js#L1393 + switch ('GET') { + case 'GET': + return this.http_.get(path, httpRequestConfig); + case 'HEAD': + return this.http_.head(path, httpRequestConfig); + case 'POST': + return this.http_.post(path, {}, httpRequestConfig); + case 'PUT': + return this.http_.put(path, {}, httpRequestConfig); + case 'DELETE': + return this.http_.delete(path, httpRequestConfig); + case 'PATCH': + return this.http_.patch(path, {}, httpRequestConfig); + } +} + +/** + * Fake endpoint to test byte array in body parameter for adding a new pet to the store + * + * @param {!API.Client.binary=} opt_body Pet object in the form of byte array + * @param {!angular.$http.Config=} opt_extraHttpRequestParams Extra HTTP parameters to send. + * @return {!angular.$q.Promise} + */ +API.Client.PetApi.prototype.addPetUsingByteArray = function(opt_body, opt_extraHttpRequestParams) { + /** @const {!string} */ + var path = this.basePath_ + '/pet?testing_byte_array=true'; + + /** @type {!Object} */ + var queryParameters = {}; + + /** @type {!Object} */ + var headerParams = angular.copy(this.defaultHeaders_); + + /** @type {!angular.$http.Config} */ + var httpRequestConfig = /** @type {!angular.$http.Config} */ ({ + url: path, + json: true, + data: body, + params: queryParameters, + headers: headerParams + }); + + if (opt_extraHttpRequestParams) { + // If an opt_extraHttpRequestParams object is passed in, override values + // set the generated config with the passed in values. + httpRequestConfig = angular.merge(httpRequestConfig, opt_extraHttpRequestParams); + } + + // This whole block is to work around a limitation in closure compiler. It + // would be better to call the $http service directly as a function, but that + // isn't permitted since it has methods attached to it. Manually confirmed to + // compile down to just a single method even with only SIMPLE optimization on. + // https://github.com/google/closure-compiler/blob/90769b826df65eabfb0211517b0d6d85c0c1c60b/contrib/externs/angular-1.4.js#L1393 + switch ('POST') { + case 'GET': + return this.http_.get(path, httpRequestConfig); + case 'HEAD': + return this.http_.head(path, httpRequestConfig); + case 'POST': + return this.http_.post(path, {}, httpRequestConfig); + case 'PUT': + return this.http_.put(path, {}, httpRequestConfig); + case 'DELETE': + return this.http_.delete(path, httpRequestConfig); + case 'PATCH': + return this.http_.patch(path, {}, httpRequestConfig); + } +} diff --git a/samples/client/petstore/javascript-closure-angular/API/Client/StoreApi.js b/samples/client/petstore/javascript-closure-angular/API/Client/StoreApi.js new file mode 100644 index 00000000000..db9ec948a70 --- /dev/null +++ b/samples/client/petstore/javascript-closure-angular/API/Client/StoreApi.js @@ -0,0 +1,251 @@ +/** + * @fileoverview AUTOMATICALLY GENERATED service for API.Client.StoreApi. + * Do not edit this file by hand or your changes will be lost next time it is + * generated. + * + * This is a sample server Petstore server. You can find out more about Swagger at <a href=\"http://swagger.io\">http://swagger.io</a> or on irc.freenode.net, #swagger. For this sample, you can use the api key \"special-key\" to test the authorization filters + * Version: 1.0.0 + * Generated at: 2016-01-27T23:29:24.021-07:00 + * Generated by: class io.swagger.codegen.languages.JavascriptClosureAngularClientCodegen + */ +/** + * @license Apache 2.0 + * http://www.apache.org/licenses/LICENSE-2.0.html + */ + +goog.provide('API.Client.StoreApi'); + +goog.require('API.Client.Order'); + +/** + * @constructor + * @param {!angular.$http} $http + * @param {!angular.$injector} $injector + * @struct + */ +API.Client.StoreApi = function($http, $injector) { + /** @private {!string} */ + this.basePath_ = $injector.has('StoreApiBasePath') ? + /** @type {!string} */ ($injector.get('StoreApiBasePath')) : + 'http://petstore.swagger.io/v2'; + + /** @private {!Object} */ + this.defaultHeaders_ = $injector.has('StoreApiDefaultHeaders') ? + /** @type {!Object} */ ( + $injector.get('StoreApiDefaultHeaders')) : + {}; + + /** @private {!angular.$http} */ + this.http_ = $http; +} +API.Client.StoreApi.$inject = ['$http', '$injector']; + +/** + * Returns pet inventories by status + * Returns a map of status codes to quantities + * @param {!angular.$http.Config=} opt_extraHttpRequestParams Extra HTTP parameters to send. + * @return {!angular.$q.Promise>} + */ +API.Client.StoreApi.prototype.getInventory = function(opt_extraHttpRequestParams) { + /** @const {!string} */ + var path = this.basePath_ + '/store/inventory'; + + /** @type {!Object} */ + var queryParameters = {}; + + /** @type {!Object} */ + var headerParams = angular.copy(this.defaultHeaders_); + + /** @type {!angular.$http.Config} */ + var httpRequestConfig = /** @type {!angular.$http.Config} */ ({ + url: path, + json: true, + params: queryParameters, + headers: headerParams + }); + + if (opt_extraHttpRequestParams) { + // If an opt_extraHttpRequestParams object is passed in, override values + // set the generated config with the passed in values. + httpRequestConfig = angular.merge(httpRequestConfig, opt_extraHttpRequestParams); + } + + // This whole block is to work around a limitation in closure compiler. It + // would be better to call the $http service directly as a function, but that + // isn't permitted since it has methods attached to it. Manually confirmed to + // compile down to just a single method even with only SIMPLE optimization on. + // https://github.com/google/closure-compiler/blob/90769b826df65eabfb0211517b0d6d85c0c1c60b/contrib/externs/angular-1.4.js#L1393 + switch ('GET') { + case 'GET': + return this.http_.get(path, httpRequestConfig); + case 'HEAD': + return this.http_.head(path, httpRequestConfig); + case 'POST': + return this.http_.post(path, {}, httpRequestConfig); + case 'PUT': + return this.http_.put(path, {}, httpRequestConfig); + case 'DELETE': + return this.http_.delete(path, httpRequestConfig); + case 'PATCH': + return this.http_.patch(path, {}, httpRequestConfig); + } +} + +/** + * Place an order for a pet + * + * @param {!Order=} opt_body order placed for purchasing the pet + * @param {!angular.$http.Config=} opt_extraHttpRequestParams Extra HTTP parameters to send. + * @return {!angular.$q.Promise} + */ +API.Client.StoreApi.prototype.placeOrder = function(opt_body, opt_extraHttpRequestParams) { + /** @const {!string} */ + var path = this.basePath_ + '/store/order'; + + /** @type {!Object} */ + var queryParameters = {}; + + /** @type {!Object} */ + var headerParams = angular.copy(this.defaultHeaders_); + + /** @type {!angular.$http.Config} */ + var httpRequestConfig = /** @type {!angular.$http.Config} */ ({ + url: path, + json: true, + data: body, + params: queryParameters, + headers: headerParams + }); + + if (opt_extraHttpRequestParams) { + // If an opt_extraHttpRequestParams object is passed in, override values + // set the generated config with the passed in values. + httpRequestConfig = angular.merge(httpRequestConfig, opt_extraHttpRequestParams); + } + + // This whole block is to work around a limitation in closure compiler. It + // would be better to call the $http service directly as a function, but that + // isn't permitted since it has methods attached to it. Manually confirmed to + // compile down to just a single method even with only SIMPLE optimization on. + // https://github.com/google/closure-compiler/blob/90769b826df65eabfb0211517b0d6d85c0c1c60b/contrib/externs/angular-1.4.js#L1393 + switch ('POST') { + case 'GET': + return this.http_.get(path, httpRequestConfig); + case 'HEAD': + return this.http_.head(path, httpRequestConfig); + case 'POST': + return this.http_.post(path, {}, httpRequestConfig); + case 'PUT': + return this.http_.put(path, {}, httpRequestConfig); + case 'DELETE': + return this.http_.delete(path, httpRequestConfig); + case 'PATCH': + return this.http_.patch(path, {}, httpRequestConfig); + } +} + +/** + * Find purchase order by ID + * For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions + * @param {!string} orderId ID of pet that needs to be fetched + * @param {!angular.$http.Config=} opt_extraHttpRequestParams Extra HTTP parameters to send. + * @return {!angular.$q.Promise} + */ +API.Client.StoreApi.prototype.getOrderById = function(orderId, opt_extraHttpRequestParams) { + /** @const {!string} */ + var path = this.basePath_ + '/store/order/{orderId}' + .replace('{' + 'orderId' + '}', String(orderId)); + + /** @type {!Object} */ + var queryParameters = {}; + + /** @type {!Object} */ + var headerParams = angular.copy(this.defaultHeaders_); + + /** @type {!angular.$http.Config} */ + var httpRequestConfig = /** @type {!angular.$http.Config} */ ({ + url: path, + json: true, + params: queryParameters, + headers: headerParams + }); + + if (opt_extraHttpRequestParams) { + // If an opt_extraHttpRequestParams object is passed in, override values + // set the generated config with the passed in values. + httpRequestConfig = angular.merge(httpRequestConfig, opt_extraHttpRequestParams); + } + + // This whole block is to work around a limitation in closure compiler. It + // would be better to call the $http service directly as a function, but that + // isn't permitted since it has methods attached to it. Manually confirmed to + // compile down to just a single method even with only SIMPLE optimization on. + // https://github.com/google/closure-compiler/blob/90769b826df65eabfb0211517b0d6d85c0c1c60b/contrib/externs/angular-1.4.js#L1393 + switch ('GET') { + case 'GET': + return this.http_.get(path, httpRequestConfig); + case 'HEAD': + return this.http_.head(path, httpRequestConfig); + case 'POST': + return this.http_.post(path, {}, httpRequestConfig); + case 'PUT': + return this.http_.put(path, {}, httpRequestConfig); + case 'DELETE': + return this.http_.delete(path, httpRequestConfig); + case 'PATCH': + return this.http_.patch(path, {}, httpRequestConfig); + } +} + +/** + * Delete purchase order by ID + * For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors + * @param {!string} orderId ID of the order that needs to be deleted + * @param {!angular.$http.Config=} opt_extraHttpRequestParams Extra HTTP parameters to send. + * @return {!angular.$q.Promise} + */ +API.Client.StoreApi.prototype.deleteOrder = function(orderId, opt_extraHttpRequestParams) { + /** @const {!string} */ + var path = this.basePath_ + '/store/order/{orderId}' + .replace('{' + 'orderId' + '}', String(orderId)); + + /** @type {!Object} */ + var queryParameters = {}; + + /** @type {!Object} */ + var headerParams = angular.copy(this.defaultHeaders_); + + /** @type {!angular.$http.Config} */ + var httpRequestConfig = /** @type {!angular.$http.Config} */ ({ + url: path, + json: true, + params: queryParameters, + headers: headerParams + }); + + if (opt_extraHttpRequestParams) { + // If an opt_extraHttpRequestParams object is passed in, override values + // set the generated config with the passed in values. + httpRequestConfig = angular.merge(httpRequestConfig, opt_extraHttpRequestParams); + } + + // This whole block is to work around a limitation in closure compiler. It + // would be better to call the $http service directly as a function, but that + // isn't permitted since it has methods attached to it. Manually confirmed to + // compile down to just a single method even with only SIMPLE optimization on. + // https://github.com/google/closure-compiler/blob/90769b826df65eabfb0211517b0d6d85c0c1c60b/contrib/externs/angular-1.4.js#L1393 + switch ('DELETE') { + case 'GET': + return this.http_.get(path, httpRequestConfig); + case 'HEAD': + return this.http_.head(path, httpRequestConfig); + case 'POST': + return this.http_.post(path, {}, httpRequestConfig); + case 'PUT': + return this.http_.put(path, {}, httpRequestConfig); + case 'DELETE': + return this.http_.delete(path, httpRequestConfig); + case 'PATCH': + return this.http_.patch(path, {}, httpRequestConfig); + } +} diff --git a/samples/client/petstore/javascript-closure-angular/API/Client/Tag.js b/samples/client/petstore/javascript-closure-angular/API/Client/Tag.js new file mode 100644 index 00000000000..a65ee4658c8 --- /dev/null +++ b/samples/client/petstore/javascript-closure-angular/API/Client/Tag.js @@ -0,0 +1,19 @@ +goog.provide('API.Client.Tag'); + +/** + * @record + */ +API.Client.Tag = function() {} + +/** + * @type {!number} + * @export + */ +API.Client.Tag.prototype.id; + +/** + * @type {!string} + * @export + */ +API.Client.Tag.prototype.name; + diff --git a/samples/client/petstore/javascript-closure-angular/API/Client/User.js b/samples/client/petstore/javascript-closure-angular/API/Client/User.js new file mode 100644 index 00000000000..332c98a8028 --- /dev/null +++ b/samples/client/petstore/javascript-closure-angular/API/Client/User.js @@ -0,0 +1,56 @@ +goog.provide('API.Client.User'); + +/** + * @record + */ +API.Client.User = function() {} + +/** + * @type {!number} + * @export + */ +API.Client.User.prototype.id; + +/** + * @type {!string} + * @export + */ +API.Client.User.prototype.username; + +/** + * @type {!string} + * @export + */ +API.Client.User.prototype.firstName; + +/** + * @type {!string} + * @export + */ +API.Client.User.prototype.lastName; + +/** + * @type {!string} + * @export + */ +API.Client.User.prototype.email; + +/** + * @type {!string} + * @export + */ +API.Client.User.prototype.password; + +/** + * @type {!string} + * @export + */ +API.Client.User.prototype.phone; + +/** + * User Status + * @type {!number} + * @export + */ +API.Client.User.prototype.userStatus; + diff --git a/samples/client/petstore/javascript-closure-angular/API/Client/UserApi.js b/samples/client/petstore/javascript-closure-angular/API/Client/UserApi.js new file mode 100644 index 00000000000..017e750150c --- /dev/null +++ b/samples/client/petstore/javascript-closure-angular/API/Client/UserApi.js @@ -0,0 +1,472 @@ +/** + * @fileoverview AUTOMATICALLY GENERATED service for API.Client.UserApi. + * Do not edit this file by hand or your changes will be lost next time it is + * generated. + * + * This is a sample server Petstore server. You can find out more about Swagger at <a href=\"http://swagger.io\">http://swagger.io</a> or on irc.freenode.net, #swagger. For this sample, you can use the api key \"special-key\" to test the authorization filters + * Version: 1.0.0 + * Generated at: 2016-01-27T23:29:24.021-07:00 + * Generated by: class io.swagger.codegen.languages.JavascriptClosureAngularClientCodegen + */ +/** + * @license Apache 2.0 + * http://www.apache.org/licenses/LICENSE-2.0.html + */ + +goog.provide('API.Client.UserApi'); + +goog.require('API.Client.User'); +goog.require('java.util.List'); + +/** + * @constructor + * @param {!angular.$http} $http + * @param {!angular.$injector} $injector + * @struct + */ +API.Client.UserApi = function($http, $injector) { + /** @private {!string} */ + this.basePath_ = $injector.has('UserApiBasePath') ? + /** @type {!string} */ ($injector.get('UserApiBasePath')) : + 'http://petstore.swagger.io/v2'; + + /** @private {!Object} */ + this.defaultHeaders_ = $injector.has('UserApiDefaultHeaders') ? + /** @type {!Object} */ ( + $injector.get('UserApiDefaultHeaders')) : + {}; + + /** @private {!angular.$http} */ + this.http_ = $http; +} +API.Client.UserApi.$inject = ['$http', '$injector']; + +/** + * Create user + * This can only be done by the logged in user. + * @param {!User=} opt_body Created user object + * @param {!angular.$http.Config=} opt_extraHttpRequestParams Extra HTTP parameters to send. + * @return {!angular.$q.Promise} + */ +API.Client.UserApi.prototype.createUser = function(opt_body, opt_extraHttpRequestParams) { + /** @const {!string} */ + var path = this.basePath_ + '/user'; + + /** @type {!Object} */ + var queryParameters = {}; + + /** @type {!Object} */ + var headerParams = angular.copy(this.defaultHeaders_); + + /** @type {!angular.$http.Config} */ + var httpRequestConfig = /** @type {!angular.$http.Config} */ ({ + url: path, + json: true, + data: body, + params: queryParameters, + headers: headerParams + }); + + if (opt_extraHttpRequestParams) { + // If an opt_extraHttpRequestParams object is passed in, override values + // set the generated config with the passed in values. + httpRequestConfig = angular.merge(httpRequestConfig, opt_extraHttpRequestParams); + } + + // This whole block is to work around a limitation in closure compiler. It + // would be better to call the $http service directly as a function, but that + // isn't permitted since it has methods attached to it. Manually confirmed to + // compile down to just a single method even with only SIMPLE optimization on. + // https://github.com/google/closure-compiler/blob/90769b826df65eabfb0211517b0d6d85c0c1c60b/contrib/externs/angular-1.4.js#L1393 + switch ('POST') { + case 'GET': + return this.http_.get(path, httpRequestConfig); + case 'HEAD': + return this.http_.head(path, httpRequestConfig); + case 'POST': + return this.http_.post(path, {}, httpRequestConfig); + case 'PUT': + return this.http_.put(path, {}, httpRequestConfig); + case 'DELETE': + return this.http_.delete(path, httpRequestConfig); + case 'PATCH': + return this.http_.patch(path, {}, httpRequestConfig); + } +} + +/** + * Creates list of users with given input array + * + * @param {!Array=} opt_body List of user object + * @param {!angular.$http.Config=} opt_extraHttpRequestParams Extra HTTP parameters to send. + * @return {!angular.$q.Promise} + */ +API.Client.UserApi.prototype.createUsersWithArrayInput = function(opt_body, opt_extraHttpRequestParams) { + /** @const {!string} */ + var path = this.basePath_ + '/user/createWithArray'; + + /** @type {!Object} */ + var queryParameters = {}; + + /** @type {!Object} */ + var headerParams = angular.copy(this.defaultHeaders_); + + /** @type {!angular.$http.Config} */ + var httpRequestConfig = /** @type {!angular.$http.Config} */ ({ + url: path, + json: true, + data: body, + params: queryParameters, + headers: headerParams + }); + + if (opt_extraHttpRequestParams) { + // If an opt_extraHttpRequestParams object is passed in, override values + // set the generated config with the passed in values. + httpRequestConfig = angular.merge(httpRequestConfig, opt_extraHttpRequestParams); + } + + // This whole block is to work around a limitation in closure compiler. It + // would be better to call the $http service directly as a function, but that + // isn't permitted since it has methods attached to it. Manually confirmed to + // compile down to just a single method even with only SIMPLE optimization on. + // https://github.com/google/closure-compiler/blob/90769b826df65eabfb0211517b0d6d85c0c1c60b/contrib/externs/angular-1.4.js#L1393 + switch ('POST') { + case 'GET': + return this.http_.get(path, httpRequestConfig); + case 'HEAD': + return this.http_.head(path, httpRequestConfig); + case 'POST': + return this.http_.post(path, {}, httpRequestConfig); + case 'PUT': + return this.http_.put(path, {}, httpRequestConfig); + case 'DELETE': + return this.http_.delete(path, httpRequestConfig); + case 'PATCH': + return this.http_.patch(path, {}, httpRequestConfig); + } +} + +/** + * Creates list of users with given input array + * + * @param {!Array=} opt_body List of user object + * @param {!angular.$http.Config=} opt_extraHttpRequestParams Extra HTTP parameters to send. + * @return {!angular.$q.Promise} + */ +API.Client.UserApi.prototype.createUsersWithListInput = function(opt_body, opt_extraHttpRequestParams) { + /** @const {!string} */ + var path = this.basePath_ + '/user/createWithList'; + + /** @type {!Object} */ + var queryParameters = {}; + + /** @type {!Object} */ + var headerParams = angular.copy(this.defaultHeaders_); + + /** @type {!angular.$http.Config} */ + var httpRequestConfig = /** @type {!angular.$http.Config} */ ({ + url: path, + json: true, + data: body, + params: queryParameters, + headers: headerParams + }); + + if (opt_extraHttpRequestParams) { + // If an opt_extraHttpRequestParams object is passed in, override values + // set the generated config with the passed in values. + httpRequestConfig = angular.merge(httpRequestConfig, opt_extraHttpRequestParams); + } + + // This whole block is to work around a limitation in closure compiler. It + // would be better to call the $http service directly as a function, but that + // isn't permitted since it has methods attached to it. Manually confirmed to + // compile down to just a single method even with only SIMPLE optimization on. + // https://github.com/google/closure-compiler/blob/90769b826df65eabfb0211517b0d6d85c0c1c60b/contrib/externs/angular-1.4.js#L1393 + switch ('POST') { + case 'GET': + return this.http_.get(path, httpRequestConfig); + case 'HEAD': + return this.http_.head(path, httpRequestConfig); + case 'POST': + return this.http_.post(path, {}, httpRequestConfig); + case 'PUT': + return this.http_.put(path, {}, httpRequestConfig); + case 'DELETE': + return this.http_.delete(path, httpRequestConfig); + case 'PATCH': + return this.http_.patch(path, {}, httpRequestConfig); + } +} + +/** + * Logs user into the system + * + * @param {!string=} opt_username The user name for login + * @param {!string=} opt_password The password for login in clear text + * @param {!angular.$http.Config=} opt_extraHttpRequestParams Extra HTTP parameters to send. + * @return {!angular.$q.Promise} + */ +API.Client.UserApi.prototype.loginUser = function(opt_username, opt_password, opt_extraHttpRequestParams) { + /** @const {!string} */ + var path = this.basePath_ + '/user/login'; + + /** @type {!Object} */ + var queryParameters = {}; + if (opt_username !== undefined) { + queryParameters['username'] = String(opt_username); + } + if (opt_password !== undefined) { + queryParameters['password'] = String(opt_password); + } + + /** @type {!Object} */ + var headerParams = angular.copy(this.defaultHeaders_); + + /** @type {!angular.$http.Config} */ + var httpRequestConfig = /** @type {!angular.$http.Config} */ ({ + url: path, + json: true, + params: queryParameters, + headers: headerParams + }); + + if (opt_extraHttpRequestParams) { + // If an opt_extraHttpRequestParams object is passed in, override values + // set the generated config with the passed in values. + httpRequestConfig = angular.merge(httpRequestConfig, opt_extraHttpRequestParams); + } + + // This whole block is to work around a limitation in closure compiler. It + // would be better to call the $http service directly as a function, but that + // isn't permitted since it has methods attached to it. Manually confirmed to + // compile down to just a single method even with only SIMPLE optimization on. + // https://github.com/google/closure-compiler/blob/90769b826df65eabfb0211517b0d6d85c0c1c60b/contrib/externs/angular-1.4.js#L1393 + switch ('GET') { + case 'GET': + return this.http_.get(path, httpRequestConfig); + case 'HEAD': + return this.http_.head(path, httpRequestConfig); + case 'POST': + return this.http_.post(path, {}, httpRequestConfig); + case 'PUT': + return this.http_.put(path, {}, httpRequestConfig); + case 'DELETE': + return this.http_.delete(path, httpRequestConfig); + case 'PATCH': + return this.http_.patch(path, {}, httpRequestConfig); + } +} + +/** + * Logs out current logged in user session + * + * @param {!angular.$http.Config=} opt_extraHttpRequestParams Extra HTTP parameters to send. + * @return {!angular.$q.Promise} + */ +API.Client.UserApi.prototype.logoutUser = function(opt_extraHttpRequestParams) { + /** @const {!string} */ + var path = this.basePath_ + '/user/logout'; + + /** @type {!Object} */ + var queryParameters = {}; + + /** @type {!Object} */ + var headerParams = angular.copy(this.defaultHeaders_); + + /** @type {!angular.$http.Config} */ + var httpRequestConfig = /** @type {!angular.$http.Config} */ ({ + url: path, + json: true, + params: queryParameters, + headers: headerParams + }); + + if (opt_extraHttpRequestParams) { + // If an opt_extraHttpRequestParams object is passed in, override values + // set the generated config with the passed in values. + httpRequestConfig = angular.merge(httpRequestConfig, opt_extraHttpRequestParams); + } + + // This whole block is to work around a limitation in closure compiler. It + // would be better to call the $http service directly as a function, but that + // isn't permitted since it has methods attached to it. Manually confirmed to + // compile down to just a single method even with only SIMPLE optimization on. + // https://github.com/google/closure-compiler/blob/90769b826df65eabfb0211517b0d6d85c0c1c60b/contrib/externs/angular-1.4.js#L1393 + switch ('GET') { + case 'GET': + return this.http_.get(path, httpRequestConfig); + case 'HEAD': + return this.http_.head(path, httpRequestConfig); + case 'POST': + return this.http_.post(path, {}, httpRequestConfig); + case 'PUT': + return this.http_.put(path, {}, httpRequestConfig); + case 'DELETE': + return this.http_.delete(path, httpRequestConfig); + case 'PATCH': + return this.http_.patch(path, {}, httpRequestConfig); + } +} + +/** + * Get user by user name + * + * @param {!string} username The name that needs to be fetched. Use user1 for testing. + * @param {!angular.$http.Config=} opt_extraHttpRequestParams Extra HTTP parameters to send. + * @return {!angular.$q.Promise} + */ +API.Client.UserApi.prototype.getUserByName = function(username, opt_extraHttpRequestParams) { + /** @const {!string} */ + var path = this.basePath_ + '/user/{username}' + .replace('{' + 'username' + '}', String(username)); + + /** @type {!Object} */ + var queryParameters = {}; + + /** @type {!Object} */ + var headerParams = angular.copy(this.defaultHeaders_); + + /** @type {!angular.$http.Config} */ + var httpRequestConfig = /** @type {!angular.$http.Config} */ ({ + url: path, + json: true, + params: queryParameters, + headers: headerParams + }); + + if (opt_extraHttpRequestParams) { + // If an opt_extraHttpRequestParams object is passed in, override values + // set the generated config with the passed in values. + httpRequestConfig = angular.merge(httpRequestConfig, opt_extraHttpRequestParams); + } + + // This whole block is to work around a limitation in closure compiler. It + // would be better to call the $http service directly as a function, but that + // isn't permitted since it has methods attached to it. Manually confirmed to + // compile down to just a single method even with only SIMPLE optimization on. + // https://github.com/google/closure-compiler/blob/90769b826df65eabfb0211517b0d6d85c0c1c60b/contrib/externs/angular-1.4.js#L1393 + switch ('GET') { + case 'GET': + return this.http_.get(path, httpRequestConfig); + case 'HEAD': + return this.http_.head(path, httpRequestConfig); + case 'POST': + return this.http_.post(path, {}, httpRequestConfig); + case 'PUT': + return this.http_.put(path, {}, httpRequestConfig); + case 'DELETE': + return this.http_.delete(path, httpRequestConfig); + case 'PATCH': + return this.http_.patch(path, {}, httpRequestConfig); + } +} + +/** + * Updated user + * This can only be done by the logged in user. + * @param {!string} username name that need to be deleted + * @param {!User=} opt_body Updated user object + * @param {!angular.$http.Config=} opt_extraHttpRequestParams Extra HTTP parameters to send. + * @return {!angular.$q.Promise} + */ +API.Client.UserApi.prototype.updateUser = function(username, opt_body, opt_extraHttpRequestParams) { + /** @const {!string} */ + var path = this.basePath_ + '/user/{username}' + .replace('{' + 'username' + '}', String(username)); + + /** @type {!Object} */ + var queryParameters = {}; + + /** @type {!Object} */ + var headerParams = angular.copy(this.defaultHeaders_); + + /** @type {!angular.$http.Config} */ + var httpRequestConfig = /** @type {!angular.$http.Config} */ ({ + url: path, + json: true, + data: body, + params: queryParameters, + headers: headerParams + }); + + if (opt_extraHttpRequestParams) { + // If an opt_extraHttpRequestParams object is passed in, override values + // set the generated config with the passed in values. + httpRequestConfig = angular.merge(httpRequestConfig, opt_extraHttpRequestParams); + } + + // This whole block is to work around a limitation in closure compiler. It + // would be better to call the $http service directly as a function, but that + // isn't permitted since it has methods attached to it. Manually confirmed to + // compile down to just a single method even with only SIMPLE optimization on. + // https://github.com/google/closure-compiler/blob/90769b826df65eabfb0211517b0d6d85c0c1c60b/contrib/externs/angular-1.4.js#L1393 + switch ('PUT') { + case 'GET': + return this.http_.get(path, httpRequestConfig); + case 'HEAD': + return this.http_.head(path, httpRequestConfig); + case 'POST': + return this.http_.post(path, {}, httpRequestConfig); + case 'PUT': + return this.http_.put(path, {}, httpRequestConfig); + case 'DELETE': + return this.http_.delete(path, httpRequestConfig); + case 'PATCH': + return this.http_.patch(path, {}, httpRequestConfig); + } +} + +/** + * Delete user + * This can only be done by the logged in user. + * @param {!string} username The name that needs to be deleted + * @param {!angular.$http.Config=} opt_extraHttpRequestParams Extra HTTP parameters to send. + * @return {!angular.$q.Promise} + */ +API.Client.UserApi.prototype.deleteUser = function(username, opt_extraHttpRequestParams) { + /** @const {!string} */ + var path = this.basePath_ + '/user/{username}' + .replace('{' + 'username' + '}', String(username)); + + /** @type {!Object} */ + var queryParameters = {}; + + /** @type {!Object} */ + var headerParams = angular.copy(this.defaultHeaders_); + + /** @type {!angular.$http.Config} */ + var httpRequestConfig = /** @type {!angular.$http.Config} */ ({ + url: path, + json: true, + params: queryParameters, + headers: headerParams + }); + + if (opt_extraHttpRequestParams) { + // If an opt_extraHttpRequestParams object is passed in, override values + // set the generated config with the passed in values. + httpRequestConfig = angular.merge(httpRequestConfig, opt_extraHttpRequestParams); + } + + // This whole block is to work around a limitation in closure compiler. It + // would be better to call the $http service directly as a function, but that + // isn't permitted since it has methods attached to it. Manually confirmed to + // compile down to just a single method even with only SIMPLE optimization on. + // https://github.com/google/closure-compiler/blob/90769b826df65eabfb0211517b0d6d85c0c1c60b/contrib/externs/angular-1.4.js#L1393 + switch ('DELETE') { + case 'GET': + return this.http_.get(path, httpRequestConfig); + case 'HEAD': + return this.http_.head(path, httpRequestConfig); + case 'POST': + return this.http_.post(path, {}, httpRequestConfig); + case 'PUT': + return this.http_.put(path, {}, httpRequestConfig); + case 'DELETE': + return this.http_.delete(path, httpRequestConfig); + case 'PATCH': + return this.http_.patch(path, {}, httpRequestConfig); + } +} From b1a508012104de90167d5a655082209204532bfe Mon Sep 17 00:00:00 2001 From: Andrew Z Allen Date: Wed, 27 Jan 2016 23:51:25 -0700 Subject: [PATCH 015/189] Add default includes for Array and Object. --- .../languages/JavascriptClosureAngularClientCodegen.java | 6 ++++++ .../javascript-closure-angular/API/Client/PetApi.js | 2 +- .../javascript-closure-angular/API/Client/StoreApi.js | 2 +- .../javascript-closure-angular/API/Client/UserApi.js | 3 +-- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClosureAngularClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClosureAngularClientCodegen.java index e74dff5f861..71bf84f5c4f 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClosureAngularClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClosureAngularClientCodegen.java @@ -53,6 +53,12 @@ public class JavascriptClosureAngularClientCodegen extends DefaultCodegen implem typeMapping.put("map", "Object"); typeMapping.put("DateTime", "Date"); + importMapping = new HashMap(); + defaultIncludes = new HashSet(Arrays.asList( + "Object", + "Array" + )); + outputFolder = "generated-code/javascript-closure-angular"; modelTemplateFiles.put("model.mustache", ".js"); apiTemplateFiles.put("api.mustache", ".js"); diff --git a/samples/client/petstore/javascript-closure-angular/API/Client/PetApi.js b/samples/client/petstore/javascript-closure-angular/API/Client/PetApi.js index 395a3d4041d..d7c1b7b9841 100644 --- a/samples/client/petstore/javascript-closure-angular/API/Client/PetApi.js +++ b/samples/client/petstore/javascript-closure-angular/API/Client/PetApi.js @@ -5,7 +5,7 @@ * * This is a sample server Petstore server. You can find out more about Swagger at <a href=\"http://swagger.io\">http://swagger.io</a> or on irc.freenode.net, #swagger. For this sample, you can use the api key \"special-key\" to test the authorization filters * Version: 1.0.0 - * Generated at: 2016-01-27T23:29:24.021-07:00 + * Generated at: 2016-01-27T23:51:03.092-07:00 * Generated by: class io.swagger.codegen.languages.JavascriptClosureAngularClientCodegen */ /** diff --git a/samples/client/petstore/javascript-closure-angular/API/Client/StoreApi.js b/samples/client/petstore/javascript-closure-angular/API/Client/StoreApi.js index db9ec948a70..4e85bb35c51 100644 --- a/samples/client/petstore/javascript-closure-angular/API/Client/StoreApi.js +++ b/samples/client/petstore/javascript-closure-angular/API/Client/StoreApi.js @@ -5,7 +5,7 @@ * * This is a sample server Petstore server. You can find out more about Swagger at <a href=\"http://swagger.io\">http://swagger.io</a> or on irc.freenode.net, #swagger. For this sample, you can use the api key \"special-key\" to test the authorization filters * Version: 1.0.0 - * Generated at: 2016-01-27T23:29:24.021-07:00 + * Generated at: 2016-01-27T23:51:03.092-07:00 * Generated by: class io.swagger.codegen.languages.JavascriptClosureAngularClientCodegen */ /** diff --git a/samples/client/petstore/javascript-closure-angular/API/Client/UserApi.js b/samples/client/petstore/javascript-closure-angular/API/Client/UserApi.js index 017e750150c..a8762b531db 100644 --- a/samples/client/petstore/javascript-closure-angular/API/Client/UserApi.js +++ b/samples/client/petstore/javascript-closure-angular/API/Client/UserApi.js @@ -5,7 +5,7 @@ * * This is a sample server Petstore server. You can find out more about Swagger at <a href=\"http://swagger.io\">http://swagger.io</a> or on irc.freenode.net, #swagger. For this sample, you can use the api key \"special-key\" to test the authorization filters * Version: 1.0.0 - * Generated at: 2016-01-27T23:29:24.021-07:00 + * Generated at: 2016-01-27T23:51:03.092-07:00 * Generated by: class io.swagger.codegen.languages.JavascriptClosureAngularClientCodegen */ /** @@ -16,7 +16,6 @@ goog.provide('API.Client.UserApi'); goog.require('API.Client.User'); -goog.require('java.util.List'); /** * @constructor From 2efa50cb7fb8ad0139d4817d09d6c7bbd07767ec Mon Sep 17 00:00:00 2001 From: Maarten Groot Date: Thu, 28 Jan 2016 15:59:32 +0100 Subject: [PATCH 016/189] Support file downloading in Java jersey2 client --- .../Java/libraries/jersey2/ApiClient.mustache | 84 ++++++++++++++++++- 1 file changed, 81 insertions(+), 3 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/Java/libraries/jersey2/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/Java/libraries/jersey2/ApiClient.mustache index ec3c7a7f7c5..c37880c7eeb 100644 --- a/modules/swagger-codegen/src/main/resources/Java/libraries/jersey2/ApiClient.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/libraries/jersey2/ApiClient.mustache @@ -20,6 +20,9 @@ import org.glassfish.jersey.media.multipart.FormDataContentDisposition; import org.glassfish.jersey.media.multipart.MultiPart; import org.glassfish.jersey.media.multipart.MultiPartFeature; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; import java.util.Collection; import java.util.Collections; import java.util.Map; @@ -37,6 +40,8 @@ import java.io.UnsupportedEncodingException; import java.text.DateFormat; import java.text.SimpleDateFormat; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import {{invokerPackage}}.auth.Authentication; import {{invokerPackage}}.auth.HttpBasicAuth; @@ -52,6 +57,7 @@ public class ApiClient { private Client httpClient; private JSON json; + private String tempFolderPath = null; private Map authentications; @@ -235,9 +241,25 @@ public class ApiClient { return this; } + /** + * The path of temporary folder used to store downloaded files from endpoints + * with file response. The default value is null, i.e. using + * the system's default tempopary folder. + * + * @see https://docs.oracle.com/javase/7/docs/api/java/io/File.html#createTempFile(java.lang.String,%20java.lang.String,%20java.io.File) + */ + public String getTempFolderPath() { + return tempFolderPath; + } + + public ApiClient setTempFolderPath(String tempFolderPath) { + this.tempFolderPath = tempFolderPath; + return this; + } + /** * Connect timeout (in milliseconds). - */ + */ public int getConnectTimeout() { return connectionTimeout; } @@ -250,8 +272,8 @@ public class ApiClient { public ApiClient setConnectTimeout(int connectionTimeout) { this.connectionTimeout = connectionTimeout; httpClient.property(ClientProperties.CONNECT_TIMEOUT, connectionTimeout); - return this; - } + return this; + } /** * Get the date format used to parse/format date parameters. @@ -467,6 +489,13 @@ public class ApiClient { * Deserialize response body to Java object according to the Content-Type. */ public T deserialize(Response response, GenericType returnType) throws ApiException { + // Handle file downloading. + if (returnType.equals(File.class)) { + @SuppressWarnings("unchecked") + T file = (T) downloadFileFromResponse(response); + return file; + } + String contentType = null; List contentTypes = response.getHeaders().get("Content-Type"); if (contentTypes != null && !contentTypes.isEmpty()) @@ -477,6 +506,55 @@ public class ApiClient { return response.readEntity(returnType); } + /** + * Download file from the given response. + * @throws ApiException If fail to read file content from response and write to disk + */ + public File downloadFileFromResponse(Response response) throws ApiException { + try { + File file = prepareDownloadFile(response); + Files.copy(response.readEntity(InputStream.class), file.toPath()); + return file; + } catch (IOException e) { + throw new ApiException(e); + } + } + + public File prepareDownloadFile(Response response) throws IOException { + String filename = null; + String contentDisposition = (String) response.getHeaders().getFirst("Content-Disposition"); + if (contentDisposition != null && !"".equals(contentDisposition)) { + // Get filename from the Content-Disposition header. + Pattern pattern = Pattern.compile("filename=['\"]?([^'\"\\s]+)['\"]?"); + Matcher matcher = pattern.matcher(contentDisposition); + if (matcher.find()) + filename = matcher.group(1); + } + + String prefix = null; + String suffix = null; + if (filename == null) { + prefix = "download-"; + suffix = ""; + } else { + int pos = filename.lastIndexOf("."); + if (pos == -1) { + prefix = filename + "-"; + } else { + prefix = filename.substring(0, pos) + "-"; + suffix = filename.substring(pos); + } + // File.createTempFile requires the prefix to be at least three characters long + if (prefix.length() < 3) + prefix = "download-"; + } + + if (tempFolderPath == null) + return File.createTempFile(prefix, suffix); + else + return File.createTempFile(prefix, suffix, new File(tempFolderPath)); + } + /** * Invoke API by sending HTTP request with the given options. * From 77d39b96142337bb446e877f089396941400113b Mon Sep 17 00:00:00 2001 From: Maarten Groot Date: Thu, 28 Jan 2016 16:09:16 +0100 Subject: [PATCH 017/189] Fix indention --- .../resources/Java/libraries/jersey2/ApiClient.mustache | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/Java/libraries/jersey2/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/Java/libraries/jersey2/ApiClient.mustache index c37880c7eeb..66acc3811d2 100644 --- a/modules/swagger-codegen/src/main/resources/Java/libraries/jersey2/ApiClient.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/libraries/jersey2/ApiClient.mustache @@ -258,7 +258,7 @@ public class ApiClient { } /** - * Connect timeout (in milliseconds). + * Connect timeout (in milliseconds). */ public int getConnectTimeout() { return connectionTimeout; @@ -269,9 +269,9 @@ public class ApiClient { * A value of 0 means no timeout, otherwise values must be between 1 and * {@link Integer#MAX_VALUE}. */ - public ApiClient setConnectTimeout(int connectionTimeout) { - this.connectionTimeout = connectionTimeout; - httpClient.property(ClientProperties.CONNECT_TIMEOUT, connectionTimeout); + public ApiClient setConnectTimeout(int connectionTimeout) { + this.connectionTimeout = connectionTimeout; + httpClient.property(ClientProperties.CONNECT_TIMEOUT, connectionTimeout); return this; } From eee441b72a8d71e225cb85ddda290c0ac992b49e Mon Sep 17 00:00:00 2001 From: Maarten Groot Date: Thu, 28 Jan 2016 16:35:11 +0100 Subject: [PATCH 018/189] Update Petstore Java jersey2 sample --- .../java/io/swagger/client/ApiClient.java | 94 +++++++++++++++++-- .../java/io/swagger/client/ApiException.java | 2 +- .../java/io/swagger/client/Configuration.java | 2 +- .../src/main/java/io/swagger/client/JSON.java | 2 +- .../src/main/java/io/swagger/client/Pair.java | 2 +- .../java/io/swagger/client/StringUtil.java | 2 +- .../java/io/swagger/client/api/PetApi.java | 2 +- .../java/io/swagger/client/api/StoreApi.java | 2 +- .../java/io/swagger/client/api/UserApi.java | 2 +- .../io/swagger/client/auth/ApiKeyAuth.java | 2 +- .../io/swagger/client/auth/HttpBasicAuth.java | 2 +- .../java/io/swagger/client/auth/OAuth.java | 2 +- .../io/swagger/client/model/Category.java | 2 +- .../java/io/swagger/client/model/Order.java | 2 +- .../java/io/swagger/client/model/Pet.java | 2 +- .../java/io/swagger/client/model/Tag.java | 2 +- .../java/io/swagger/client/model/User.java | 2 +- 17 files changed, 102 insertions(+), 24 deletions(-) diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/ApiClient.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/ApiClient.java index c5b3f24e0a1..89fe7f60680 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/ApiClient.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/ApiClient.java @@ -20,6 +20,9 @@ import org.glassfish.jersey.media.multipart.FormDataContentDisposition; import org.glassfish.jersey.media.multipart.MultiPart; import org.glassfish.jersey.media.multipart.MultiPartFeature; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; import java.util.Collection; import java.util.Collections; import java.util.Map; @@ -37,13 +40,15 @@ import java.io.UnsupportedEncodingException; import java.text.DateFormat; import java.text.SimpleDateFormat; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import io.swagger.client.auth.Authentication; import io.swagger.client.auth.HttpBasicAuth; import io.swagger.client.auth.ApiKeyAuth; import io.swagger.client.auth.OAuth; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-15T19:00:52.199+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-28T16:23:25.238+01:00") public class ApiClient { private Map defaultHeaderMap = new HashMap(); private String basePath = "http://petstore.swagger.io/v2"; @@ -52,6 +57,7 @@ public class ApiClient { private Client httpClient; private JSON json; + private String tempFolderPath = null; private Map authentications; @@ -235,8 +241,24 @@ public class ApiClient { } /** - * Connect timeout (in milliseconds). - */ + * The path of temporary folder used to store downloaded files from endpoints + * with file response. The default value is null, i.e. using + * the system's default tempopary folder. + * + * @see https://docs.oracle.com/javase/7/docs/api/java/io/File.html#createTempFile(java.lang.String,%20java.lang.String,%20java.io.File) + */ + public String getTempFolderPath() { + return tempFolderPath; + } + + public ApiClient setTempFolderPath(String tempFolderPath) { + this.tempFolderPath = tempFolderPath; + return this; + } + + /** + * Connect timeout (in milliseconds). + */ public int getConnectTimeout() { return connectionTimeout; } @@ -246,11 +268,11 @@ public class ApiClient { * A value of 0 means no timeout, otherwise values must be between 1 and * {@link Integer#MAX_VALUE}. */ - public ApiClient setConnectTimeout(int connectionTimeout) { - this.connectionTimeout = connectionTimeout; - httpClient.property(ClientProperties.CONNECT_TIMEOUT, connectionTimeout); - return this; - } + public ApiClient setConnectTimeout(int connectionTimeout) { + this.connectionTimeout = connectionTimeout; + httpClient.property(ClientProperties.CONNECT_TIMEOUT, connectionTimeout); + return this; + } /** * Get the date format used to parse/format date parameters. @@ -466,6 +488,13 @@ public class ApiClient { * Deserialize response body to Java object according to the Content-Type. */ public T deserialize(Response response, GenericType returnType) throws ApiException { + // Handle file downloading. + if (returnType.equals(File.class)) { + @SuppressWarnings("unchecked") + T file = (T) downloadFileFromResponse(response); + return file; + } + String contentType = null; List contentTypes = response.getHeaders().get("Content-Type"); if (contentTypes != null && !contentTypes.isEmpty()) @@ -476,6 +505,55 @@ public class ApiClient { return response.readEntity(returnType); } + /** + * Download file from the given response. + * @throws ApiException If fail to read file content from response and write to disk + */ + public File downloadFileFromResponse(Response response) throws ApiException { + try { + File file = prepareDownloadFile(response); + Files.copy(response.readEntity(InputStream.class), file.toPath()); + return file; + } catch (IOException e) { + throw new ApiException(e); + } + } + + public File prepareDownloadFile(Response response) throws IOException { + String filename = null; + String contentDisposition = (String) response.getHeaders().getFirst("Content-Disposition"); + if (contentDisposition != null && !"".equals(contentDisposition)) { + // Get filename from the Content-Disposition header. + Pattern pattern = Pattern.compile("filename=['\"]?([^'\"\\s]+)['\"]?"); + Matcher matcher = pattern.matcher(contentDisposition); + if (matcher.find()) + filename = matcher.group(1); + } + + String prefix = null; + String suffix = null; + if (filename == null) { + prefix = "download-"; + suffix = ""; + } else { + int pos = filename.lastIndexOf("."); + if (pos == -1) { + prefix = filename + "-"; + } else { + prefix = filename.substring(0, pos) + "-"; + suffix = filename.substring(pos); + } + // File.createTempFile requires the prefix to be at least three characters long + if (prefix.length() < 3) + prefix = "download-"; + } + + if (tempFolderPath == null) + return File.createTempFile(prefix, suffix); + else + return File.createTempFile(prefix, suffix, new File(tempFolderPath)); + } + /** * Invoke API by sending HTTP request with the given options. * diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/ApiException.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/ApiException.java index 7143b32e51c..a5793c1d0de 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/ApiException.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/ApiException.java @@ -3,7 +3,7 @@ package io.swagger.client; import java.util.Map; import java.util.List; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:17.660+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-28T16:23:25.238+01:00") public class ApiException extends Exception { private int code = 0; private Map> responseHeaders = null; diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/Configuration.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/Configuration.java index 09d0c0f09f3..c316be8c331 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/Configuration.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/Configuration.java @@ -1,6 +1,6 @@ package io.swagger.client; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:17.660+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-28T16:23:25.238+01:00") public class Configuration { private static ApiClient defaultApiClient = new ApiClient(); diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/JSON.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/JSON.java index fd58be8fc05..0bd23b63091 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/JSON.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/JSON.java @@ -8,7 +8,7 @@ import java.text.DateFormat; import javax.ws.rs.ext.ContextResolver; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:17.660+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-28T16:23:25.238+01:00") public class JSON implements ContextResolver { private ObjectMapper mapper; diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/Pair.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/Pair.java index 477bd023bc9..69e856d15fb 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/Pair.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/Pair.java @@ -1,6 +1,6 @@ package io.swagger.client; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:17.660+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-28T16:23:25.238+01:00") public class Pair { private String name = ""; private String value = ""; diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/StringUtil.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/StringUtil.java index 24e13f49022..98258bfaf15 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/StringUtil.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/StringUtil.java @@ -1,6 +1,6 @@ package io.swagger.client; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:17.660+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-28T16:23:25.238+01:00") public class StringUtil { /** * Check if the given array contains the given value (with case-insensitive comparison). diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/PetApi.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/PetApi.java index 9155782024a..a4402076fa7 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/PetApi.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/PetApi.java @@ -12,7 +12,7 @@ import java.io.File; import java.util.*; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-15T19:00:52.199+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-28T16:23:25.238+01:00") public class PetApi { private ApiClient apiClient; diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/StoreApi.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/StoreApi.java index 8b2f86b70ab..f20b99b2ae7 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/StoreApi.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/StoreApi.java @@ -12,7 +12,7 @@ import io.swagger.client.model.Order; import java.util.*; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:17.660+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-28T16:23:25.238+01:00") public class StoreApi { private ApiClient apiClient; diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/UserApi.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/UserApi.java index 575cd5753d8..173c824fe3f 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/UserApi.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/UserApi.java @@ -12,7 +12,7 @@ import java.util.*; import java.util.*; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:17.660+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-28T16:23:25.238+01:00") public class UserApi { private ApiClient apiClient; diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/ApiKeyAuth.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/ApiKeyAuth.java index d589b808904..36168ed506f 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/ApiKeyAuth.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/ApiKeyAuth.java @@ -5,7 +5,7 @@ import io.swagger.client.Pair; import java.util.Map; import java.util.List; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:17.660+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-28T16:23:25.238+01:00") public class ApiKeyAuth implements Authentication { private final String location; private final String paramName; diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/HttpBasicAuth.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/HttpBasicAuth.java index d8e26f6e520..cfc36fc4777 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/HttpBasicAuth.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/HttpBasicAuth.java @@ -9,7 +9,7 @@ import java.util.List; import java.io.UnsupportedEncodingException; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:17.660+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-28T16:23:25.238+01:00") public class HttpBasicAuth implements Authentication { private String username; private String password; diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/OAuth.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/OAuth.java index b78c6a3b718..4586e3f1879 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/OAuth.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/auth/OAuth.java @@ -5,7 +5,7 @@ import io.swagger.client.Pair; import java.util.Map; import java.util.List; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:17.660+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-28T16:23:25.238+01:00") public class OAuth implements Authentication { private String accessToken; diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Category.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Category.java index 2235895ee8a..8c409d96e1c 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Category.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Category.java @@ -10,7 +10,7 @@ import io.swagger.annotations.ApiModelProperty; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-15T19:00:52.199+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-28T16:23:25.238+01:00") public class Category { private Long id = null; diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Order.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Order.java index 0d9b89eb58f..40d3765f1da 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Order.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Order.java @@ -11,7 +11,7 @@ import java.util.Date; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-15T19:00:52.199+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-28T16:23:25.238+01:00") public class Order { private Long id = null; diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Pet.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Pet.java index 9e5a2d97fb2..68a0dd6e67b 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Pet.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Pet.java @@ -13,7 +13,7 @@ import java.util.*; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-15T19:00:52.199+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-28T16:23:25.238+01:00") public class Pet { private Long id = null; diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Tag.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Tag.java index 4b2cc23bc23..769e5829b45 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Tag.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Tag.java @@ -10,7 +10,7 @@ import io.swagger.annotations.ApiModelProperty; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-15T19:00:52.199+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-28T16:23:25.238+01:00") public class Tag { private Long id = null; diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/User.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/User.java index 4f859759ce8..73de26c5e7a 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/User.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/User.java @@ -10,7 +10,7 @@ import io.swagger.annotations.ApiModelProperty; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-15T19:00:52.199+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-28T16:23:25.238+01:00") public class User { private Long id = null; From c7c983b733df202faeb7e9985f4944126d045adf Mon Sep 17 00:00:00 2001 From: "GU Yu (Byron)" Date: Fri, 29 Jan 2016 00:41:46 +0800 Subject: [PATCH 019/189] Add gradle IDE support plugins --- .../src/main/resources/Groovy/build.gradle.mustache | 2 ++ .../src/main/resources/Java/build.gradle.mustache | 3 +++ .../main/resources/Java/libraries/feign/build.gradle.mustache | 3 +++ .../resources/Java/libraries/jersey2/build.gradle.mustache | 3 +++ .../resources/Java/libraries/okhttp-gson/build.gradle.mustache | 3 +++ .../resources/Java/libraries/retrofit/build.gradle.mustache | 3 +++ .../resources/Java/libraries/retrofit2/build.gradle.mustache | 3 +++ 7 files changed, 20 insertions(+) diff --git a/modules/swagger-codegen/src/main/resources/Groovy/build.gradle.mustache b/modules/swagger-codegen/src/main/resources/Groovy/build.gradle.mustache index 342094c90ec..49edec87133 100644 --- a/modules/swagger-codegen/src/main/resources/Groovy/build.gradle.mustache +++ b/modules/swagger-codegen/src/main/resources/Groovy/build.gradle.mustache @@ -1,5 +1,7 @@ apply plugin: 'groovy' apply plugin: 'idea' +apply plugin: 'eclipse' + def artifactory = 'buildserver.supportspace.com' group = 'com.supportspace' archivesBaseName = 'swagger-gen-groovy' diff --git a/modules/swagger-codegen/src/main/resources/Java/build.gradle.mustache b/modules/swagger-codegen/src/main/resources/Java/build.gradle.mustache index 2725cbe1f86..e1065049e09 100644 --- a/modules/swagger-codegen/src/main/resources/Java/build.gradle.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/build.gradle.mustache @@ -1,3 +1,6 @@ +apply plugin: 'idea' +apply plugin: 'eclipse' + group = '{{groupId}}' version = '{{artifactVersion}}' diff --git a/modules/swagger-codegen/src/main/resources/Java/libraries/feign/build.gradle.mustache b/modules/swagger-codegen/src/main/resources/Java/libraries/feign/build.gradle.mustache index a528180df28..0a678861061 100644 --- a/modules/swagger-codegen/src/main/resources/Java/libraries/feign/build.gradle.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/libraries/feign/build.gradle.mustache @@ -1,3 +1,6 @@ +apply plugin: 'idea' +apply plugin: 'eclipse' + group = '{{groupId}}' version = '{{artifactVersion}}' diff --git a/modules/swagger-codegen/src/main/resources/Java/libraries/jersey2/build.gradle.mustache b/modules/swagger-codegen/src/main/resources/Java/libraries/jersey2/build.gradle.mustache index 09262af0d63..20b79fef22a 100644 --- a/modules/swagger-codegen/src/main/resources/Java/libraries/jersey2/build.gradle.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/libraries/jersey2/build.gradle.mustache @@ -1,3 +1,6 @@ +apply plugin: 'idea' +apply plugin: 'eclipse' + group = '{{groupId}}' version = '{{artifactVersion}}' diff --git a/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/build.gradle.mustache b/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/build.gradle.mustache index 9741cb13d10..adfd7d464c0 100644 --- a/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/build.gradle.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/build.gradle.mustache @@ -1,3 +1,6 @@ +apply plugin: 'idea' +apply plugin: 'eclipse' + group = '{{groupId}}' version = '{{artifactVersion}}' diff --git a/modules/swagger-codegen/src/main/resources/Java/libraries/retrofit/build.gradle.mustache b/modules/swagger-codegen/src/main/resources/Java/libraries/retrofit/build.gradle.mustache index 7072c8752f5..ca26e739496 100644 --- a/modules/swagger-codegen/src/main/resources/Java/libraries/retrofit/build.gradle.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/libraries/retrofit/build.gradle.mustache @@ -1,3 +1,6 @@ +apply plugin: 'idea' +apply plugin: 'eclipse' + group = '{{groupId}}' version = '{{artifactVersion}}' diff --git a/modules/swagger-codegen/src/main/resources/Java/libraries/retrofit2/build.gradle.mustache b/modules/swagger-codegen/src/main/resources/Java/libraries/retrofit2/build.gradle.mustache index b4f843603eb..adf19b2139a 100644 --- a/modules/swagger-codegen/src/main/resources/Java/libraries/retrofit2/build.gradle.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/libraries/retrofit2/build.gradle.mustache @@ -1,3 +1,6 @@ +apply plugin: 'idea' +apply plugin: 'eclipse' + group = '{{groupId}}' version = '{{artifactVersion}}' From 06ef76631cd83d67a8e1a5df6a96820377c6bb59 Mon Sep 17 00:00:00 2001 From: "GU Yu (Byron)" Date: Fri, 29 Jan 2016 01:23:45 +0800 Subject: [PATCH 020/189] Add .gradle into .gitignore. --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 240fed40de6..4b5649d69b5 100644 --- a/.gitignore +++ b/.gitignore @@ -72,3 +72,4 @@ samples/client/petstore/python/dev-requirements.txt.log samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/ samples/client/petstore/csharp/SwaggerClientTest/obj/Debug/ +**/.gradle/ From b9eb26baff33381c06f603c0ffc6a48a5a0c7bce Mon Sep 17 00:00:00 2001 From: Andrew Z Allen Date: Thu, 28 Jan 2016 21:38:45 -0700 Subject: [PATCH 021/189] Change indentation to +4 and map binary to string --- ...JavascriptClosureAngularClientCodegen.java | 374 +++++++++--------- 1 file changed, 189 insertions(+), 185 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClosureAngularClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClosureAngularClientCodegen.java index 71bf84f5c4f..382b804d9f0 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClosureAngularClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClosureAngularClientCodegen.java @@ -9,204 +9,208 @@ import java.util.*; import java.io.File; public class JavascriptClosureAngularClientCodegen extends DefaultCodegen implements CodegenConfig { - public JavascriptClosureAngularClientCodegen() { - super(); + public JavascriptClosureAngularClientCodegen() { + super(); - supportsInheritance = false; - reservedWords = new HashSet(Arrays.asList("abstract", - "continue", "for", "new", "switch", "assert", "default", "if", - "package", "synchronized", "do", "goto", "private", - "this", "break", "double", "implements", "protected", "throw", - "byte", "else", "import", "public", "throws", "case", "enum", - "instanceof", "return", "transient", "catch", "extends", "int", - "short", "try", "char", "final", "interface", "static", "void", - "class", "finally", "const", "super", "while")); + supportsInheritance = false; + reservedWords = new HashSet(Arrays.asList("abstract", + "continue", "for", "new", "switch", "assert", "default", "if", + "package", "synchronized", "do", "goto", "private", + "this", "break", "double", "implements", "protected", "throw", + "byte", "else", "import", "public", "throws", "case", "enum", + "instanceof", "return", "transient", "catch", "extends", "int", + "short", "try", "char", "final", "interface", "static", "void", + "class", "finally", "const", "super", "while")); - languageSpecificPrimitives = new HashSet(Arrays.asList( - "string", - "boolean", - "number", - "Object", - "Blob", - "Date")); - instantiationTypes.put("array", "Array"); + languageSpecificPrimitives = new HashSet(Arrays.asList( + "string", + "boolean", + "number", + "Object", + "Blob", + "Date")); + instantiationTypes.put("array", "Array"); - typeMapping = new HashMap(); - typeMapping.put("Array", "Array"); - typeMapping.put("array", "Array"); - typeMapping.put("List", "Array"); - typeMapping.put("boolean", "boolean"); - typeMapping.put("string", "string"); - typeMapping.put("int", "number"); - typeMapping.put("float", "number"); - typeMapping.put("number", "number"); - typeMapping.put("long", "number"); - typeMapping.put("short", "number"); - typeMapping.put("char", "string"); - typeMapping.put("double", "number"); - typeMapping.put("object", "Object"); - typeMapping.put("Object", "Object"); - typeMapping.put("File", "Blob"); - typeMapping.put("file", "Blob"); - typeMapping.put("integer", "number"); - typeMapping.put("Map", "Object"); - typeMapping.put("map", "Object"); - typeMapping.put("DateTime", "Date"); + typeMapping = new HashMap(); + typeMapping.put("Array", "Array"); + typeMapping.put("array", "Array"); + typeMapping.put("List", "Array"); + typeMapping.put("boolean", "boolean"); + typeMapping.put("string", "string"); + typeMapping.put("int", "number"); + typeMapping.put("float", "number"); + typeMapping.put("number", "number"); + typeMapping.put("long", "number"); + typeMapping.put("short", "number"); + typeMapping.put("char", "string"); + typeMapping.put("double", "number"); + typeMapping.put("object", "Object"); + typeMapping.put("Object", "Object"); + typeMapping.put("File", "Blob"); + typeMapping.put("file", "Blob"); + typeMapping.put("integer", "number"); + typeMapping.put("Map", "Object"); + typeMapping.put("map", "Object"); + typeMapping.put("DateTime", "Date"); - importMapping = new HashMap(); - defaultIncludes = new HashSet(Arrays.asList( - "Object", - "Array" - )); + importMapping = new HashMap(); + defaultIncludes = new HashSet(Arrays.asList( + "Object", + "Array", + "Blob" + )); - outputFolder = "generated-code/javascript-closure-angular"; - modelTemplateFiles.put("model.mustache", ".js"); - apiTemplateFiles.put("api.mustache", ".js"); - embeddedTemplateDir = templateDir = "Javascript-Closure-Angular"; - apiPackage = "API.Client"; - modelPackage = "API.Client"; - } + typeMapping.put("binary", "string"); - @Override - public String getName() { - return "javascript-closure-angular"; - } - - @Override - public String getHelp() { - return "Generates a Javascript AngularJS client library annotated with Google Closure Compiler annotations" + - "(https://developers.google.com/closure/compiler/docs/js-for-compiler?hl=en)"; - } - - @Override - public CodegenType getTag() { - return CodegenType.CLIENT; - } - - @Override - public String escapeReservedWord(String name) { - return "_" + name; - } - - @Override - public String apiFileFolder() { - return outputFolder + "/" + apiPackage().replace('.', File.separatorChar); - } - - public String modelFileFolder() { - return outputFolder + "/" + modelPackage().replace('.', File.separatorChar); - } - - @Override - public String toVarName(String name) { - // replace - with _ e.g. created-at => created_at - name = name.replaceAll("-", "_"); - - // if it's all uppper case, do nothing - if (name.matches("^[A-Z_]*$")) - return name; - - // camelize the variable name - // pet_id => PetId - name = camelize(name, true); - - // for reserved word or word starting with number, append _ - if (reservedWords.contains(name) || name.matches("^\\d.*")) - name = escapeReservedWord(name); - - return name; - } - - @Override - public String toParamName(String name) { - // should be the same as variable name - return toVarName(name); - } - - @Override - public String toModelName(String name) { - // model name cannot use reserved keyword, e.g. return - if (reservedWords.contains(name)) - throw new RuntimeException(name - + " (reserved word) cannot be used as a model name"); - - // camelize the model name - // phone_number => PhoneNumber - return camelize(name); - } - - @Override - public String toModelFilename(String name) { - // should be the same as the model name - return toModelName(name); - } - - @Override - public String getTypeDeclaration(Property p) { - if (p instanceof ArrayProperty) { - ArrayProperty ap = (ArrayProperty) p; - Property inner = ap.getItems(); - return getSwaggerType(p) + ""; - } else if (p instanceof MapProperty) { - MapProperty mp = (MapProperty) p; - Property inner = mp.getAdditionalProperties(); - return "Object"; - } else if (p instanceof FileProperty) { - return "Object"; + outputFolder = "generated-code/javascript-closure-angular"; + modelTemplateFiles.put("model.mustache", ".js"); + apiTemplateFiles.put("api.mustache", ".js"); + embeddedTemplateDir = templateDir = "Javascript-Closure-Angular"; + apiPackage = "API.Client"; + modelPackage = "API.Client"; } - String type = super.getTypeDeclaration(p); - if (type.equals("boolean") || - type.equals("Date") || - type.equals("number") || - type.equals("string")) { - return type; + + @Override + public String getName() { + return "javascript-closure-angular"; } - return apiPackage + "." + type; - } - @Override - public String getSwaggerType(Property p) { - String swaggerType = super.getSwaggerType(p); - String type = null; - if (typeMapping.containsKey(swaggerType)) { - type = typeMapping.get(swaggerType); - if (languageSpecificPrimitives.contains(type)) - return type; - } else - type = swaggerType; - return type; - } + @Override + public String getHelp() { + return "Generates a Javascript AngularJS client library annotated with Google Closure Compiler annotations" + + "(https://developers.google.com/closure/compiler/docs/js-for-compiler?hl=en)"; + } - @Override - public Map postProcessModels(Map objs) { + @Override + public CodegenType getTag() { + return CodegenType.CLIENT; + } - List models = (List) objs.get("models"); - for (Object _mo : models) { - Map mo = (Map) _mo; - CodegenModel cm = (CodegenModel) mo.get("model"); - cm.imports = new TreeSet(cm.imports); - for (CodegenProperty var : cm.vars) { - // handle default value for enum, e.g. available => StatusEnum.available - if (var.isEnum && var.defaultValue != null && !"null".equals(var.defaultValue)) { - var.defaultValue = var.datatypeWithEnum + "." + var.defaultValue; - } - } - } - return objs; - } + @Override + public String escapeReservedWord(String name) { + return "_" + name; + } - @Override - public Map postProcessOperations(Map objs) { - if (objs.get("imports") instanceof List) { - List> imports = (ArrayList>)objs.get("imports"); - Collections.sort(imports, new Comparator>() { - public int compare(Map o1, Map o2) { - return o1.get("import").compareTo(o2.get("import")); + @Override + public String apiFileFolder() { + return outputFolder + "/" + apiPackage().replace('.', File.separatorChar); + } + + public String modelFileFolder() { + return outputFolder + "/" + modelPackage().replace('.', File.separatorChar); + } + + @Override + public String toVarName(String name) { + // replace - with _ e.g. created-at => created_at + name = name.replaceAll("-", "_"); + + // if it's all uppper case, do nothing + if (name.matches("^[A-Z_]*$")) + return name; + + // camelize the variable name + // pet_id => PetId + name = camelize(name, true); + + // for reserved word or word starting with number, append _ + if (reservedWords.contains(name) || name.matches("^\\d.*")) + name = escapeReservedWord(name); + + return name; + } + + @Override + public String toParamName(String name) { + // should be the same as variable name + return toVarName(name); + } + + @Override + public String toModelName(String name) { + // model name cannot use reserved keyword, e.g. return + if (reservedWords.contains(name)) + throw new RuntimeException(name + + " (reserved word) cannot be used as a model name"); + + // camelize the model name + // phone_number => PhoneNumber + return camelize(name); + } + + @Override + public String toModelFilename(String name) { + // should be the same as the model name + return toModelName(name); + } + + @Override + public String getTypeDeclaration(Property p) { + if (p instanceof ArrayProperty) { + ArrayProperty ap = (ArrayProperty) p; + Property inner = ap.getItems(); + return getSwaggerType(p) + ""; + } else if (p instanceof MapProperty) { + MapProperty mp = (MapProperty) p; + Property inner = mp.getAdditionalProperties(); + return "Object"; + } else if (p instanceof FileProperty) { + return "Object"; } - }); - objs.put("imports", imports); + String type = super.getTypeDeclaration(p); + if (type.equals("boolean") || + type.equals("Date") || + type.equals("number") || + type.equals("string")) { + return type; + } + return apiPackage + "." + type; + } + + @Override + public String getSwaggerType(Property p) { + String swaggerType = super.getSwaggerType(p); + String type = null; + if (typeMapping.containsKey(swaggerType)) { + type = typeMapping.get(swaggerType); + if (languageSpecificPrimitives.contains(type)) { + return type; + } + } else + type = swaggerType; + return type; + } + + @Override + public Map postProcessModels(Map objs) { + + List models = (List) objs.get("models"); + for (Object _mo : models) { + Map mo = (Map) _mo; + CodegenModel cm = (CodegenModel) mo.get("model"); + cm.imports = new TreeSet(cm.imports); + for (CodegenProperty var : cm.vars) { + // handle default value for enum, e.g. available => StatusEnum.available + if (var.isEnum && var.defaultValue != null && !"null".equals(var.defaultValue)) { + var.defaultValue = var.datatypeWithEnum + "." + var.defaultValue; + } + } + } + return objs; + } + + @Override + public Map postProcessOperations(Map objs) { + if (objs.get("imports") instanceof List) { + List> imports = (ArrayList>)objs.get("imports"); + Collections.sort(imports, new Comparator>() { + public int compare(Map o1, Map o2) { + return o1.get("import").compareTo(o2.get("import")); + } + }); + objs.put("imports", imports); + } + return objs; } - return objs; - } } From f85f885191915ca8458f76a3295a66c0fa0363d8 Mon Sep 17 00:00:00 2001 From: Helge Rausch Date: Fri, 29 Jan 2016 11:43:38 +0100 Subject: [PATCH 022/189] Don't force explicit configuration of CA cert location In order to allow openssl to figure out the location of CA certificates on its own, don't apply the `ssl_ca_cert` configuration parameter if it is not explicitly set. --- .../src/main/resources/ruby/api_client.mustache | 3 ++- samples/client/petstore/ruby/lib/petstore/api_client.rb | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/ruby/api_client.mustache b/modules/swagger-codegen/src/main/resources/ruby/api_client.mustache index e3f54f10994..2ad1491ee1a 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/api_client.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/api_client.mustache @@ -75,10 +75,11 @@ module {{moduleName}} :ssl_verifypeer => @config.verify_ssl, :sslcert => @config.cert_file, :sslkey => @config.key_file, - :cainfo => @config.ssl_ca_cert, :verbose => @config.debugging } + req_opts[:cainfo] = @config.ssl_ca_cert if @config.ssl_ca_cert + if [:post, :patch, :put, :delete].include?(http_method) req_body = build_request_body(header_params, form_params, opts[:body]) req_opts.update :body => req_body diff --git a/samples/client/petstore/ruby/lib/petstore/api_client.rb b/samples/client/petstore/ruby/lib/petstore/api_client.rb index e00be7176b0..09d5777f5e8 100644 --- a/samples/client/petstore/ruby/lib/petstore/api_client.rb +++ b/samples/client/petstore/ruby/lib/petstore/api_client.rb @@ -75,10 +75,11 @@ module Petstore :ssl_verifypeer => @config.verify_ssl, :sslcert => @config.cert_file, :sslkey => @config.key_file, - :cainfo => @config.ssl_ca_cert, :verbose => @config.debugging } + req_opts[:cainfo] = @config.ssl_ca_cert if @config.ssl_ca_cert + if [:post, :patch, :put, :delete].include?(http_method) req_body = build_request_body(header_params, form_params, opts[:body]) req_opts.update :body => req_body From 46441433e8f47cc2501830e11dd2076346eb20d7 Mon Sep 17 00:00:00 2001 From: chameleon82 Date: Fri, 29 Jan 2016 17:48:22 +0600 Subject: [PATCH 023/189] initialize commit JaxRS-Resteasy module --- .../languages/JavaResteasyServerCodegen.java | 332 ++++++++++++++++++ .../resteasy3_0_11/ApiException.mustache | 10 + .../resteasy3_0_11/ApiOriginFilter.mustache | 22 ++ .../ApiResponseMessage.mustache | 69 ++++ .../JodaDateTimeProvider.mustache | 44 +++ .../JodaLocalDateProvider.mustache | 44 +++ .../resteasy3_0_11/LocalDateProvider.mustache | 44 +++ .../LocalDateTimeProvider.mustache | 44 +++ .../resteasy3_0_11/NotFoundException.mustache | 10 + .../JavaJaxRS/resteasy3_0_11/README.mustache | 23 ++ .../resteasy3_0_11/RestApplication.mustache | 9 + .../resteasy3_0_11/StringUtil.mustache | 42 +++ .../resteasy3_0_11/allowableValues.mustache | 1 + .../JavaJaxRS/resteasy3_0_11/api.mustache | 40 +++ .../resteasy3_0_11/apiService.mustache | 25 ++ .../resteasy3_0_11/apiServiceFactory.mustache | 15 + .../resteasy3_0_11/apiServiceImpl.mustache | 29 ++ .../resteasy3_0_11/bodyParams.mustache | 1 + .../resteasy3_0_11/enumClass.mustache | 17 + .../resteasy3_0_11/enumOuterClass.mustache | 3 + .../resteasy3_0_11/formParams.mustache | 2 + .../generatedAnnotation.mustache | 1 + .../JavaJaxRS/resteasy3_0_11/gradle.mustache | 25 ++ .../resteasy3_0_11/headerParams.mustache | 1 + .../resteasy3_0_11/jboss-web.mustache | 3 + .../JavaJaxRS/resteasy3_0_11/model.mustache | 16 + .../resteasy3_0_11/pathParams.mustache | 1 + .../JavaJaxRS/resteasy3_0_11/pojo.mustache | 66 ++++ .../JavaJaxRS/resteasy3_0_11/pom.mustache | 178 ++++++++++ .../resteasy3_0_11/queryParams.mustache | 1 + .../resteasy3_0_11/returnTypes.mustache | 1 + .../resteasy3_0_11/serviceBodyParams.mustache | 1 + .../resteasy3_0_11/serviceFormParams.mustache | 1 + .../serviceHeaderParams.mustache | 1 + .../resteasy3_0_11/servicePathParams.mustache | 1 + .../serviceQueryParams.mustache | 1 + .../JavaJaxRS/resteasy3_0_11/web.mustache | 14 + .../services/io.swagger.codegen.CodegenConfig | 1 + 38 files changed, 1139 insertions(+) create mode 100644 modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaResteasyServerCodegen.java create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/ApiException.mustache create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/ApiOriginFilter.mustache create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/ApiResponseMessage.mustache create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/JodaDateTimeProvider.mustache create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/JodaLocalDateProvider.mustache create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/LocalDateProvider.mustache create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/LocalDateTimeProvider.mustache create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/NotFoundException.mustache create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/README.mustache create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/RestApplication.mustache create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/StringUtil.mustache create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/allowableValues.mustache create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/api.mustache create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/apiService.mustache create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/apiServiceFactory.mustache create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/apiServiceImpl.mustache create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/bodyParams.mustache create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/enumClass.mustache create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/enumOuterClass.mustache create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/formParams.mustache create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/generatedAnnotation.mustache create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/gradle.mustache create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/headerParams.mustache create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/jboss-web.mustache create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/model.mustache create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/pathParams.mustache create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/pojo.mustache create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/pom.mustache create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/queryParams.mustache create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/returnTypes.mustache create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/serviceBodyParams.mustache create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/serviceFormParams.mustache create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/serviceHeaderParams.mustache create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/servicePathParams.mustache create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/serviceQueryParams.mustache create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/web.mustache diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaResteasyServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaResteasyServerCodegen.java new file mode 100644 index 00000000000..8831c8f1a26 --- /dev/null +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaResteasyServerCodegen.java @@ -0,0 +1,332 @@ +package io.swagger.codegen.languages; + +import io.swagger.codegen.*; +import io.swagger.models.Operation; +import io.swagger.models.Path; +import io.swagger.models.Swagger; +import org.apache.commons.lang.StringUtils; + +import java.io.File; +import java.util.*; + +public class JavaResteasyServerCodegen extends JavaClientCodegen implements CodegenConfig { + + protected String dateLibrary = "default"; + protected String title = "Swagger Server"; + protected String implFolder = "src/main/java"; + + public static final String DATE_LIBRARY = "dateLibrary"; + + public JavaResteasyServerCodegen() { + + super(); + + sourceFolder = "src/gen/java"; + invokerPackage = "io.swagger.api"; + artifactId = "swagger-jaxrs-resteasy-server"; + + outputFolder = "generated-code/javaJaxRS"; + modelTemplateFiles.put("model.mustache", ".java"); + apiTemplateFiles.put("api.mustache", ".java"); + apiTemplateFiles.put("apiService.mustache", ".java"); + apiTemplateFiles.put("apiServiceImpl.mustache", ".java"); + apiTemplateFiles.put("apiServiceFactory.mustache", ".java"); + apiPackage = "io.swagger.api"; + modelPackage = "io.swagger.model"; + + additionalProperties.put("title", title); + + embeddedTemplateDir = templateDir = "JavaJaxRS" + File.separator + "resteasy3_0_11"; + + for (int i = 0; i < cliOptions.size(); i++) { + if (CodegenConstants.LIBRARY.equals(cliOptions.get(i).getOpt())) { + cliOptions.remove(i); + break; + } + } + + CliOption dateLibrary = new CliOption(DATE_LIBRARY, "Option. Date library to use"); + Map dateOptions = new HashMap(); + dateOptions.put("java8", "Java 8 native"); + dateOptions.put("joda", "Joda"); + dateLibrary.setEnum(dateOptions); + + cliOptions.add(dateLibrary); + + CliOption library = new CliOption(CodegenConstants.LIBRARY, "library template (sub-template) to use"); + library.setDefault(DEFAULT_LIBRARY); + + Map supportedLibraries = new LinkedHashMap(); + + supportedLibraries.put(DEFAULT_LIBRARY, "Resteasy core 3.0.11"); + library.setEnum(supportedLibraries); + + cliOptions.add(library); + cliOptions.add(new CliOption(CodegenConstants.IMPL_FOLDER, CodegenConstants.IMPL_FOLDER_DESC)); + } + + @Override + public CodegenType getTag() { + return CodegenType.SERVER; + } + + @Override + public String getName() { + return "jaxrs-resteasy"; + } + + @Override + public String getHelp() { + return "Generates a Java JAXRS-Resteasy Server application."; + } + + @Override + public void processOpts() { + super.processOpts(); + + if (additionalProperties.containsKey(CodegenConstants.IMPL_FOLDER)) { + implFolder = (String) additionalProperties.get(CodegenConstants.IMPL_FOLDER); + } + + supportingFiles.clear(); +// supportingFiles.add(new SupportingFile("pom.mustache", "", "pom.xml")); + supportingFiles.add(new SupportingFile("gradle.mustache", "", "build.gradle")); + supportingFiles.add(new SupportingFile("README.mustache", "", "README.md")); + supportingFiles.add(new SupportingFile("ApiException.mustache", + (sourceFolder + '/' + apiPackage).replace(".", "/"), "ApiException.java")); + supportingFiles.add(new SupportingFile("ApiOriginFilter.mustache", + (sourceFolder + '/' + apiPackage).replace(".", "/"), "ApiOriginFilter.java")); + supportingFiles.add(new SupportingFile("ApiResponseMessage.mustache", + (sourceFolder + '/' + apiPackage).replace(".", "/"), "ApiResponseMessage.java")); + supportingFiles.add(new SupportingFile("NotFoundException.mustache", + (sourceFolder + '/' + apiPackage).replace(".", "/"), "NotFoundException.java")); + supportingFiles.add(new SupportingFile("web.mustache", + ("src/main/webapp/WEB-INF"), "web.xml")); + supportingFiles.add(new SupportingFile("jboss-web.mustache", + ("src/main/webapp/WEB-INF"), "jboss-web.xml")); + supportingFiles.add(new SupportingFile("RestApplication.mustache", + (sourceFolder + '/' + invokerPackage).replace(".", "/"), "RestApplication.java")); + supportingFiles.add(new SupportingFile("StringUtil.mustache", + (sourceFolder + '/' + invokerPackage).replace(".", "/"), "StringUtil.java")); + + if (additionalProperties.containsKey("dateLibrary")) { + setDateLibrary(additionalProperties.get("dateLibrary").toString()); + additionalProperties.put(dateLibrary, "true"); + } + + if ("joda".equals(dateLibrary)) { + typeMapping.put("date", "LocalDate"); + typeMapping.put("DateTime", "DateTime"); + + importMapping.put("LocalDate", "org.joda.time.LocalDate"); + importMapping.put("DateTime", "org.joda.time.DateTime"); + + supportingFiles.add(new SupportingFile("JodaDateTimeProvider.mustache", + (sourceFolder + '/' + apiPackage).replace(".", "/"), "JodaDateTimeProvider.java")); + supportingFiles.add(new SupportingFile("JodaLocalDateProvider.mustache", + (sourceFolder + '/' + apiPackage).replace(".", "/"), "JodaLocalDateProvider.java")); + } else if ("java8".equals(dateLibrary)) { + additionalProperties.put("java8", "true"); + additionalProperties.put("javaVersion", "1.8"); + typeMapping.put("date", "LocalDate"); + typeMapping.put("DateTime", "LocalDateTime"); + importMapping.put("LocalDate", "java.time.LocalDate"); + importMapping.put("LocalDateTime", "java.time.LocalDateTime"); + + supportingFiles.add(new SupportingFile("LocalDateTimeProvider.mustache", + (sourceFolder + '/' + apiPackage).replace(".", "/"), "LocalDateTimeProvider.java")); + supportingFiles.add(new SupportingFile("LocalDateProvider.mustache", + (sourceFolder + '/' + apiPackage).replace(".", "/"), "LocalDateProvider.java")); + } + } + + @Override + public void addOperationToGroup(String tag, String resourcePath, Operation operation, CodegenOperation co, Map> operations) { + String basePath = resourcePath; + if (basePath.startsWith("/")) { + basePath = basePath.substring(1); + } + int pos = basePath.indexOf("/"); + if (pos > 0) { + basePath = basePath.substring(0, pos); + } + + if (basePath == "") { + basePath = "default"; + } else { + if (co.path.startsWith("/" + basePath)) { + co.path = co.path.substring(("/" + basePath).length()); + } + co.subresourceOperation = !co.path.isEmpty(); + } + List opList = operations.get(basePath); + if (opList == null) { + opList = new ArrayList(); + operations.put(basePath, opList); + } + opList.add(co); + co.baseName = basePath; + } + + + @Override + public void preprocessSwagger(Swagger swagger) { + if ("/".equals(swagger.getBasePath())) { + swagger.setBasePath(""); + } + + String host = swagger.getHost(); + String port = "8080"; + if (host != null) { + String[] parts = host.split(":"); + if (parts.length > 1) { + port = parts[1]; + } + } + this.additionalProperties.put("serverPort", port); + if (swagger != null && swagger.getPaths() != null) { + for (String pathname : swagger.getPaths().keySet()) { + Path path = swagger.getPath(pathname); + if (path.getOperations() != null) { + for (Operation operation : path.getOperations()) { + if (operation.getTags() != null) { + List> tags = new ArrayList>(); + for (String tag : operation.getTags()) { + Map value = new HashMap(); + value.put("tag", tag); + value.put("hasMore", "true"); + tags.add(value); + } + if (tags.size() > 0) { + tags.get(tags.size() - 1).remove("hasMore"); + } + if (operation.getTags().size() > 0) { + String tag = operation.getTags().get(0); + operation.setTags(Arrays.asList(tag)); + } + operation.setVendorExtension("x-tags", tags); + } + } + } + } + } + } + + + @Override + public Map postProcessOperations(Map objs) { + Map operations = (Map) objs.get("operations"); + if (operations != null) { + List ops = (List) operations.get("operation"); + for (CodegenOperation operation : ops) { + List responses = operation.responses; + if (responses != null) { + for (CodegenResponse resp : responses) { + if ("0".equals(resp.code)) { + resp.code = "200"; + } + } + } + if (operation.returnType == null) { + operation.returnType = "Void"; + } else if (operation.returnType.startsWith("List")) { + String rt = operation.returnType; + int end = rt.lastIndexOf(">"); + if (end > 0) { + operation.returnType = rt.substring("List<".length(), end).trim(); + operation.returnContainer = "List"; + } + } else if (operation.returnType.startsWith("Map")) { + String rt = operation.returnType; + int end = rt.lastIndexOf(">"); + if (end > 0) { + operation.returnType = rt.substring("Map<".length(), end).split(",")[1].trim(); + operation.returnContainer = "Map"; + } + } else if (operation.returnType.startsWith("Set")) { + String rt = operation.returnType; + int end = rt.lastIndexOf(">"); + if (end > 0) { + operation.returnType = rt.substring("Set<".length(), end).trim(); + operation.returnContainer = "Set"; + } + } + } + } + return objs; + } + + @Override + public String toApiName(String name) { + if (name.length() == 0) { + return "DefaultApi"; + } + name = sanitizeName(name); + return camelize(name) + "Api"; + } + + + @Override + public String apiFilename(String templateName, String tag) { + + String result = super.apiFilename(templateName, tag); + + if (templateName.endsWith("Impl.mustache")) { + int ix = result.lastIndexOf('/'); + result = result.substring(0, ix) + "/impl" + result.substring(ix, result.length() - 5) + "ServiceImpl.java"; + + result = result.replace(apiFileFolder(), implFileFolder(implFolder)); + } else if (templateName.endsWith("Factory.mustache")) { + int ix = result.lastIndexOf('/'); + result = result.substring(0, ix) + "/factories" + result.substring(ix, result.length() - 5) + "ServiceFactory.java"; + + result = result.replace(apiFileFolder(), implFileFolder(implFolder)); + } else if (templateName.endsWith("Service.mustache")) { + int ix = result.lastIndexOf('.'); + result = result.substring(0, ix) + "Service.java"; + } + + return result; + } + + + private String implFileFolder(String output) { + return outputFolder + "/" + output + "/" + apiPackage().replace('.', '/'); + } + + @Override + public boolean shouldOverwrite(String filename) { + return super.shouldOverwrite(filename) && !filename.endsWith("ServiceImpl.java") && !filename.endsWith("ServiceFactory.java"); + } + + public void setDateLibrary(String library) { + this.dateLibrary = library; + } + + @Override + public void postProcessModelProperty(CodegenModel model, CodegenProperty property) { + if(serializeBigDecimalAsString) { + if (property.baseType.equals("BigDecimal")) { + // we serialize BigDecimal as `string` to avoid precision loss + property.vendorExtensions.put("extraAnnotation", "@JsonSerialize(using = ToStringSerializer.class)"); + + // this requires some more imports to be added for this model... + model.imports.add("ToStringSerializer"); + model.imports.add("JsonSerialize"); + } + } + + if(model.isEnum == null || model.isEnum) { + + final String lib = getLibrary(); + if(StringUtils.isEmpty(lib)) { + model.imports.add("JsonProperty"); + + if(model.hasEnums != null || model.hasEnums == true) { + model.imports.add("JsonValue"); + } + } + } + return; + } +} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/ApiException.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/ApiException.mustache new file mode 100644 index 00000000000..11b4036b832 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/ApiException.mustache @@ -0,0 +1,10 @@ +package {{apiPackage}}; + +{{>generatedAnnotation}} +public class ApiException extends Exception{ + private int code; + public ApiException (int code, String msg) { + super(msg); + this.code = code; + } +} diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/ApiOriginFilter.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/ApiOriginFilter.mustache new file mode 100644 index 00000000000..a1e5a678fe1 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/ApiOriginFilter.mustache @@ -0,0 +1,22 @@ +package {{apiPackage}}; + +import java.io.IOException; + +import javax.servlet.*; +import javax.servlet.http.HttpServletResponse; + +{{>generatedAnnotation}} +public class ApiOriginFilter implements javax.servlet.Filter { + public void doFilter(ServletRequest request, ServletResponse response, + FilterChain chain) throws IOException, ServletException { + HttpServletResponse res = (HttpServletResponse) response; + res.addHeader("Access-Control-Allow-Origin", "*"); + res.addHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT"); + res.addHeader("Access-Control-Allow-Headers", "Content-Type"); + chain.doFilter(request, response); + } + + public void destroy() {} + + public void init(FilterConfig filterConfig) throws ServletException {} +} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/ApiResponseMessage.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/ApiResponseMessage.mustache new file mode 100644 index 00000000000..2b9a2b1f8c5 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/ApiResponseMessage.mustache @@ -0,0 +1,69 @@ +package {{apiPackage}}; + +import javax.xml.bind.annotation.XmlTransient; + +@javax.xml.bind.annotation.XmlRootElement +{{>generatedAnnotation}} +public class ApiResponseMessage { + public static final int ERROR = 1; + public static final int WARNING = 2; + public static final int INFO = 3; + public static final int OK = 4; + public static final int TOO_BUSY = 5; + + int code; + String type; + String message; + + public ApiResponseMessage(){} + + public ApiResponseMessage(int code, String message){ + this.code = code; + switch(code){ + case ERROR: + setType("error"); + break; + case WARNING: + setType("warning"); + break; + case INFO: + setType("info"); + break; + case OK: + setType("ok"); + break; + case TOO_BUSY: + setType("too busy"); + break; + default: + setType("unknown"); + break; + } + this.message = message; + } + + @XmlTransient + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/JodaDateTimeProvider.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/JodaDateTimeProvider.mustache new file mode 100644 index 00000000000..f9421790983 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/JodaDateTimeProvider.mustache @@ -0,0 +1,44 @@ +package {{apiPackage}}; + +import com.sun.jersey.core.spi.component.ComponentContext; +import com.sun.jersey.spi.inject.Injectable; +import com.sun.jersey.spi.inject.PerRequestTypeInjectableProvider; + +import javax.ws.rs.QueryParam; +import javax.ws.rs.WebApplicationException; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response.Status; +import javax.ws.rs.core.UriInfo; +import javax.ws.rs.ext.Provider; +import org.joda.time.DateTime; +import java.util.List; + +@Provider +public class JodaDateTimeProvider extends PerRequestTypeInjectableProvider { + private final UriInfo uriInfo; + + public JodaDateTimeProvider(@Context UriInfo uriInfo) { + super(DateTime.class); + this.uriInfo = uriInfo; + } + + @Override + public Injectable getInjectable(final ComponentContext cc, final QueryParam a) { + return new Injectable() { + @Override + public DateTime getValue() { + final List values = uriInfo.getQueryParameters().get(a.value()); + + if (values == null || values.isEmpty()) + return null; + if (values.size() > 1) { + throw new WebApplicationException(Response.status(Status.BAD_REQUEST). + entity(a.value() + " cannot contain multiple values").build()); + } + + return DateTime.parse(values.get(0)); + } + }; + } +} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/JodaLocalDateProvider.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/JodaLocalDateProvider.mustache new file mode 100644 index 00000000000..7bd4027e63d --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/JodaLocalDateProvider.mustache @@ -0,0 +1,44 @@ +package {{apiPackage}}; + +import com.sun.jersey.core.spi.component.ComponentContext; +import com.sun.jersey.spi.inject.Injectable; +import com.sun.jersey.spi.inject.PerRequestTypeInjectableProvider; + +import javax.ws.rs.QueryParam; +import javax.ws.rs.WebApplicationException; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response.Status; +import javax.ws.rs.core.UriInfo; +import javax.ws.rs.ext.Provider; +import org.joda.time.LocalDate; +import java.util.List; + +@Provider +public class JodaLocalDateProvider extends PerRequestTypeInjectableProvider { + private final UriInfo uriInfo; + + public JodaLocalDateProvider(@Context UriInfo uriInfo) { + super(LocalDate.class); + this.uriInfo = uriInfo; + } + + @Override + public Injectable getInjectable(final ComponentContext cc, final QueryParam a) { + return new Injectable() { + @Override + public LocalDate getValue() { + final List values = uriInfo.getQueryParameters().get(a.value()); + + if (values == null || values.isEmpty()) + return null; + if (values.size() > 1) { + throw new WebApplicationException(Response.status(Status.BAD_REQUEST). + entity(a.value() + " cannot contain multiple values").build()); + } + + return LocalDate.parse(values.get(0)); + } + }; + } +} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/LocalDateProvider.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/LocalDateProvider.mustache new file mode 100644 index 00000000000..8c4cd4cbd15 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/LocalDateProvider.mustache @@ -0,0 +1,44 @@ +package {{apiPackage}}; + +import com.sun.jersey.core.spi.component.ComponentContext; +import com.sun.jersey.spi.inject.Injectable; +import com.sun.jersey.spi.inject.PerRequestTypeInjectableProvider; + +import javax.ws.rs.QueryParam; +import javax.ws.rs.WebApplicationException; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response.Status; +import javax.ws.rs.core.UriInfo; +import javax.ws.rs.ext.Provider; +import java.time.LocalDate; +import java.util.List; + +@Provider +public class LocalDateProvider extends PerRequestTypeInjectableProvider { + private final UriInfo uriInfo; + + public LocalDateProvider(@Context UriInfo uriInfo) { + super(LocalDate.class); + this.uriInfo = uriInfo; + } + + @Override + public Injectable getInjectable(final ComponentContext cc, final QueryParam a) { + return new Injectable() { + @Override + public LocalDate getValue() { + final List values = uriInfo.getQueryParameters().get(a.value()); + + if (values == null || values.isEmpty()) + return null; + if (values.size() > 1) { + throw new WebApplicationException(Response.status(Status.BAD_REQUEST). + entity(a.value() + " cannot contain multiple values").build()); + } + + return LocalDate.parse(values.get(0)); + } + }; + } +} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/LocalDateTimeProvider.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/LocalDateTimeProvider.mustache new file mode 100644 index 00000000000..93bb6f19d50 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/LocalDateTimeProvider.mustache @@ -0,0 +1,44 @@ +package {{apiPackage}}; + +import com.sun.jersey.core.spi.component.ComponentContext; +import com.sun.jersey.spi.inject.Injectable; +import com.sun.jersey.spi.inject.PerRequestTypeInjectableProvider; + +import javax.ws.rs.QueryParam; +import javax.ws.rs.WebApplicationException; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response.Status; +import javax.ws.rs.core.UriInfo; +import javax.ws.rs.ext.Provider; +import java.time.LocalDateTime; +import java.util.List; + +@Provider +public class LocalDateTimeProvider extends PerRequestTypeInjectableProvider { + private final UriInfo uriInfo; + + public LocalDateTimeProvider(@Context UriInfo uriInfo) { + super(LocalDateTime.class); + this.uriInfo = uriInfo; + } + + @Override + public Injectable getInjectable(final ComponentContext cc, final QueryParam a) { + return new Injectable() { + @Override + public LocalDateTime getValue() { + final List values = uriInfo.getQueryParameters().get(a.value()); + + if (values == null || values.isEmpty()) + return null; + if (values.size() > 1) { + throw new WebApplicationException(Response.status(Status.BAD_REQUEST). + entity(a.value() + " cannot contain multiple values").build()); + } + + return LocalDateTime.parse(values.get(0)); + } + }; + } +} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/NotFoundException.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/NotFoundException.mustache new file mode 100644 index 00000000000..1bd5e207d7b --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/NotFoundException.mustache @@ -0,0 +1,10 @@ +package {{apiPackage}}; + +{{>generatedAnnotation}} +public class NotFoundException extends ApiException { + private int code; + public NotFoundException (int code, String msg) { + super(code, msg); + this.code = code; + } +} diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/README.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/README.mustache new file mode 100644 index 00000000000..3551b9e9914 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/README.mustache @@ -0,0 +1,23 @@ +# Swagger generated server + +## Overview +This server was generated by the [swagger-codegen](https://github.com/swagger-api/swagger-codegen) project. By using the +[OpenAPI-Spec](https://github.com/swagger-api/swagger-core/wiki) from a remote server, you can easily generate a server stub. This +is an example of building a swagger-enabled JAX-RS server. + +This example uses the [JAX-RS](https://jax-rs-spec.java.net/) framework. + +To run the server, please execute the following: + +``` +mvn clean package jetty:run +``` + +You can then view the swagger listing here: + +``` +http://localhost:{{serverPort}}{{contextPath}}/swagger.json +``` + +Note that if you have configured the `host` to be something other than localhost, the calls through +swagger-ui will be directed to that host and not localhost! \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/RestApplication.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/RestApplication.mustache new file mode 100644 index 00000000000..df9a31434b6 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/RestApplication.mustache @@ -0,0 +1,9 @@ +package {{invokerPackage}}; + +import javax.ws.rs.ApplicationPath; +import javax.ws.rs.core.Application; + +@ApplicationPath("/") +public class RestApplication extends Application { + +} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/StringUtil.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/StringUtil.mustache new file mode 100644 index 00000000000..073966b0c21 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/StringUtil.mustache @@ -0,0 +1,42 @@ +package {{invokerPackage}}; + +{{>generatedAnnotation}} +public class StringUtil { + /** + * Check if the given array contains the given value (with case-insensitive comparison). + * + * @param array The array + * @param value The value to search + * @return true if the array contains the value + */ + public static boolean containsIgnoreCase(String[] array, String value) { + for (String str : array) { + if (value == null && str == null) return true; + if (value != null && value.equalsIgnoreCase(str)) return true; + } + return false; + } + + /** + * Join an array of strings with the given separator. + *

+ * Note: This might be replaced by utility method from commons-lang or guava someday + * if one of those libraries is added as dependency. + *

+ * + * @param array The array of strings + * @param separator The separator + * @return the resulting string + */ + public static String join(String[] array, String separator) { + int len = array.length; + if (len == 0) return ""; + + StringBuilder out = new StringBuilder(); + out.append(array[0]); + for (int i = 1; i < len; i++) { + out.append(separator).append(array[i]); + } + return out.toString(); + } +} diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/allowableValues.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/allowableValues.mustache new file mode 100644 index 00000000000..a48256d027a --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/allowableValues.mustache @@ -0,0 +1 @@ +{{#allowableValues}}allowableValues="{{#values}}{{{.}}}{{^-last}}, {{/-last}}{{/values}}{{^values}}range=[{{#min}}{{.}}{{/min}}{{^min}}-infinity{{/min}}, {{#max}}{{.}}{{/max}}{{^max}}infinity{{/max}}]{{/values}}"{{/allowableValues}} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/api.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/api.mustache new file mode 100644 index 00000000000..34bd16e3804 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/api.mustache @@ -0,0 +1,40 @@ +package {{package}}; + +import {{modelPackage}}.*; +import {{package}}.{{classname}}Service; +import {{package}}.factories.{{classname}}ServiceFactory; + +{{#imports}}import {{import}}; +{{/imports}} + +import java.util.List; +import {{package}}.NotFoundException; + +import java.io.InputStream; + +import javax.ws.rs.core.Context; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.SecurityContext; +import javax.ws.rs.*; + +@Path("/{{baseName}}") +{{#hasConsumes}}@Consumes({ {{#consumes}}"{{mediaType}}"{{#hasMore}}, {{/hasMore}}{{/consumes}} }){{/hasConsumes}} +{{#hasProduces}}@Produces({ {{#produces}}"{{mediaType}}"{{#hasMore}}, {{/hasMore}}{{/produces}} }){{/hasProduces}} +{{>generatedAnnotation}} +{{#operations}} +public class {{classname}} { + private final {{classname}}Service delegate = {{classname}}ServiceFactory.get{{classname}}(); + +{{#operation}} + @{{httpMethod}} + {{#subresourceOperation}}@Path("{{path}}"){{/subresourceOperation}} + {{#hasConsumes}}@Consumes({ {{#consumes}}"{{mediaType}}"{{#hasMore}}, {{/hasMore}}{{/consumes}} }){{/hasConsumes}} + {{#hasProduces}}@Produces({ {{#produces}}"{{mediaType}}"{{#hasMore}}, {{/hasMore}}{{/produces}} }){{/hasProduces}} + + public Response {{nickname}}({{#allParams}}{{>queryParams}}{{>pathParams}}{{>headerParams}}{{>bodyParams}}{{>formParams}},{{/allParams}}@Context SecurityContext securityContext) + throws NotFoundException { + return delegate.{{nickname}}({{#allParams}}{{#isFile}}fileDetail{{/isFile}}{{^isFile}}{{paramName}}{{/isFile}},{{/allParams}}securityContext); + } +{{/operation}} +} +{{/operations}} diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/apiService.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/apiService.mustache new file mode 100644 index 00000000000..be611237b7e --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/apiService.mustache @@ -0,0 +1,25 @@ +package {{package}}; + +import {{package}}.*; +import {{modelPackage}}.*; + +{{#imports}}import {{import}}; +{{/imports}} + +import java.util.List; +import {{package}}.NotFoundException; + +import java.io.InputStream; + +import javax.ws.rs.core.Response; +import javax.ws.rs.core.SecurityContext; + +{{>generatedAnnotation}} +{{#operations}} +public abstract class {{classname}}Service { + {{#operation}} + public abstract Response {{nickname}}({{#allParams}}{{>serviceQueryParams}}{{>servicePathParams}}{{>serviceHeaderParams}}{{>serviceBodyParams}}{{>serviceFormParams}},{{/allParams}}SecurityContext securityContext) + throws NotFoundException; + {{/operation}} +} +{{/operations}} diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/apiServiceFactory.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/apiServiceFactory.mustache new file mode 100644 index 00000000000..1bb63bc0775 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/apiServiceFactory.mustache @@ -0,0 +1,15 @@ +package {{package}}.factories; + +import {{package}}.{{classname}}Service; +import {{package}}.impl.{{classname}}ServiceImpl; + +{{>generatedAnnotation}} +public class {{classname}}ServiceFactory { + + private final static {{classname}}Service service = new {{classname}}ServiceImpl(); + + public static {{classname}}Service get{{classname}}() + { + return service; + } +} diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/apiServiceImpl.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/apiServiceImpl.mustache new file mode 100644 index 00000000000..e2ee7c09fbb --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/apiServiceImpl.mustache @@ -0,0 +1,29 @@ +package {{package}}.impl; + +import {{package}}.*; +import {{modelPackage}}.*; + +{{#imports}}import {{import}}; +{{/imports}} + +import java.util.List; +import {{package}}.NotFoundException; + +import java.io.InputStream; + +import javax.ws.rs.core.Response; +import javax.ws.rs.core.SecurityContext; + +{{>generatedAnnotation}} +{{#operations}} +public class {{classname}}ServiceImpl extends {{classname}}Service { + {{#operation}} + @Override + public Response {{nickname}}({{#allParams}}{{>serviceQueryParams}}{{>servicePathParams}}{{>serviceHeaderParams}}{{>serviceBodyParams}}{{>serviceFormParams}},{{/allParams}}SecurityContext securityContext) + throws NotFoundException { + // do some magic! + return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); + } + {{/operation}} +} +{{/operations}} diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/bodyParams.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/bodyParams.mustache new file mode 100644 index 00000000000..bb1d6ff4ef0 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/bodyParams.mustache @@ -0,0 +1 @@ +{{#isBodyParam}} {{{dataType}}} {{paramName}}{{/isBodyParam}} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/enumClass.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/enumClass.mustache new file mode 100644 index 00000000000..6010e26704f --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/enumClass.mustache @@ -0,0 +1,17 @@ + + public enum {{{datatypeWithEnum}}} { + {{#allowableValues}}{{#enumVars}}{{{name}}}("{{{value}}}"){{^-last}}, + {{/-last}}{{#-last}};{{/-last}}{{/enumVars}}{{/allowableValues}} + + private String value; + + {{{datatypeWithEnum}}}(String value) { + this.value = value; + } + + @Override + @JsonValue + public String toString() { + return value; + } + } diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/enumOuterClass.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/enumOuterClass.mustache new file mode 100644 index 00000000000..7aea7b92f22 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/enumOuterClass.mustache @@ -0,0 +1,3 @@ +public enum {{classname}} { + {{#allowableValues}}{{.}}{{^-last}}, {{/-last}}{{/allowableValues}} +} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/formParams.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/formParams.mustache new file mode 100644 index 00000000000..c7a3108f5c7 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/formParams.mustache @@ -0,0 +1,2 @@ +{{#isFormParam}}{{#notFile}}@FormParam("{{paramName}}") {{{dataType}}} {{paramName}}{{/notFile}}{{#isFile}} @FormDataParam("file") InputStream inputStream, + @FormDataParam("file") FormDataContentDisposition fileDetail{{/isFile}}{{/isFormParam}} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/generatedAnnotation.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/generatedAnnotation.mustache new file mode 100644 index 00000000000..49110fc1ad9 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/generatedAnnotation.mustache @@ -0,0 +1 @@ +@javax.annotation.Generated(value = "{{generatorClass}}", date = "{{generatedDate}}") \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/gradle.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/gradle.mustache new file mode 100644 index 00000000000..be2097d48c2 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/gradle.mustache @@ -0,0 +1,25 @@ +apply plugin: 'war' + +repositories { + mavenCentral() +} + +dependencies { + compile 'com.fasterxml.jackson.core:jackson-annotations:2.7.0' + providedCompile 'org.jboss.resteasy:resteasy-jaxrs:3.0.11.Final' + providedCompile 'org.jboss.resteasy:jaxrs-api:3.0.11.Final' + providedCompile 'org.jboss.resteasy:resteasy-validator-provider-11:3.0.11.Final' + providedCompile 'javax.annotation:javax.annotation-api:1.2' + providedCompile 'org.jboss.spec.javax.servlet:jboss-servlet-api_3.0_spec:1.0.0.Final' + + testCompile 'junit:junit:4.12', + 'org.hamcrest:hamcrest-core:1.3' +} + +sourceSets { + main { + java { + srcDir 'src/gen/java' + } + } +} diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/headerParams.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/headerParams.mustache new file mode 100644 index 00000000000..25d690c90ed --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/headerParams.mustache @@ -0,0 +1 @@ +{{#isHeaderParam}}@HeaderParam("{{baseName}}") {{{dataType}}} {{paramName}}{{/isHeaderParam}} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/jboss-web.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/jboss-web.mustache new file mode 100644 index 00000000000..8e05a2ef4e1 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/jboss-web.mustache @@ -0,0 +1,3 @@ + + {{contextPath}}/* + \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/model.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/model.mustache new file mode 100644 index 00000000000..b9512d2b83c --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/model.mustache @@ -0,0 +1,16 @@ +package {{package}}; + +import java.util.Objects; +{{#imports}}import {{import}}; +{{/imports}} + +{{#serializableModel}}import java.io.Serializable;{{/serializableModel}} +{{#models}} +{{#model}}{{#description}} +/** + * {{description}} + **/{{/description}} +{{#isEnum}}{{>enumOuterClass}}{{/isEnum}} +{{^isEnum}}{{>pojo}}{{/isEnum}} +{{/model}} +{{/models}} diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/pathParams.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/pathParams.mustache new file mode 100644 index 00000000000..39116c805cb --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/pathParams.mustache @@ -0,0 +1 @@ +{{#isPathParam}} @PathParam("{{baseName}}") {{{dataType}}} {{paramName}}{{/isPathParam}} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/pojo.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/pojo.mustache new file mode 100644 index 00000000000..63578d8bc73 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/pojo.mustache @@ -0,0 +1,66 @@ +{{>generatedAnnotation}} +public class {{classname}} {{#parent}}extends {{{parent}}}{{/parent}} {{#serializableModel}}implements Serializable{{/serializableModel}} { + {{#vars}}{{#isEnum}} + +{{>enumClass}}{{/isEnum}}{{#items.isEnum}}{{#items}} + +{{>enumClass}}{{/items}}{{/items.isEnum}} + private {{{datatypeWithEnum}}} {{name}} = {{{defaultValue}}};{{/vars}} + + {{#vars}} + /**{{#description}} + * {{{description}}}{{/description}}{{#minimum}} + * minimum: {{minimum}}{{/minimum}}{{#maximum}} + * maximum: {{maximum}}{{/maximum}} + **/ + {{#vendorExtensions.extraAnnotation}}{{vendorExtensions.extraAnnotation}}{{/vendorExtensions.extraAnnotation}} + @JsonProperty("{{baseName}}") + public {{{datatypeWithEnum}}} {{getter}}() { + return {{name}}; + } + public void {{setter}}({{{datatypeWithEnum}}} {{name}}) { + this.{{name}} = {{name}}; + } + + {{/vars}} + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + {{classname}} {{classVarName}} = ({{classname}}) o;{{#hasVars}} + return {{#vars}}Objects.equals({{name}}, {{classVarName}}.{{name}}){{#hasMore}} && + {{/hasMore}}{{^hasMore}};{{/hasMore}}{{/vars}}{{/hasVars}}{{^hasVars}} + return true;{{/hasVars}} + } + + @Override + public int hashCode() { + return Objects.hash({{#vars}}{{name}}{{#hasMore}}, {{/hasMore}}{{/vars}}); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class {{classname}} {\n"); + {{#parent}}sb.append(" ").append(toIndentedString(super.toString())).append("\n");{{/parent}} + {{#vars}}sb.append(" {{name}}: ").append(toIndentedString({{name}})).append("\n"); + {{/vars}}sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/pom.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/pom.mustache new file mode 100644 index 00000000000..0d1b06de43a --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/pom.mustache @@ -0,0 +1,178 @@ + + 4.0.0 + {{groupId}} + {{artifactId}} + jar + {{artifactId}} + {{artifactVersion}} + + src/main/java + + + org.apache.maven.plugins + maven-war-plugin + 2.1.1 + + + maven-failsafe-plugin + 2.6 + + + + integration-test + verify + + + + + + org.eclipse.jetty + jetty-maven-plugin + ${jetty-version} + + + / + + target/${project.artifactId}-${project.version} + 8079 + stopit + + {{serverPort}} + 60000 + + + + + start-jetty + pre-integration-test + + start + + + 0 + true + + + + stop-jetty + post-integration-test + + stop + + + + + + org.codehaus.mojo + build-helper-maven-plugin + 1.9.1 + + + add-source + generate-sources + + add-source + + + + src/gen/java + + + + + + + + + + io.swagger + swagger-jersey-jaxrs + ${swagger-core-version} + + + org.slf4j + slf4j-log4j12 + ${slf4j-version} + + + com.sun.jersey + jersey-core + ${jersey-version} + + + com.sun.jersey + jersey-json + ${jersey-version} + + + com.sun.jersey + jersey-servlet + ${jersey-version} + + + com.sun.jersey.contribs + jersey-multipart + ${jersey-version} + + + com.sun.jersey + jersey-server + ${jersey-version} + + + javax.servlet + servlet-api + ${servlet-api-version} + + + + junit + junit + ${junit-version} + test + + + com.sun.jersey + jersey-client + ${jersey-version} + test + + + org.testng + testng + 6.8.8 + test + + + junit + junit + + + snakeyaml + org.yaml + + + bsh + org.beanshell + + + + + + + sonatype-snapshots + https://oss.sonatype.org/content/repositories/snapshots + + true + + + + + 1.5.4 + 9.2.9.v20150224 + 1.18.1 + 1.6.3 + 4.8.1 + 2.5 + + \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/queryParams.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/queryParams.mustache new file mode 100644 index 00000000000..458b8de7c3b --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/queryParams.mustache @@ -0,0 +1 @@ +{{#isQueryParam}} @QueryParam("{{baseName}}") {{{dataType}}} {{paramName}}{{/isQueryParam}} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/returnTypes.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/returnTypes.mustache new file mode 100644 index 00000000000..c8f7a56938a --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/returnTypes.mustache @@ -0,0 +1 @@ +{{#returnContainer}}{{#isMapContainer}}Map{{/isMapContainer}}{{#isListContainer}}List<{{{returnType}}}>{{/isListContainer}}{{/returnContainer}}{{^returnContainer}}{{{returnType}}}{{/returnContainer}} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/serviceBodyParams.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/serviceBodyParams.mustache new file mode 100644 index 00000000000..c7d1abfe527 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/serviceBodyParams.mustache @@ -0,0 +1 @@ +{{#isBodyParam}}{{{dataType}}} {{paramName}}{{/isBodyParam}} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/serviceFormParams.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/serviceFormParams.mustache new file mode 100644 index 00000000000..e44ab167e8f --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/serviceFormParams.mustache @@ -0,0 +1 @@ +{{#isFormParam}}{{#notFile}}{{{dataType}}} {{paramName}}{{/notFile}}{{#isFile}}FormDataContentDisposition fileDetail{{/isFile}}{{/isFormParam}} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/serviceHeaderParams.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/serviceHeaderParams.mustache new file mode 100644 index 00000000000..bd03573d196 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/serviceHeaderParams.mustache @@ -0,0 +1 @@ +{{#isHeaderParam}}{{{dataType}}} {{paramName}}{{/isHeaderParam}} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/servicePathParams.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/servicePathParams.mustache new file mode 100644 index 00000000000..6829cf8c7a6 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/servicePathParams.mustache @@ -0,0 +1 @@ +{{#isPathParam}}{{{dataType}}} {{paramName}}{{/isPathParam}} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/serviceQueryParams.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/serviceQueryParams.mustache new file mode 100644 index 00000000000..ff79730471d --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/serviceQueryParams.mustache @@ -0,0 +1 @@ +{{#isQueryParam}}{{{dataType}}} {{paramName}}{{/isQueryParam}} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/web.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/web.mustache new file mode 100644 index 00000000000..6453a110a34 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/web.mustache @@ -0,0 +1,14 @@ + + + + + ApiOriginFilter + {{apiPackage}}.ApiOriginFilter + + + ApiOriginFilter + /* + + diff --git a/modules/swagger-codegen/src/main/resources/META-INF/services/io.swagger.codegen.CodegenConfig b/modules/swagger-codegen/src/main/resources/META-INF/services/io.swagger.codegen.CodegenConfig index 18015a9328b..a5e08ff04ee 100644 --- a/modules/swagger-codegen/src/main/resources/META-INF/services/io.swagger.codegen.CodegenConfig +++ b/modules/swagger-codegen/src/main/resources/META-INF/services/io.swagger.codegen.CodegenConfig @@ -8,6 +8,7 @@ io.swagger.codegen.languages.GoClientCodegen io.swagger.codegen.languages.JavaClientCodegen io.swagger.codegen.languages.JavaJerseyServerCodegen io.swagger.codegen.languages.JavaCXFServerCodegen +io.swagger.codegen.languages.JavaResteasyServerCodegen io.swagger.codegen.languages.JavaInflectorServerCodegen io.swagger.codegen.languages.JavascriptClientCodegen io.swagger.codegen.languages.JMeterCodegen From d5aa2859265b4103b5e3b95925f03f295586d730 Mon Sep 17 00:00:00 2001 From: wing328 Date: Sat, 30 Jan 2016 15:31:08 +0800 Subject: [PATCH 024/189] fix file support in form parameter (qt5cpp) --- .../main/resources/qt5cpp/api-body.mustache | 23 ++- .../client/petstore/qt5cpp/client/SWGPet.h | 4 +- .../petstore/qt5cpp/client/SWGPetApi.cpp | 143 +++++++++++++++--- .../client/petstore/qt5cpp/client/SWGPetApi.h | 6 + .../petstore/qt5cpp/client/SWGUserApi.cpp | 4 +- 5 files changed, 144 insertions(+), 36 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/qt5cpp/api-body.mustache b/modules/swagger-codegen/src/main/resources/qt5cpp/api-body.mustache index b6341104188..fc69cfa4404 100644 --- a/modules/swagger-codegen/src/main/resources/qt5cpp/api-body.mustache +++ b/modules/swagger-codegen/src/main/resources/qt5cpp/api-body.mustache @@ -29,7 +29,7 @@ void {{#queryParams}} {{^collectionFormat}} - if(fullPath.indexOf("?") > 0) + if (fullPath.indexOf("?") > 0) fullPath.append("&"); else fullPath.append("?"); @@ -40,10 +40,10 @@ void {{#collectionFormat}} - if({{{paramName}}}->size() > 0) { - if(QString("{{collectionFormat}}").indexOf("multi") == 0) { + if ({{{paramName}}}->size() > 0) { + if (QString("{{collectionFormat}}").indexOf("multi") == 0) { foreach({{{baseType}}} t, *{{paramName}}) { - if(fullPath.indexOf("?") > 0) + if (fullPath.indexOf("?") > 0) fullPath.append("&"); else fullPath.append("?"); @@ -51,28 +51,28 @@ void } } else if (QString("{{collectionFormat}}").indexOf("ssv") == 0) { - if(fullPath.indexOf("?") > 0) + if (fullPath.indexOf("?") > 0) fullPath.append("&"); else fullPath.append("?"); fullPath.append("{{paramName}}="); qint32 count = 0; foreach({{{baseType}}} t, *{{paramName}}) { - if(count > 0) { + if (count > 0) { fullPath.append(" "); } fullPath.append(stringValue(t)); } } else if (QString("{{collectionFormat}}").indexOf("tsv") == 0) { - if(fullPath.indexOf("?") > 0) + if (fullPath.indexOf("?") > 0) fullPath.append("&"); else fullPath.append("?"); fullPath.append("{{paramName}}="); qint32 count = 0; foreach({{{baseType}}} t, *{{paramName}}) { - if(count > 0) { + if (count > 0) { fullPath.append("\t"); } fullPath.append(stringValue(t)); @@ -86,11 +86,10 @@ void HttpRequestWorker *worker = new HttpRequestWorker(); HttpRequestInput input(fullPath, "{{httpMethod}}"); - {{#formParams}}{{^isFile}} - if({{paramName}} != NULL) { - input.add_var("{{paramName}}", *{{paramName}}); + {{#formParams}}if ({{paramName}} != NULL) { + {{^isFile}}input.add_var("{{paramName}}", *{{paramName}});{{/isFile}}{{#isFile}}input.add_file("{{paramName}}", *{{paramName}}.local_filename, *{{paramName}}.request_filename, *{{paramName}}.mime_type);{{/isFile}} } - {{/isFile}}{{/formParams}} + {{/formParams}} {{#bodyParams}} {{#isContainer}} diff --git a/samples/client/petstore/qt5cpp/client/SWGPet.h b/samples/client/petstore/qt5cpp/client/SWGPet.h index 3f9320f1507..7b96ffc03f3 100644 --- a/samples/client/petstore/qt5cpp/client/SWGPet.h +++ b/samples/client/petstore/qt5cpp/client/SWGPet.h @@ -10,10 +10,10 @@ #include -#include #include "SWGCategory.h" -#include #include "SWGTag.h" +#include +#include #include "SWGObject.h" diff --git a/samples/client/petstore/qt5cpp/client/SWGPetApi.cpp b/samples/client/petstore/qt5cpp/client/SWGPetApi.cpp index 2171b8ed50c..a50c172d5bf 100644 --- a/samples/client/petstore/qt5cpp/client/SWGPetApi.cpp +++ b/samples/client/petstore/qt5cpp/client/SWGPetApi.cpp @@ -123,10 +123,10 @@ SWGPetApi::findPetsByStatus(QList* status) { - if(status->size() > 0) { - if(QString("multi").indexOf("multi") == 0) { + if (status->size() > 0) { + if (QString("multi").indexOf("multi") == 0) { foreach(QString* t, *status) { - if(fullPath.indexOf("?") > 0) + if (fullPath.indexOf("?") > 0) fullPath.append("&"); else fullPath.append("?"); @@ -134,28 +134,28 @@ SWGPetApi::findPetsByStatus(QList* status) { } } else if (QString("multi").indexOf("ssv") == 0) { - if(fullPath.indexOf("?") > 0) + if (fullPath.indexOf("?") > 0) fullPath.append("&"); else fullPath.append("?"); fullPath.append("status="); qint32 count = 0; foreach(QString* t, *status) { - if(count > 0) { + if (count > 0) { fullPath.append(" "); } fullPath.append(stringValue(t)); } } else if (QString("multi").indexOf("tsv") == 0) { - if(fullPath.indexOf("?") > 0) + if (fullPath.indexOf("?") > 0) fullPath.append("&"); else fullPath.append("?"); fullPath.append("status="); qint32 count = 0; foreach(QString* t, *status) { - if(count > 0) { + if (count > 0) { fullPath.append("\t"); } fullPath.append(stringValue(t)); @@ -228,10 +228,10 @@ SWGPetApi::findPetsByTags(QList* tags) { - if(tags->size() > 0) { - if(QString("multi").indexOf("multi") == 0) { + if (tags->size() > 0) { + if (QString("multi").indexOf("multi") == 0) { foreach(QString* t, *tags) { - if(fullPath.indexOf("?") > 0) + if (fullPath.indexOf("?") > 0) fullPath.append("&"); else fullPath.append("?"); @@ -239,28 +239,28 @@ SWGPetApi::findPetsByTags(QList* tags) { } } else if (QString("multi").indexOf("ssv") == 0) { - if(fullPath.indexOf("?") > 0) + if (fullPath.indexOf("?") > 0) fullPath.append("&"); else fullPath.append("?"); fullPath.append("tags="); qint32 count = 0; foreach(QString* t, *tags) { - if(count > 0) { + if (count > 0) { fullPath.append(" "); } fullPath.append(stringValue(t)); } } else if (QString("multi").indexOf("tsv") == 0) { - if(fullPath.indexOf("?") > 0) + if (fullPath.indexOf("?") > 0) fullPath.append("&"); else fullPath.append("?"); fullPath.append("tags="); qint32 count = 0; foreach(QString* t, *tags) { - if(count > 0) { + if (count > 0) { fullPath.append("\t"); } fullPath.append(stringValue(t)); @@ -391,12 +391,10 @@ SWGPetApi::updatePetWithForm(QString* petId, QString* name, QString* status) { HttpRequestWorker *worker = new HttpRequestWorker(); HttpRequestInput input(fullPath, "POST"); - - if(name != NULL) { + if (name != NULL) { input.add_var("name", *name); } - - if(status != NULL) { + if (status != NULL) { input.add_var("status", *status); } @@ -493,10 +491,12 @@ SWGPetApi::uploadFile(qint64 petId, QString* additionalMetadata, SWGHttpRequestI HttpRequestWorker *worker = new HttpRequestWorker(); HttpRequestInput input(fullPath, "POST"); - - if(additionalMetadata != NULL) { + if (additionalMetadata != NULL) { input.add_var("additionalMetadata", *additionalMetadata); } + if (file != NULL) { + input.add_file("file", *file.local_filename, *file.request_filename, *file.mime_type); + } @@ -528,4 +528,107 @@ SWGPetApi::uploadFileCallback(HttpRequestWorker * worker) { emit uploadFileSignal(); } +void +SWGPetApi::getPetByIdWithByteArray(qint64 petId) { + QString fullPath; + fullPath.append(this->host).append(this->basePath).append("/pet/{petId}?testing_byte_array=true"); + + + QString petIdPathParam("{"); petIdPathParam.append("petId").append("}"); + fullPath.replace(petIdPathParam, stringValue(petId)); + + + + + HttpRequestWorker *worker = new HttpRequestWorker(); + HttpRequestInput input(fullPath, "GET"); + + + + + + + + connect(worker, + &HttpRequestWorker::on_execution_finished, + this, + &SWGPetApi::getPetByIdWithByteArrayCallback); + + worker->execute(&input); +} + +void +SWGPetApi::getPetByIdWithByteArrayCallback(HttpRequestWorker * worker) { + QString msg; + if (worker->error_type == QNetworkReply::NoError) { + msg = QString("Success! %1 bytes").arg(worker->response.length()); + } + else { + msg = "Error: " + worker->error_str; + } + + + + + + + QString json(worker->response); + QString* output = static_cast(create(json, QString("QString"))); + + + + + worker->deleteLater(); + + emit getPetByIdWithByteArraySignal(output); + +} +void +SWGPetApi::addPetUsingByteArray(QString* body) { + QString fullPath; + fullPath.append(this->host).append(this->basePath).append("/pet?testing_byte_array=true"); + + + + + + HttpRequestWorker *worker = new HttpRequestWorker(); + HttpRequestInput input(fullPath, "POST"); + + + + + + + QString output = body.asJson(); + input.request_body.append(output); + + + + + connect(worker, + &HttpRequestWorker::on_execution_finished, + this, + &SWGPetApi::addPetUsingByteArrayCallback); + + worker->execute(&input); +} + +void +SWGPetApi::addPetUsingByteArrayCallback(HttpRequestWorker * worker) { + QString msg; + if (worker->error_type == QNetworkReply::NoError) { + msg = QString("Success! %1 bytes").arg(worker->response.length()); + } + else { + msg = "Error: " + worker->error_str; + } + + + + worker->deleteLater(); + + + emit addPetUsingByteArraySignal(); +} } /* namespace Swagger */ diff --git a/samples/client/petstore/qt5cpp/client/SWGPetApi.h b/samples/client/petstore/qt5cpp/client/SWGPetApi.h index f74f8f10839..89055da3b3d 100644 --- a/samples/client/petstore/qt5cpp/client/SWGPetApi.h +++ b/samples/client/petstore/qt5cpp/client/SWGPetApi.h @@ -30,6 +30,8 @@ public: void updatePetWithForm(QString* petId, QString* name, QString* status); void deletePet(qint64 petId, QString* apiKey); void uploadFile(qint64 petId, QString* additionalMetadata, SWGHttpRequestInputFileElement* file); + void getPetByIdWithByteArray(qint64 petId); + void addPetUsingByteArray(QString* body); private: void updatePetCallback (HttpRequestWorker * worker); @@ -40,6 +42,8 @@ private: void updatePetWithFormCallback (HttpRequestWorker * worker); void deletePetCallback (HttpRequestWorker * worker); void uploadFileCallback (HttpRequestWorker * worker); + void getPetByIdWithByteArrayCallback (HttpRequestWorker * worker); + void addPetUsingByteArrayCallback (HttpRequestWorker * worker); signals: void updatePetSignal(); @@ -50,6 +54,8 @@ signals: void updatePetWithFormSignal(); void deletePetSignal(); void uploadFileSignal(); + void getPetByIdWithByteArraySignal(QString* summary); + void addPetUsingByteArraySignal(); }; } diff --git a/samples/client/petstore/qt5cpp/client/SWGUserApi.cpp b/samples/client/petstore/qt5cpp/client/SWGUserApi.cpp index 6341231a884..61b92fc5501 100644 --- a/samples/client/petstore/qt5cpp/client/SWGUserApi.cpp +++ b/samples/client/petstore/qt5cpp/client/SWGUserApi.cpp @@ -178,7 +178,7 @@ SWGUserApi::loginUser(QString* username, QString* password) { - if(fullPath.indexOf("?") > 0) + if (fullPath.indexOf("?") > 0) fullPath.append("&"); else fullPath.append("?"); @@ -190,7 +190,7 @@ SWGUserApi::loginUser(QString* username, QString* password) { - if(fullPath.indexOf("?") > 0) + if (fullPath.indexOf("?") > 0) fullPath.append("&"); else fullPath.append("?"); From 587615b6564c0bd96e4fcc830c94f2dbd0fed1a0 Mon Sep 17 00:00:00 2001 From: wing328 Date: Sat, 30 Jan 2016 23:06:45 +0800 Subject: [PATCH 025/189] update c# readme with command to generate DLL --- .../swagger-codegen/src/main/resources/csharp/README.md | 8 +++++++- .../csharp/SwaggerClientTest/Lib/SwaggerClient/README.md | 5 +++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/resources/csharp/README.md b/modules/swagger-codegen/src/main/resources/csharp/README.md index 0e6f969d37a..3ce83da957b 100644 --- a/modules/swagger-codegen/src/main/resources/csharp/README.md +++ b/modules/swagger-codegen/src/main/resources/csharp/README.md @@ -10,5 +10,11 @@ NOTE: The DLLs included in the package may not be the latest version. We recommn ``` Install-Package RestSharp Install-Package Newtonsoft.Json -``` +``` +## Installation +Run the following command to generate the DLL +- [Mac/Linux] compile-mono.sh +- [Windows] compile.bat + +Then include the DLL (under the `bin` folder) in the C# project diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/README.md b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/README.md index 0e6f969d37a..8d71999564f 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/README.md +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/README.md @@ -11,4 +11,9 @@ NOTE: The DLLs included in the package may not be the latest version. We recommn Install-Package RestSharp Install-Package Newtonsoft.Json ``` +## Installation +Run the following command to generate the DLL +- [Mac/Linux] compile-mono.sh +- [Windows] compile.bat +Then include the DLL (under the `bin` folder) in the C# project From 4ce255dc38ed4dbc074fc5d4e106df19cdbe85c7 Mon Sep 17 00:00:00 2001 From: wing328 Date: Sun, 31 Jan 2016 01:52:41 +0800 Subject: [PATCH 026/189] add unit test files for C# --- .../languages/CSharpClientCodegen.java | 24 +++ .../main/resources/csharp/api_test.mustache | 61 ++++++++ .../main/resources/csharp/model_test.mustache | 63 ++++++++ .../Lib/SwaggerClient.Test/CategoryTests.cs | 68 +++++++++ .../Lib/SwaggerClient.Test/OrderTests.cs | 104 +++++++++++++ .../Lib/SwaggerClient.Test/PetApiTests.cs | 141 ++++++++++++++++++ .../Lib/SwaggerClient.Test/PetTests.cs | 104 +++++++++++++ .../Lib/SwaggerClient.Test/StoreApiTests.cs | 87 +++++++++++ .../Lib/SwaggerClient.Test/TagTests.cs | 68 +++++++++ .../Lib/SwaggerClient.Test/UserApiTests.cs | 123 +++++++++++++++ .../Lib/SwaggerClient.Test/UserTests.cs | 122 +++++++++++++++ .../Lib/SwaggerClient/README.md | 3 +- .../main/csharp/IO/Swagger/Model/Category.cs | 1 + .../src/main/csharp/IO/Swagger/Model/Order.cs | 1 + .../src/main/csharp/IO/Swagger/Model/Pet.cs | 1 + .../src/main/csharp/IO/Swagger/Model/Tag.cs | 1 + .../src/main/csharp/IO/Swagger/Model/User.cs | 1 + 17 files changed, 972 insertions(+), 1 deletion(-) create mode 100644 modules/swagger-codegen/src/main/resources/csharp/api_test.mustache create mode 100644 modules/swagger-codegen/src/main/resources/csharp/model_test.mustache create mode 100644 samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient.Test/CategoryTests.cs create mode 100644 samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient.Test/OrderTests.cs create mode 100644 samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient.Test/PetApiTests.cs create mode 100644 samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient.Test/PetTests.cs create mode 100644 samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient.Test/StoreApiTests.cs create mode 100644 samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient.Test/TagTests.cs create mode 100644 samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient.Test/UserApiTests.cs create mode 100644 samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient.Test/UserTests.cs diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java index 7697bd5b027..991b60cd495 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java @@ -41,6 +41,7 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig protected String packageVersion = "1.0.0"; protected String clientPackage = "IO.Swagger.Client"; protected String sourceFolder = "src" + File.separator + "main" + File.separator + "csharp"; + protected String testFolder = "Test"; public CSharpClientCodegen() { super(); @@ -51,6 +52,9 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig apiPackage = "IO.Swagger.Api"; modelPackage = "IO.Swagger.Model"; + modelTestTemplateFiles.put("model_test.mustache", ".cs"); + apiTestTemplateFiles.put("api_test.mustache", ".cs"); + reservedWords = new HashSet( Arrays.asList( // local variable names in API methods (endpoints) @@ -270,6 +274,16 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig return "_" + name; } + @Override + public String apiTestFileFolder() { + return outputFolder + ".Test"; + } + + @Override + public String modelTestFileFolder() { + return outputFolder + ".Test"; + } + @Override public String apiFileFolder() { return outputFolder + File.separator + sourceFolder + File.separator + apiPackage().replace('.', File.separatorChar); @@ -342,6 +356,16 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig return toModelName(name); } + @Override + public String toApiTestFilename(String name) { + return toApiName(name) + "Tests"; + } + + @Override + public String toModelTestFilename(String name) { + return toModelName(name) + "Tests"; + } + @Override public Map postProcessOperations(Map objs) { super.postProcessOperations(objs); diff --git a/modules/swagger-codegen/src/main/resources/csharp/api_test.mustache b/modules/swagger-codegen/src/main/resources/csharp/api_test.mustache new file mode 100644 index 00000000000..3afe27063dd --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/csharp/api_test.mustache @@ -0,0 +1,61 @@ +using System; +using System.IO; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Reflection; +using RestSharp; +using NUnit.Framework; + +using {{packageName}}.Client; +using {{packageName}}.Api; +{{#hasImport}}using {{packageName}}.Model; +{{/hasImport}} + +namespace {{packageName}}.Test +{ + [TestFixture] + public class {{classname}}Tests + { + private {{classname}} instance; + + /// + /// Setup before each unit test + /// + [SetUp] + public void Init() + { + instance = new {{classname}}(); + } + + /// + /// Clean up after each unit test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of {{classname}} + /// + [Test] + public void {{operationId}}InstanceTest() + { + Assert.IsInstanceOf<{{classname}}> (instance, "instance is a {{classname}}"); + } + + {{#operations}}{{#operation}} + /// + /// Test {{operationId}} + /// + [Test] + public void {{operationId}}Test() + { + // TODO: add unit test for the method '{{operationId}}' + } + {{/operation}}{{/operations}} + } + +} diff --git a/modules/swagger-codegen/src/main/resources/csharp/model_test.mustache b/modules/swagger-codegen/src/main/resources/csharp/model_test.mustache new file mode 100644 index 00000000000..5b70f3ebf80 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/csharp/model_test.mustache @@ -0,0 +1,63 @@ +using NUnit.Framework; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using {{packageName}}.Api; +using {{packageName}}.Model; +using {{packageName}}.Client; +using System.Reflection; + +{{#models}} +{{#model}} +namespace {{packageName}}.Test +{ + [TestFixture] + public class {{classname}}Tests + { + private {{classname}} instance; + + /// + /// Setup before each test + /// + [SetUp] + public void Init() + { + instance = new {{classname}}(); + } + + /// + /// Clean up after each test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of {{classname}} + /// + [Test] + public void {{classname}}InstanceTest() + { + Assert.IsInstanceOf<{{classname}}> (instance, "instance is a {{classname}}"); + } + + {{#vars}} + /// + /// Test the property '{{name}}' + /// + [Test] + public void {{name}}Test() + { + // TODO: unit test for the property '{{name}}' + } + {{/vars}} + + } + +} +{{/model}} +{{/models}} diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient.Test/CategoryTests.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient.Test/CategoryTests.cs new file mode 100644 index 00000000000..6384ee4179b --- /dev/null +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient.Test/CategoryTests.cs @@ -0,0 +1,68 @@ +using NUnit.Framework; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using IO.Swagger.Api; +using IO.Swagger.Model; +using IO.Swagger.Client; +using System.Reflection; + +namespace IO.Swagger.Test +{ + [TestFixture] + public class CategoryTests + { + private Category instance; + + /// + /// Setup before each test + /// + [SetUp] + public void Init() + { + instance = new Category(); + } + + /// + /// Clean up after each test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of Category + /// + [Test] + public void CategoryInstanceTest() + { + Assert.IsInstanceOf (instance, "instance is a Category"); + } + + + /// + /// Test the property 'Id' + /// + [Test] + public void IdTest() + { + // TODO: unit test for the property 'Id' + } + + /// + /// Test the property 'Name' + /// + [Test] + public void NameTest() + { + // TODO: unit test for the property 'Name' + } + + + } + +} diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient.Test/OrderTests.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient.Test/OrderTests.cs new file mode 100644 index 00000000000..7d0bc854cef --- /dev/null +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient.Test/OrderTests.cs @@ -0,0 +1,104 @@ +using NUnit.Framework; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using IO.Swagger.Api; +using IO.Swagger.Model; +using IO.Swagger.Client; +using System.Reflection; + +namespace IO.Swagger.Test +{ + [TestFixture] + public class OrderTests + { + private Order instance; + + /// + /// Setup before each test + /// + [SetUp] + public void Init() + { + instance = new Order(); + } + + /// + /// Clean up after each test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of Order + /// + [Test] + public void OrderInstanceTest() + { + Assert.IsInstanceOf (instance, "instance is a Order"); + } + + + /// + /// Test the property 'Id' + /// + [Test] + public void IdTest() + { + // TODO: unit test for the property 'Id' + } + + /// + /// Test the property 'PetId' + /// + [Test] + public void PetIdTest() + { + // TODO: unit test for the property 'PetId' + } + + /// + /// Test the property 'Quantity' + /// + [Test] + public void QuantityTest() + { + // TODO: unit test for the property 'Quantity' + } + + /// + /// Test the property 'ShipDate' + /// + [Test] + public void ShipDateTest() + { + // TODO: unit test for the property 'ShipDate' + } + + /// + /// Test the property 'Status' + /// + [Test] + public void StatusTest() + { + // TODO: unit test for the property 'Status' + } + + /// + /// Test the property 'Complete' + /// + [Test] + public void CompleteTest() + { + // TODO: unit test for the property 'Complete' + } + + + } + +} diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient.Test/PetApiTests.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient.Test/PetApiTests.cs new file mode 100644 index 00000000000..aeb2f1262b9 --- /dev/null +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient.Test/PetApiTests.cs @@ -0,0 +1,141 @@ +using System; +using System.IO; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Reflection; +using RestSharp; +using NUnit.Framework; + +using IO.Swagger.Client; +using IO.Swagger.Api; +using IO.Swagger.Model; + +namespace IO.Swagger.Test +{ + [TestFixture] + public class PetApiTests + { + private PetApi instance; + + /// + /// Setup before each unit test + /// + [SetUp] + public void Init() + { + instance = new PetApi(); + } + + /// + /// Clean up after each unit test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of PetApi + /// + [Test] + public void InstanceTest() + { + Assert.IsInstanceOf (instance, "instance is a PetApi"); + } + + + /// + /// Test UpdatePet + /// + [Test] + public void UpdatePetTest() + { + // TODO: add unit test for the method 'UpdatePet' + } + + /// + /// Test AddPet + /// + [Test] + public void AddPetTest() + { + // TODO: add unit test for the method 'AddPet' + } + + /// + /// Test FindPetsByStatus + /// + [Test] + public void FindPetsByStatusTest() + { + // TODO: add unit test for the method 'FindPetsByStatus' + } + + /// + /// Test FindPetsByTags + /// + [Test] + public void FindPetsByTagsTest() + { + // TODO: add unit test for the method 'FindPetsByTags' + } + + /// + /// Test GetPetById + /// + [Test] + public void GetPetByIdTest() + { + // TODO: add unit test for the method 'GetPetById' + } + + /// + /// Test UpdatePetWithForm + /// + [Test] + public void UpdatePetWithFormTest() + { + // TODO: add unit test for the method 'UpdatePetWithForm' + } + + /// + /// Test DeletePet + /// + [Test] + public void DeletePetTest() + { + // TODO: add unit test for the method 'DeletePet' + } + + /// + /// Test UploadFile + /// + [Test] + public void UploadFileTest() + { + // TODO: add unit test for the method 'UploadFile' + } + + /// + /// Test GetPetByIdWithByteArray + /// + [Test] + public void GetPetByIdWithByteArrayTest() + { + // TODO: add unit test for the method 'GetPetByIdWithByteArray' + } + + /// + /// Test AddPetUsingByteArray + /// + [Test] + public void AddPetUsingByteArrayTest() + { + // TODO: add unit test for the method 'AddPetUsingByteArray' + } + + } + +} diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient.Test/PetTests.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient.Test/PetTests.cs new file mode 100644 index 00000000000..6b203dbd125 --- /dev/null +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient.Test/PetTests.cs @@ -0,0 +1,104 @@ +using NUnit.Framework; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using IO.Swagger.Api; +using IO.Swagger.Model; +using IO.Swagger.Client; +using System.Reflection; + +namespace IO.Swagger.Test +{ + [TestFixture] + public class PetTests + { + private Pet instance; + + /// + /// Setup before each test + /// + [SetUp] + public void Init() + { + instance = new Pet(); + } + + /// + /// Clean up after each test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of Pet + /// + [Test] + public void PetInstanceTest() + { + Assert.IsInstanceOf (instance, "instance is a Pet"); + } + + + /// + /// Test the property 'Id' + /// + [Test] + public void IdTest() + { + // TODO: unit test for the property 'Id' + } + + /// + /// Test the property 'Category' + /// + [Test] + public void CategoryTest() + { + // TODO: unit test for the property 'Category' + } + + /// + /// Test the property 'Name' + /// + [Test] + public void NameTest() + { + // TODO: unit test for the property 'Name' + } + + /// + /// Test the property 'PhotoUrls' + /// + [Test] + public void PhotoUrlsTest() + { + // TODO: unit test for the property 'PhotoUrls' + } + + /// + /// Test the property 'Tags' + /// + [Test] + public void TagsTest() + { + // TODO: unit test for the property 'Tags' + } + + /// + /// Test the property 'Status' + /// + [Test] + public void StatusTest() + { + // TODO: unit test for the property 'Status' + } + + + } + +} diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient.Test/StoreApiTests.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient.Test/StoreApiTests.cs new file mode 100644 index 00000000000..f271564e62b --- /dev/null +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient.Test/StoreApiTests.cs @@ -0,0 +1,87 @@ +using System; +using System.IO; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Reflection; +using RestSharp; +using NUnit.Framework; + +using IO.Swagger.Client; +using IO.Swagger.Api; +using IO.Swagger.Model; + +namespace IO.Swagger.Test +{ + [TestFixture] + public class StoreApiTests + { + private StoreApi instance; + + /// + /// Setup before each unit test + /// + [SetUp] + public void Init() + { + instance = new StoreApi(); + } + + /// + /// Clean up after each unit test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of StoreApi + /// + [Test] + public void InstanceTest() + { + Assert.IsInstanceOf (instance, "instance is a StoreApi"); + } + + + /// + /// Test GetInventory + /// + [Test] + public void GetInventoryTest() + { + // TODO: add unit test for the method 'GetInventory' + } + + /// + /// Test PlaceOrder + /// + [Test] + public void PlaceOrderTest() + { + // TODO: add unit test for the method 'PlaceOrder' + } + + /// + /// Test GetOrderById + /// + [Test] + public void GetOrderByIdTest() + { + // TODO: add unit test for the method 'GetOrderById' + } + + /// + /// Test DeleteOrder + /// + [Test] + public void DeleteOrderTest() + { + // TODO: add unit test for the method 'DeleteOrder' + } + + } + +} diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient.Test/TagTests.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient.Test/TagTests.cs new file mode 100644 index 00000000000..ad772584cc5 --- /dev/null +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient.Test/TagTests.cs @@ -0,0 +1,68 @@ +using NUnit.Framework; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using IO.Swagger.Api; +using IO.Swagger.Model; +using IO.Swagger.Client; +using System.Reflection; + +namespace IO.Swagger.Test +{ + [TestFixture] + public class TagTests + { + private Tag instance; + + /// + /// Setup before each test + /// + [SetUp] + public void Init() + { + instance = new Tag(); + } + + /// + /// Clean up after each test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of Tag + /// + [Test] + public void TagInstanceTest() + { + Assert.IsInstanceOf (instance, "instance is a Tag"); + } + + + /// + /// Test the property 'Id' + /// + [Test] + public void IdTest() + { + // TODO: unit test for the property 'Id' + } + + /// + /// Test the property 'Name' + /// + [Test] + public void NameTest() + { + // TODO: unit test for the property 'Name' + } + + + } + +} diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient.Test/UserApiTests.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient.Test/UserApiTests.cs new file mode 100644 index 00000000000..13d62345eb9 --- /dev/null +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient.Test/UserApiTests.cs @@ -0,0 +1,123 @@ +using System; +using System.IO; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Reflection; +using RestSharp; +using NUnit.Framework; + +using IO.Swagger.Client; +using IO.Swagger.Api; +using IO.Swagger.Model; + +namespace IO.Swagger.Test +{ + [TestFixture] + public class UserApiTests + { + private UserApi instance; + + /// + /// Setup before each unit test + /// + [SetUp] + public void Init() + { + instance = new UserApi(); + } + + /// + /// Clean up after each unit test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of UserApi + /// + [Test] + public void InstanceTest() + { + Assert.IsInstanceOf (instance, "instance is a UserApi"); + } + + + /// + /// Test CreateUser + /// + [Test] + public void CreateUserTest() + { + // TODO: add unit test for the method 'CreateUser' + } + + /// + /// Test CreateUsersWithArrayInput + /// + [Test] + public void CreateUsersWithArrayInputTest() + { + // TODO: add unit test for the method 'CreateUsersWithArrayInput' + } + + /// + /// Test CreateUsersWithListInput + /// + [Test] + public void CreateUsersWithListInputTest() + { + // TODO: add unit test for the method 'CreateUsersWithListInput' + } + + /// + /// Test LoginUser + /// + [Test] + public void LoginUserTest() + { + // TODO: add unit test for the method 'LoginUser' + } + + /// + /// Test LogoutUser + /// + [Test] + public void LogoutUserTest() + { + // TODO: add unit test for the method 'LogoutUser' + } + + /// + /// Test GetUserByName + /// + [Test] + public void GetUserByNameTest() + { + // TODO: add unit test for the method 'GetUserByName' + } + + /// + /// Test UpdateUser + /// + [Test] + public void UpdateUserTest() + { + // TODO: add unit test for the method 'UpdateUser' + } + + /// + /// Test DeleteUser + /// + [Test] + public void DeleteUserTest() + { + // TODO: add unit test for the method 'DeleteUser' + } + + } + +} diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient.Test/UserTests.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient.Test/UserTests.cs new file mode 100644 index 00000000000..4610313b734 --- /dev/null +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient.Test/UserTests.cs @@ -0,0 +1,122 @@ +using NUnit.Framework; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using IO.Swagger.Api; +using IO.Swagger.Model; +using IO.Swagger.Client; +using System.Reflection; + +namespace IO.Swagger.Test +{ + [TestFixture] + public class UserTests + { + private User instance; + + /// + /// Setup before each test + /// + [SetUp] + public void Init() + { + instance = new User(); + } + + /// + /// Clean up after each test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of User + /// + [Test] + public void UserInstanceTest() + { + Assert.IsInstanceOf (instance, "instance is a User"); + } + + + /// + /// Test the property 'Id' + /// + [Test] + public void IdTest() + { + // TODO: unit test for the property 'Id' + } + + /// + /// Test the property 'Username' + /// + [Test] + public void UsernameTest() + { + // TODO: unit test for the property 'Username' + } + + /// + /// Test the property 'FirstName' + /// + [Test] + public void FirstNameTest() + { + // TODO: unit test for the property 'FirstName' + } + + /// + /// Test the property 'LastName' + /// + [Test] + public void LastNameTest() + { + // TODO: unit test for the property 'LastName' + } + + /// + /// Test the property 'Email' + /// + [Test] + public void EmailTest() + { + // TODO: unit test for the property 'Email' + } + + /// + /// Test the property 'Password' + /// + [Test] + public void PasswordTest() + { + // TODO: unit test for the property 'Password' + } + + /// + /// Test the property 'Phone' + /// + [Test] + public void PhoneTest() + { + // TODO: unit test for the property 'Phone' + } + + /// + /// Test the property 'UserStatus' + /// + [Test] + public void UserStatusTest() + { + // TODO: unit test for the property 'UserStatus' + } + + + } + +} diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/README.md b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/README.md index 8d71999564f..3ce83da957b 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/README.md +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/README.md @@ -10,7 +10,8 @@ NOTE: The DLLs included in the package may not be the latest version. We recommn ``` Install-Package RestSharp Install-Package Newtonsoft.Json -``` +``` + ## Installation Run the following command to generate the DLL - [Mac/Linux] compile-mono.sh diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Category.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Category.cs index 11223d88991..681d878531b 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Category.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Category.cs @@ -4,6 +4,7 @@ using System.IO; using System.Text; using System.Collections; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Runtime.Serialization; using Newtonsoft.Json; diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Order.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Order.cs index c09efc1acf1..09b595410af 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Order.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Order.cs @@ -4,6 +4,7 @@ using System.IO; using System.Text; using System.Collections; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Runtime.Serialization; using Newtonsoft.Json; diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Pet.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Pet.cs index 313103a3b8a..f36ceed9357 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Pet.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Pet.cs @@ -4,6 +4,7 @@ using System.IO; using System.Text; using System.Collections; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Runtime.Serialization; using Newtonsoft.Json; diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Tag.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Tag.cs index 2c1cb092a35..fab0081f0bc 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Tag.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/Tag.cs @@ -4,6 +4,7 @@ using System.IO; using System.Text; using System.Collections; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Runtime.Serialization; using Newtonsoft.Json; diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/User.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/User.cs index abbcea65b58..42c5b98100f 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/User.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/User.cs @@ -4,6 +4,7 @@ using System.IO; using System.Text; using System.Collections; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Runtime.Serialization; using Newtonsoft.Json; From 047abc63a41f5695daee3bdb5ad5e52abd0f9493 Mon Sep 17 00:00:00 2001 From: wing328 Date: Sun, 31 Jan 2016 12:49:32 +0800 Subject: [PATCH 027/189] add test case for c# method --- .../main/resources/csharp/api_test.mustache | 4 ++ .../Lib/SwaggerClient.Test/PetApiTests.cs | 45 +++++++++++++++++++ .../Lib/SwaggerClient.Test/StoreApiTests.cs | 15 +++++++ .../Lib/SwaggerClient.Test/UserApiTests.cs | 33 ++++++++++++++ 4 files changed, 97 insertions(+) diff --git a/modules/swagger-codegen/src/main/resources/csharp/api_test.mustache b/modules/swagger-codegen/src/main/resources/csharp/api_test.mustache index 3afe27063dd..2e638711b0f 100644 --- a/modules/swagger-codegen/src/main/resources/csharp/api_test.mustache +++ b/modules/swagger-codegen/src/main/resources/csharp/api_test.mustache @@ -54,6 +54,10 @@ namespace {{packageName}}.Test public void {{operationId}}Test() { // TODO: add unit test for the method '{{operationId}}' + {{#allParams}}{{{dataType}}} {{paramName}} = null; // TODO: replace null with proper value + {{/allParams}} + {{#returnType}}var response = {{/returnType}}instance.{{operationId}}({{#allParams}}{{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}); + {{#returnType}}Assert.IsInstanceOf<{{{returnType}}}> (response, "response is {{{returnType}}}");{{/returnType}} } {{/operation}}{{/operations}} } diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient.Test/PetApiTests.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient.Test/PetApiTests.cs index aeb2f1262b9..a7caec2f54c 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient.Test/PetApiTests.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient.Test/PetApiTests.cs @@ -53,6 +53,10 @@ namespace IO.Swagger.Test public void UpdatePetTest() { // TODO: add unit test for the method 'UpdatePet' + Pet body = null; // TODO: replace null with proper value + + instance.UpdatePet(body); + } /// @@ -62,6 +66,10 @@ namespace IO.Swagger.Test public void AddPetTest() { // TODO: add unit test for the method 'AddPet' + Pet body = null; // TODO: replace null with proper value + + instance.AddPet(body); + } /// @@ -71,6 +79,10 @@ namespace IO.Swagger.Test public void FindPetsByStatusTest() { // TODO: add unit test for the method 'FindPetsByStatus' + List status = null; // TODO: replace null with proper value + + var response = instance.FindPetsByStatus(status); + Assert.IsInstanceOf> (response, "response is List"); } /// @@ -80,6 +92,10 @@ namespace IO.Swagger.Test public void FindPetsByTagsTest() { // TODO: add unit test for the method 'FindPetsByTags' + List tags = null; // TODO: replace null with proper value + + var response = instance.FindPetsByTags(tags); + Assert.IsInstanceOf> (response, "response is List"); } /// @@ -89,6 +105,10 @@ namespace IO.Swagger.Test public void GetPetByIdTest() { // TODO: add unit test for the method 'GetPetById' + long? petId = null; // TODO: replace null with proper value + + var response = instance.GetPetById(petId); + Assert.IsInstanceOf (response, "response is Pet"); } /// @@ -98,6 +118,12 @@ namespace IO.Swagger.Test public void UpdatePetWithFormTest() { // TODO: add unit test for the method 'UpdatePetWithForm' + string petId = null; // TODO: replace null with proper value + string name = null; // TODO: replace null with proper value + string status = null; // TODO: replace null with proper value + + instance.UpdatePetWithForm(petId, name, status); + } /// @@ -107,6 +133,11 @@ namespace IO.Swagger.Test public void DeletePetTest() { // TODO: add unit test for the method 'DeletePet' + long? petId = null; // TODO: replace null with proper value + string apiKey = null; // TODO: replace null with proper value + + instance.DeletePet(petId, apiKey); + } /// @@ -116,6 +147,12 @@ namespace IO.Swagger.Test public void UploadFileTest() { // TODO: add unit test for the method 'UploadFile' + long? petId = null; // TODO: replace null with proper value + string additionalMetadata = null; // TODO: replace null with proper value + Stream file = null; // TODO: replace null with proper value + + instance.UploadFile(petId, additionalMetadata, file); + } /// @@ -125,6 +162,10 @@ namespace IO.Swagger.Test public void GetPetByIdWithByteArrayTest() { // TODO: add unit test for the method 'GetPetByIdWithByteArray' + long? petId = null; // TODO: replace null with proper value + + var response = instance.GetPetByIdWithByteArray(petId); + Assert.IsInstanceOf (response, "response is byte[]"); } /// @@ -134,6 +175,10 @@ namespace IO.Swagger.Test public void AddPetUsingByteArrayTest() { // TODO: add unit test for the method 'AddPetUsingByteArray' + byte[] body = null; // TODO: replace null with proper value + + instance.AddPetUsingByteArray(body); + } } diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient.Test/StoreApiTests.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient.Test/StoreApiTests.cs index f271564e62b..8e3f99eff2d 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient.Test/StoreApiTests.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient.Test/StoreApiTests.cs @@ -53,6 +53,9 @@ namespace IO.Swagger.Test public void GetInventoryTest() { // TODO: add unit test for the method 'GetInventory' + + var response = instance.GetInventory(); + Assert.IsInstanceOf> (response, "response is Dictionary"); } /// @@ -62,6 +65,10 @@ namespace IO.Swagger.Test public void PlaceOrderTest() { // TODO: add unit test for the method 'PlaceOrder' + Order body = null; // TODO: replace null with proper value + + var response = instance.PlaceOrder(body); + Assert.IsInstanceOf (response, "response is Order"); } /// @@ -71,6 +78,10 @@ namespace IO.Swagger.Test public void GetOrderByIdTest() { // TODO: add unit test for the method 'GetOrderById' + string orderId = null; // TODO: replace null with proper value + + var response = instance.GetOrderById(orderId); + Assert.IsInstanceOf (response, "response is Order"); } /// @@ -80,6 +91,10 @@ namespace IO.Swagger.Test public void DeleteOrderTest() { // TODO: add unit test for the method 'DeleteOrder' + string orderId = null; // TODO: replace null with proper value + + instance.DeleteOrder(orderId); + } } diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient.Test/UserApiTests.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient.Test/UserApiTests.cs index 13d62345eb9..0d543c384aa 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient.Test/UserApiTests.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient.Test/UserApiTests.cs @@ -53,6 +53,10 @@ namespace IO.Swagger.Test public void CreateUserTest() { // TODO: add unit test for the method 'CreateUser' + User body = null; // TODO: replace null with proper value + + instance.CreateUser(body); + } /// @@ -62,6 +66,10 @@ namespace IO.Swagger.Test public void CreateUsersWithArrayInputTest() { // TODO: add unit test for the method 'CreateUsersWithArrayInput' + List body = null; // TODO: replace null with proper value + + instance.CreateUsersWithArrayInput(body); + } /// @@ -71,6 +79,10 @@ namespace IO.Swagger.Test public void CreateUsersWithListInputTest() { // TODO: add unit test for the method 'CreateUsersWithListInput' + List body = null; // TODO: replace null with proper value + + instance.CreateUsersWithListInput(body); + } /// @@ -80,6 +92,11 @@ namespace IO.Swagger.Test public void LoginUserTest() { // TODO: add unit test for the method 'LoginUser' + string username = null; // TODO: replace null with proper value + string password = null; // TODO: replace null with proper value + + var response = instance.LoginUser(username, password); + Assert.IsInstanceOf (response, "response is string"); } /// @@ -89,6 +106,9 @@ namespace IO.Swagger.Test public void LogoutUserTest() { // TODO: add unit test for the method 'LogoutUser' + + instance.LogoutUser(); + } /// @@ -98,6 +118,10 @@ namespace IO.Swagger.Test public void GetUserByNameTest() { // TODO: add unit test for the method 'GetUserByName' + string username = null; // TODO: replace null with proper value + + var response = instance.GetUserByName(username); + Assert.IsInstanceOf (response, "response is User"); } /// @@ -107,6 +131,11 @@ namespace IO.Swagger.Test public void UpdateUserTest() { // TODO: add unit test for the method 'UpdateUser' + string username = null; // TODO: replace null with proper value + User body = null; // TODO: replace null with proper value + + instance.UpdateUser(username, body); + } /// @@ -116,6 +145,10 @@ namespace IO.Swagger.Test public void DeleteUserTest() { // TODO: add unit test for the method 'DeleteUser' + string username = null; // TODO: replace null with proper value + + instance.DeleteUser(username); + } } From 5a53814346be454b4d5137eb181adac0f0000890 Mon Sep 17 00:00:00 2001 From: wing328 Date: Sun, 31 Jan 2016 17:08:47 +0800 Subject: [PATCH 028/189] add api info as file header to ruby templates --- .../io/swagger/codegen/DefaultGenerator.java | 3 +++ .../src/main/resources/ruby/api.mustache | 4 ++++ .../main/resources/ruby/api_client.mustache | 4 ++++ .../src/main/resources/ruby/api_error.mustache | 4 ++++ .../src/main/resources/ruby/api_info.mustache | 18 ++++++++++++++++++ .../src/main/resources/ruby/api_test.mustache | 4 ++++ .../src/main/resources/ruby/gem.mustache | 4 ++++ .../src/main/resources/ruby/model.mustache | 4 ++++ .../main/resources/ruby/model_test.mustache | 4 ++++ .../src/main/resources/ruby/version.mustache | 4 ++++ samples/client/petstore/ruby/lib/petstore.rb | 16 ++++++++++++++++ .../petstore/ruby/lib/petstore/api/pet_api.rb | 16 ++++++++++++++++ .../ruby/lib/petstore/api/store_api.rb | 16 ++++++++++++++++ .../petstore/ruby/lib/petstore/api/user_api.rb | 16 ++++++++++++++++ .../petstore/ruby/lib/petstore/api_client.rb | 16 ++++++++++++++++ .../petstore/ruby/lib/petstore/api_error.rb | 16 ++++++++++++++++ .../ruby/lib/petstore/models/category.rb | 16 ++++++++++++++++ .../petstore/ruby/lib/petstore/models/order.rb | 16 ++++++++++++++++ .../petstore/ruby/lib/petstore/models/pet.rb | 16 ++++++++++++++++ .../petstore/ruby/lib/petstore/models/tag.rb | 16 ++++++++++++++++ .../petstore/ruby/lib/petstore/models/user.rb | 16 ++++++++++++++++ .../petstore/ruby/lib/petstore/version.rb | 16 ++++++++++++++++ .../petstore/ruby/spec/api/PetApi_spec.rb | 16 ++++++++++++++++ .../petstore/ruby/spec/api/StoreApi_spec.rb | 16 ++++++++++++++++ .../petstore/ruby/spec/api/UserApi_spec.rb | 16 ++++++++++++++++ .../petstore/ruby/spec/models/Category_spec.rb | 16 ++++++++++++++++ .../petstore/ruby/spec/models/Order_spec.rb | 16 ++++++++++++++++ .../petstore/ruby/spec/models/Pet_spec.rb | 16 ++++++++++++++++ .../petstore/ruby/spec/models/Tag_spec.rb | 16 ++++++++++++++++ .../petstore/ruby/spec/models/User_spec.rb | 16 ++++++++++++++++ 30 files changed, 373 insertions(+) create mode 100644 modules/swagger-codegen/src/main/resources/ruby/api_info.mustache diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java index 6da8958fe13..eda6c2a456b 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java @@ -129,6 +129,9 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { if (info.getVersion() != null) { config.additionalProperties().put("version", info.getVersion()); } + if (info.getTermsOfService() != null) { + config.additionalProperties().put("termsOfService", info.getTermsOfService()); + } } StringBuilder hostBuilder = new StringBuilder(); diff --git a/modules/swagger-codegen/src/main/resources/ruby/api.mustache b/modules/swagger-codegen/src/main/resources/ruby/api.mustache index 85eeec8b962..a48dfd565c0 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/api.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/api.mustache @@ -1,3 +1,7 @@ +=begin +{{> api_info}} +=end + require "uri" module {{moduleName}} diff --git a/modules/swagger-codegen/src/main/resources/ruby/api_client.mustache b/modules/swagger-codegen/src/main/resources/ruby/api_client.mustache index 2ad1491ee1a..d0ad5abf771 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/api_client.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/api_client.mustache @@ -1,3 +1,7 @@ +=begin +{{> api_info}} +=end + require 'date' require 'json' require 'logger' diff --git a/modules/swagger-codegen/src/main/resources/ruby/api_error.mustache b/modules/swagger-codegen/src/main/resources/ruby/api_error.mustache index f8b598dad71..ddd8cda32f5 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/api_error.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/api_error.mustache @@ -1,3 +1,7 @@ +=begin +{{> api_info}} +=end + module {{moduleName}} class ApiError < StandardError attr_reader :code, :response_headers, :response_body diff --git a/modules/swagger-codegen/src/main/resources/ruby/api_info.mustache b/modules/swagger-codegen/src/main/resources/ruby/api_info.mustache new file mode 100644 index 00000000000..28301757e70 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/ruby/api_info.mustache @@ -0,0 +1,18 @@ +{{#appName}}{{{appName}}} + +{{/appName}} +{{#appDescription}}{{{appDescription}}} + +{{/appDescription}} +{{#version}}OpenAPI spec version: {{version}}{{/version}} +{{#infoEmail}}Contact: {{{infoEmail}}}{{/infoEmail}} +Generated by: https://github.com/swagger-api/swagger-codegen.git + +{{#licenseInfo}} +License: {{{licenseInfo}}} +{{#licenseUrl}}{{licenseUrl}}{{/licenseUrl}} + +{{/licenseInfo}} +{{#termsOfService}} +Terms of Service: {{{termsOfService}}} +{{/termsOfService}} diff --git a/modules/swagger-codegen/src/main/resources/ruby/api_test.mustache b/modules/swagger-codegen/src/main/resources/ruby/api_test.mustache index d6528ee9312..7e95c2d6446 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/api_test.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/api_test.mustache @@ -1,3 +1,7 @@ +=begin +{{> api_info}} +=end + require 'spec_helper' require 'json' diff --git a/modules/swagger-codegen/src/main/resources/ruby/gem.mustache b/modules/swagger-codegen/src/main/resources/ruby/gem.mustache index ec5ee0ac17c..db694b7355d 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/gem.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/gem.mustache @@ -1,3 +1,7 @@ +=begin +{{> api_info}} +=end + # Common files require '{{gemName}}/api_client' require '{{gemName}}/api_error' diff --git a/modules/swagger-codegen/src/main/resources/ruby/model.mustache b/modules/swagger-codegen/src/main/resources/ruby/model.mustache index 21de688e525..86567e1d594 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/model.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/model.mustache @@ -1,3 +1,7 @@ +=begin +{{> api_info}} +=end + require 'date' module {{moduleName}}{{#models}}{{#model}}{{#description}} diff --git a/modules/swagger-codegen/src/main/resources/ruby/model_test.mustache b/modules/swagger-codegen/src/main/resources/ruby/model_test.mustache index 53860a2494e..f5204447975 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/model_test.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/model_test.mustache @@ -1,3 +1,7 @@ +=begin +{{> api_info}} +=end + require 'spec_helper' require 'json' require 'date' diff --git a/modules/swagger-codegen/src/main/resources/ruby/version.mustache b/modules/swagger-codegen/src/main/resources/ruby/version.mustache index 67cfc8ea325..982bcdb3e52 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/version.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/version.mustache @@ -1,3 +1,7 @@ +=begin +{{> api_info}} +=end + module {{moduleName}} VERSION = "{{gemVersion}}" end diff --git a/samples/client/petstore/ruby/lib/petstore.rb b/samples/client/petstore/ruby/lib/petstore.rb index 82d51d44124..7b24a5750d3 100644 --- a/samples/client/petstore/ruby/lib/petstore.rb +++ b/samples/client/petstore/ruby/lib/petstore.rb @@ -1,3 +1,19 @@ +=begin +Swagger Petstore + +This is a sample server Petstore server. You can find out more about Swagger at http://swagger.io or on irc.freenode.net, #swagger. For this sample, you can use the api key \"special-key\" to test the authorization filters + +OpenAPI spec version: 1.0.0 +Contact: apiteam@swagger.io +Generated by: https://github.com/swagger-api/swagger-codegen.git + +License: Apache 2.0 +http://www.apache.org/licenses/LICENSE-2.0.html + +Terms of Service: http://swagger.io/terms/ + +=end + # Common files require 'petstore/api_client' require 'petstore/api_error' diff --git a/samples/client/petstore/ruby/lib/petstore/api/pet_api.rb b/samples/client/petstore/ruby/lib/petstore/api/pet_api.rb index 48c4042c1b4..f6d3a52a760 100644 --- a/samples/client/petstore/ruby/lib/petstore/api/pet_api.rb +++ b/samples/client/petstore/ruby/lib/petstore/api/pet_api.rb @@ -1,3 +1,19 @@ +=begin +Swagger Petstore + +This is a sample server Petstore server. You can find out more about Swagger at http://swagger.io or on irc.freenode.net, #swagger. For this sample, you can use the api key \"special-key\" to test the authorization filters + +OpenAPI spec version: 1.0.0 +Contact: apiteam@swagger.io +Generated by: https://github.com/swagger-api/swagger-codegen.git + +License: Apache 2.0 +http://www.apache.org/licenses/LICENSE-2.0.html + +Terms of Service: http://swagger.io/terms/ + +=end + require "uri" module Petstore diff --git a/samples/client/petstore/ruby/lib/petstore/api/store_api.rb b/samples/client/petstore/ruby/lib/petstore/api/store_api.rb index 18ad29af7e9..40c27f23f8e 100644 --- a/samples/client/petstore/ruby/lib/petstore/api/store_api.rb +++ b/samples/client/petstore/ruby/lib/petstore/api/store_api.rb @@ -1,3 +1,19 @@ +=begin +Swagger Petstore + +This is a sample server Petstore server. You can find out more about Swagger at http://swagger.io or on irc.freenode.net, #swagger. For this sample, you can use the api key \"special-key\" to test the authorization filters + +OpenAPI spec version: 1.0.0 +Contact: apiteam@swagger.io +Generated by: https://github.com/swagger-api/swagger-codegen.git + +License: Apache 2.0 +http://www.apache.org/licenses/LICENSE-2.0.html + +Terms of Service: http://swagger.io/terms/ + +=end + require "uri" module Petstore diff --git a/samples/client/petstore/ruby/lib/petstore/api/user_api.rb b/samples/client/petstore/ruby/lib/petstore/api/user_api.rb index 7b44fa8808a..edd110768e6 100644 --- a/samples/client/petstore/ruby/lib/petstore/api/user_api.rb +++ b/samples/client/petstore/ruby/lib/petstore/api/user_api.rb @@ -1,3 +1,19 @@ +=begin +Swagger Petstore + +This is a sample server Petstore server. You can find out more about Swagger at http://swagger.io or on irc.freenode.net, #swagger. For this sample, you can use the api key \"special-key\" to test the authorization filters + +OpenAPI spec version: 1.0.0 +Contact: apiteam@swagger.io +Generated by: https://github.com/swagger-api/swagger-codegen.git + +License: Apache 2.0 +http://www.apache.org/licenses/LICENSE-2.0.html + +Terms of Service: http://swagger.io/terms/ + +=end + require "uri" module Petstore diff --git a/samples/client/petstore/ruby/lib/petstore/api_client.rb b/samples/client/petstore/ruby/lib/petstore/api_client.rb index 09d5777f5e8..7ed05c09941 100644 --- a/samples/client/petstore/ruby/lib/petstore/api_client.rb +++ b/samples/client/petstore/ruby/lib/petstore/api_client.rb @@ -1,3 +1,19 @@ +=begin +Swagger Petstore + +This is a sample server Petstore server. You can find out more about Swagger at http://swagger.io or on irc.freenode.net, #swagger. For this sample, you can use the api key \"special-key\" to test the authorization filters + +OpenAPI spec version: 1.0.0 +Contact: apiteam@swagger.io +Generated by: https://github.com/swagger-api/swagger-codegen.git + +License: Apache 2.0 +http://www.apache.org/licenses/LICENSE-2.0.html + +Terms of Service: http://swagger.io/terms/ + +=end + require 'date' require 'json' require 'logger' diff --git a/samples/client/petstore/ruby/lib/petstore/api_error.rb b/samples/client/petstore/ruby/lib/petstore/api_error.rb index e1b6b3acfd6..b05ca2fdaf6 100644 --- a/samples/client/petstore/ruby/lib/petstore/api_error.rb +++ b/samples/client/petstore/ruby/lib/petstore/api_error.rb @@ -1,3 +1,19 @@ +=begin +Swagger Petstore + +This is a sample server Petstore server. You can find out more about Swagger at http://swagger.io or on irc.freenode.net, #swagger. For this sample, you can use the api key \"special-key\" to test the authorization filters + +OpenAPI spec version: 1.0.0 +Contact: apiteam@swagger.io +Generated by: https://github.com/swagger-api/swagger-codegen.git + +License: Apache 2.0 +http://www.apache.org/licenses/LICENSE-2.0.html + +Terms of Service: http://swagger.io/terms/ + +=end + module Petstore class ApiError < StandardError attr_reader :code, :response_headers, :response_body diff --git a/samples/client/petstore/ruby/lib/petstore/models/category.rb b/samples/client/petstore/ruby/lib/petstore/models/category.rb index 2e6effd24c0..01126b58e89 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/category.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/category.rb @@ -1,3 +1,19 @@ +=begin +Swagger Petstore + +This is a sample server Petstore server. You can find out more about Swagger at http://swagger.io or on irc.freenode.net, #swagger. For this sample, you can use the api key \"special-key\" to test the authorization filters + +OpenAPI spec version: 1.0.0 +Contact: apiteam@swagger.io +Generated by: https://github.com/swagger-api/swagger-codegen.git + +License: Apache 2.0 +http://www.apache.org/licenses/LICENSE-2.0.html + +Terms of Service: http://swagger.io/terms/ + +=end + require 'date' module Petstore diff --git a/samples/client/petstore/ruby/lib/petstore/models/order.rb b/samples/client/petstore/ruby/lib/petstore/models/order.rb index 0ff43744c75..fd6264496d5 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/order.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/order.rb @@ -1,3 +1,19 @@ +=begin +Swagger Petstore + +This is a sample server Petstore server. You can find out more about Swagger at http://swagger.io or on irc.freenode.net, #swagger. For this sample, you can use the api key \"special-key\" to test the authorization filters + +OpenAPI spec version: 1.0.0 +Contact: apiteam@swagger.io +Generated by: https://github.com/swagger-api/swagger-codegen.git + +License: Apache 2.0 +http://www.apache.org/licenses/LICENSE-2.0.html + +Terms of Service: http://swagger.io/terms/ + +=end + require 'date' module Petstore diff --git a/samples/client/petstore/ruby/lib/petstore/models/pet.rb b/samples/client/petstore/ruby/lib/petstore/models/pet.rb index cba403d7e28..380d740fb97 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/pet.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/pet.rb @@ -1,3 +1,19 @@ +=begin +Swagger Petstore + +This is a sample server Petstore server. You can find out more about Swagger at http://swagger.io or on irc.freenode.net, #swagger. For this sample, you can use the api key \"special-key\" to test the authorization filters + +OpenAPI spec version: 1.0.0 +Contact: apiteam@swagger.io +Generated by: https://github.com/swagger-api/swagger-codegen.git + +License: Apache 2.0 +http://www.apache.org/licenses/LICENSE-2.0.html + +Terms of Service: http://swagger.io/terms/ + +=end + require 'date' module Petstore diff --git a/samples/client/petstore/ruby/lib/petstore/models/tag.rb b/samples/client/petstore/ruby/lib/petstore/models/tag.rb index a821b665d17..9289df5c01b 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/tag.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/tag.rb @@ -1,3 +1,19 @@ +=begin +Swagger Petstore + +This is a sample server Petstore server. You can find out more about Swagger at http://swagger.io or on irc.freenode.net, #swagger. For this sample, you can use the api key \"special-key\" to test the authorization filters + +OpenAPI spec version: 1.0.0 +Contact: apiteam@swagger.io +Generated by: https://github.com/swagger-api/swagger-codegen.git + +License: Apache 2.0 +http://www.apache.org/licenses/LICENSE-2.0.html + +Terms of Service: http://swagger.io/terms/ + +=end + require 'date' module Petstore diff --git a/samples/client/petstore/ruby/lib/petstore/models/user.rb b/samples/client/petstore/ruby/lib/petstore/models/user.rb index 1959adeaa42..742a16b3b2d 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/user.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/user.rb @@ -1,3 +1,19 @@ +=begin +Swagger Petstore + +This is a sample server Petstore server. You can find out more about Swagger at http://swagger.io or on irc.freenode.net, #swagger. For this sample, you can use the api key \"special-key\" to test the authorization filters + +OpenAPI spec version: 1.0.0 +Contact: apiteam@swagger.io +Generated by: https://github.com/swagger-api/swagger-codegen.git + +License: Apache 2.0 +http://www.apache.org/licenses/LICENSE-2.0.html + +Terms of Service: http://swagger.io/terms/ + +=end + require 'date' module Petstore diff --git a/samples/client/petstore/ruby/lib/petstore/version.rb b/samples/client/petstore/ruby/lib/petstore/version.rb index fed78553ed3..2c3d31c3399 100644 --- a/samples/client/petstore/ruby/lib/petstore/version.rb +++ b/samples/client/petstore/ruby/lib/petstore/version.rb @@ -1,3 +1,19 @@ +=begin +Swagger Petstore + +This is a sample server Petstore server. You can find out more about Swagger at http://swagger.io or on irc.freenode.net, #swagger. For this sample, you can use the api key \"special-key\" to test the authorization filters + +OpenAPI spec version: 1.0.0 +Contact: apiteam@swagger.io +Generated by: https://github.com/swagger-api/swagger-codegen.git + +License: Apache 2.0 +http://www.apache.org/licenses/LICENSE-2.0.html + +Terms of Service: http://swagger.io/terms/ + +=end + module Petstore VERSION = "1.0.0" end diff --git a/samples/client/petstore/ruby/spec/api/PetApi_spec.rb b/samples/client/petstore/ruby/spec/api/PetApi_spec.rb index 98617c4af7d..457be15f9a4 100644 --- a/samples/client/petstore/ruby/spec/api/PetApi_spec.rb +++ b/samples/client/petstore/ruby/spec/api/PetApi_spec.rb @@ -1,3 +1,19 @@ +=begin +Swagger Petstore + +This is a sample server Petstore server. You can find out more about Swagger at http://swagger.io or on irc.freenode.net, #swagger. For this sample, you can use the api key \"special-key\" to test the authorization filters + +OpenAPI spec version: 1.0.0 +Contact: apiteam@swagger.io +Generated by: https://github.com/swagger-api/swagger-codegen.git + +License: Apache 2.0 +http://www.apache.org/licenses/LICENSE-2.0.html + +Terms of Service: http://swagger.io/terms/ + +=end + require 'spec_helper' require 'json' diff --git a/samples/client/petstore/ruby/spec/api/StoreApi_spec.rb b/samples/client/petstore/ruby/spec/api/StoreApi_spec.rb index 3a80ce52a79..81ba5f07f0d 100644 --- a/samples/client/petstore/ruby/spec/api/StoreApi_spec.rb +++ b/samples/client/petstore/ruby/spec/api/StoreApi_spec.rb @@ -1,3 +1,19 @@ +=begin +Swagger Petstore + +This is a sample server Petstore server. You can find out more about Swagger at http://swagger.io or on irc.freenode.net, #swagger. For this sample, you can use the api key \"special-key\" to test the authorization filters + +OpenAPI spec version: 1.0.0 +Contact: apiteam@swagger.io +Generated by: https://github.com/swagger-api/swagger-codegen.git + +License: Apache 2.0 +http://www.apache.org/licenses/LICENSE-2.0.html + +Terms of Service: http://swagger.io/terms/ + +=end + require 'spec_helper' require 'json' diff --git a/samples/client/petstore/ruby/spec/api/UserApi_spec.rb b/samples/client/petstore/ruby/spec/api/UserApi_spec.rb index 493a3b28ae5..894a62f6cc0 100644 --- a/samples/client/petstore/ruby/spec/api/UserApi_spec.rb +++ b/samples/client/petstore/ruby/spec/api/UserApi_spec.rb @@ -1,3 +1,19 @@ +=begin +Swagger Petstore + +This is a sample server Petstore server. You can find out more about Swagger at http://swagger.io or on irc.freenode.net, #swagger. For this sample, you can use the api key \"special-key\" to test the authorization filters + +OpenAPI spec version: 1.0.0 +Contact: apiteam@swagger.io +Generated by: https://github.com/swagger-api/swagger-codegen.git + +License: Apache 2.0 +http://www.apache.org/licenses/LICENSE-2.0.html + +Terms of Service: http://swagger.io/terms/ + +=end + require 'spec_helper' require 'json' diff --git a/samples/client/petstore/ruby/spec/models/Category_spec.rb b/samples/client/petstore/ruby/spec/models/Category_spec.rb index 80c6301499a..5c99a87bf86 100644 --- a/samples/client/petstore/ruby/spec/models/Category_spec.rb +++ b/samples/client/petstore/ruby/spec/models/Category_spec.rb @@ -1,3 +1,19 @@ +=begin +Swagger Petstore + +This is a sample server Petstore server. You can find out more about Swagger at http://swagger.io or on irc.freenode.net, #swagger. For this sample, you can use the api key \"special-key\" to test the authorization filters + +OpenAPI spec version: 1.0.0 +Contact: apiteam@swagger.io +Generated by: https://github.com/swagger-api/swagger-codegen.git + +License: Apache 2.0 +http://www.apache.org/licenses/LICENSE-2.0.html + +Terms of Service: http://swagger.io/terms/ + +=end + require 'spec_helper' require 'json' require 'date' diff --git a/samples/client/petstore/ruby/spec/models/Order_spec.rb b/samples/client/petstore/ruby/spec/models/Order_spec.rb index 19dd6411267..a78677410ef 100644 --- a/samples/client/petstore/ruby/spec/models/Order_spec.rb +++ b/samples/client/petstore/ruby/spec/models/Order_spec.rb @@ -1,3 +1,19 @@ +=begin +Swagger Petstore + +This is a sample server Petstore server. You can find out more about Swagger at http://swagger.io or on irc.freenode.net, #swagger. For this sample, you can use the api key \"special-key\" to test the authorization filters + +OpenAPI spec version: 1.0.0 +Contact: apiteam@swagger.io +Generated by: https://github.com/swagger-api/swagger-codegen.git + +License: Apache 2.0 +http://www.apache.org/licenses/LICENSE-2.0.html + +Terms of Service: http://swagger.io/terms/ + +=end + require 'spec_helper' require 'json' require 'date' diff --git a/samples/client/petstore/ruby/spec/models/Pet_spec.rb b/samples/client/petstore/ruby/spec/models/Pet_spec.rb index df597798b9c..f78259b5910 100644 --- a/samples/client/petstore/ruby/spec/models/Pet_spec.rb +++ b/samples/client/petstore/ruby/spec/models/Pet_spec.rb @@ -1,3 +1,19 @@ +=begin +Swagger Petstore + +This is a sample server Petstore server. You can find out more about Swagger at http://swagger.io or on irc.freenode.net, #swagger. For this sample, you can use the api key \"special-key\" to test the authorization filters + +OpenAPI spec version: 1.0.0 +Contact: apiteam@swagger.io +Generated by: https://github.com/swagger-api/swagger-codegen.git + +License: Apache 2.0 +http://www.apache.org/licenses/LICENSE-2.0.html + +Terms of Service: http://swagger.io/terms/ + +=end + require 'spec_helper' require 'json' require 'date' diff --git a/samples/client/petstore/ruby/spec/models/Tag_spec.rb b/samples/client/petstore/ruby/spec/models/Tag_spec.rb index 56be89ef6cb..e13c9169b8f 100644 --- a/samples/client/petstore/ruby/spec/models/Tag_spec.rb +++ b/samples/client/petstore/ruby/spec/models/Tag_spec.rb @@ -1,3 +1,19 @@ +=begin +Swagger Petstore + +This is a sample server Petstore server. You can find out more about Swagger at http://swagger.io or on irc.freenode.net, #swagger. For this sample, you can use the api key \"special-key\" to test the authorization filters + +OpenAPI spec version: 1.0.0 +Contact: apiteam@swagger.io +Generated by: https://github.com/swagger-api/swagger-codegen.git + +License: Apache 2.0 +http://www.apache.org/licenses/LICENSE-2.0.html + +Terms of Service: http://swagger.io/terms/ + +=end + require 'spec_helper' require 'json' require 'date' diff --git a/samples/client/petstore/ruby/spec/models/User_spec.rb b/samples/client/petstore/ruby/spec/models/User_spec.rb index 8d33ce00f5f..1d02e14e03a 100644 --- a/samples/client/petstore/ruby/spec/models/User_spec.rb +++ b/samples/client/petstore/ruby/spec/models/User_spec.rb @@ -1,3 +1,19 @@ +=begin +Swagger Petstore + +This is a sample server Petstore server. You can find out more about Swagger at http://swagger.io or on irc.freenode.net, #swagger. For this sample, you can use the api key \"special-key\" to test the authorization filters + +OpenAPI spec version: 1.0.0 +Contact: apiteam@swagger.io +Generated by: https://github.com/swagger-api/swagger-codegen.git + +License: Apache 2.0 +http://www.apache.org/licenses/LICENSE-2.0.html + +Terms of Service: http://swagger.io/terms/ + +=end + require 'spec_helper' require 'json' require 'date' From 4e3d94c0057f2b9ddae4f2eb6dce68dc80eee67f Mon Sep 17 00:00:00 2001 From: Masahiro Yamauchi Date: Sun, 31 Jan 2016 20:20:19 +0900 Subject: [PATCH 029/189] Code generator for haskell-servant framework --- bin/all-petstore.sh | 1 + bin/haskell-petstore.sh | 31 ++ .../languages/HaskellServantCodegen.java | 345 ++++++++++++++++++ .../services/io.swagger.codegen.CodegenConfig | 1 + .../src/main/resources/haskell/Apis.mustache | 26 ++ .../main/resources/haskell/Client.mustache | 35 ++ .../src/main/resources/haskell/LICENSE | 202 ++++++++++ .../main/resources/haskell/README.mustache | 7 + .../main/resources/haskell/Server.mustache | 13 + .../src/main/resources/haskell/Setup.mustache | 2 + .../src/main/resources/haskell/Utils.mustache | 27 ++ .../src/main/resources/haskell/api.mustache | 82 +++++ .../haskell/haskell-servant-codegen.mustache | 66 ++++ .../src/main/resources/haskell/model.mustache | 34 ++ .../src/main/resources/haskell/stack.mustache | 33 ++ .../haskell/HaskellServantOptionsTest.java | 36 ++ .../swagger/codegen/haskell/HaskellTest.java | 20 + .../HaskellServantOptionsProvider.java | 34 ++ samples/server/petstore/haskell/LICENSE | 202 ++++++++++ samples/server/petstore/haskell/README.md | 7 + samples/server/petstore/haskell/Setup.hs | 2 + .../server/petstore/haskell/client/Main.hs | 35 ++ .../haskell/haskell-servant-codegen.cabal | 68 ++++ .../server/petstore/haskell/lib/Api/PetApi.hs | 104 ++++++ .../petstore/haskell/lib/Api/StoreApi.hs | 67 ++++ .../petstore/haskell/lib/Api/UserApi.hs | 82 +++++ samples/server/petstore/haskell/lib/Apis.hs | 24 ++ .../petstore/haskell/lib/Model/Category.hs | 24 ++ .../petstore/haskell/lib/Model/Order.hs | 28 ++ .../server/petstore/haskell/lib/Model/Pet.hs | 30 ++ .../server/petstore/haskell/lib/Model/Tag.hs | 24 ++ .../server/petstore/haskell/lib/Model/User.hs | 30 ++ samples/server/petstore/haskell/lib/Utils.hs | 27 ++ .../server/petstore/haskell/server/Main.hs | 13 + samples/server/petstore/haskell/stack.yaml | 33 ++ 35 files changed, 1795 insertions(+) create mode 100755 bin/haskell-petstore.sh create mode 100644 modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/HaskellServantCodegen.java create mode 100644 modules/swagger-codegen/src/main/resources/haskell/Apis.mustache create mode 100644 modules/swagger-codegen/src/main/resources/haskell/Client.mustache create mode 100644 modules/swagger-codegen/src/main/resources/haskell/LICENSE create mode 100644 modules/swagger-codegen/src/main/resources/haskell/README.mustache create mode 100644 modules/swagger-codegen/src/main/resources/haskell/Server.mustache create mode 100644 modules/swagger-codegen/src/main/resources/haskell/Setup.mustache create mode 100644 modules/swagger-codegen/src/main/resources/haskell/Utils.mustache create mode 100644 modules/swagger-codegen/src/main/resources/haskell/api.mustache create mode 100644 modules/swagger-codegen/src/main/resources/haskell/haskell-servant-codegen.mustache create mode 100644 modules/swagger-codegen/src/main/resources/haskell/model.mustache create mode 100644 modules/swagger-codegen/src/main/resources/haskell/stack.mustache create mode 100644 modules/swagger-codegen/src/test/java/io/swagger/codegen/haskell/HaskellServantOptionsTest.java create mode 100644 modules/swagger-codegen/src/test/java/io/swagger/codegen/haskell/HaskellTest.java create mode 100644 modules/swagger-codegen/src/test/java/io/swagger/codegen/options/HaskellServantOptionsProvider.java create mode 100644 samples/server/petstore/haskell/LICENSE create mode 100644 samples/server/petstore/haskell/README.md create mode 100644 samples/server/petstore/haskell/Setup.hs create mode 100644 samples/server/petstore/haskell/client/Main.hs create mode 100644 samples/server/petstore/haskell/haskell-servant-codegen.cabal create mode 100644 samples/server/petstore/haskell/lib/Api/PetApi.hs create mode 100644 samples/server/petstore/haskell/lib/Api/StoreApi.hs create mode 100644 samples/server/petstore/haskell/lib/Api/UserApi.hs create mode 100644 samples/server/petstore/haskell/lib/Apis.hs create mode 100644 samples/server/petstore/haskell/lib/Model/Category.hs create mode 100644 samples/server/petstore/haskell/lib/Model/Order.hs create mode 100644 samples/server/petstore/haskell/lib/Model/Pet.hs create mode 100644 samples/server/petstore/haskell/lib/Model/Tag.hs create mode 100644 samples/server/petstore/haskell/lib/Model/User.hs create mode 100644 samples/server/petstore/haskell/lib/Utils.hs create mode 100644 samples/server/petstore/haskell/server/Main.hs create mode 100644 samples/server/petstore/haskell/stack.yaml diff --git a/bin/all-petstore.sh b/bin/all-petstore.sh index f6156dbcee9..702c40f37b0 100755 --- a/bin/all-petstore.sh +++ b/bin/all-petstore.sh @@ -23,6 +23,7 @@ cd $APP_DIR ./bin/clojure-petstore.sh ./bin/csharp-petstore.sh ./bin/dynamic-html.sh +./bin/haskell-petstore.sh ./bin/html-petstore.sh ./bin/java-petstore.sh ./bin/java-petstore-jersey2.sh diff --git a/bin/haskell-petstore.sh b/bin/haskell-petstore.sh new file mode 100755 index 00000000000..c604acd7cf2 --- /dev/null +++ b/bin/haskell-petstore.sh @@ -0,0 +1,31 @@ +#!/bin/sh + +SCRIPT="$0" + +while [ -h "$SCRIPT" ] ; do + ls=`ls -ld "$SCRIPT"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + SCRIPT="$link" + else + SCRIPT=`dirname "$SCRIPT"`/"$link" + fi +done + +if [ ! -d "${APP_DIR}" ]; then + APP_DIR=`dirname "$SCRIPT"`/.. + APP_DIR=`cd "${APP_DIR}"; pwd` +fi + +executable="./modules/swagger-codegen-cli/target/swagger-codegen-cli.jar" + +if [ ! -f "$executable" ] +then + mvn clean package +fi + +# if you've executed sbt assembly previously it will use that instead. +export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties" +ags="$@ generate -t modules/swagger-codegen/src/main/resources/haskell -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l haskell -o samples/server/petstore/haskell" + +java $JAVA_OPTS -jar $executable $ags diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/HaskellServantCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/HaskellServantCodegen.java new file mode 100644 index 00000000000..fae42843368 --- /dev/null +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/HaskellServantCodegen.java @@ -0,0 +1,345 @@ +package io.swagger.codegen.languages; + +import io.swagger.codegen.*; +import io.swagger.models.properties.*; +import io.swagger.models.Model; +import io.swagger.models.Operation; +import io.swagger.models.Swagger; + +import java.util.*; +import java.io.File; + +public class HaskellServantCodegen extends DefaultCodegen implements CodegenConfig { + + // source folder where to write the files + protected String sourceFolder = "src"; + protected String apiVersion = "0.0.1"; + + /** + * Configures the type of generator. + * + * @return the CodegenType for this generator + * @see io.swagger.codegen.CodegenType + */ + public CodegenType getTag() { + return CodegenType.SERVER; + } + + /** + * Configures a friendly name for the generator. This will be used by the generator + * to select the library with the -l flag. + * + * @return the friendly name for the generator + */ + public String getName() { + return "haskell"; + } + + /** + * Returns human-friendly help for the generator. Provide the consumer with help + * tips, parameters here + * + * @return A string value for the help message + */ + public String getHelp() { + return "Generates a HaskellServantCodegen library."; + } + + public HaskellServantCodegen() { + super(); + + // set the output folder here + outputFolder = "generated-code/HaskellServantCodegen"; + + /** + * Models. You can write model files using the modelTemplateFiles map. + * if you want to create one template for file, you can do so here. + * for multiple files for model, just put another entry in the `modelTemplateFiles` with + * a different extension + */ + modelTemplateFiles.put( + "model.mustache", // the template to use + ".hs"); // the extension for each file to write + + /** + * Api classes. You can write classes for each Api file with the apiTemplateFiles map. + * as with models, add multiple entries with different extensions for multiple files per + * class + */ + apiTemplateFiles.put( + "api.mustache", // the template to use + ".hs"); // the extension for each file to write + + /** + * Template Location. This is the location which templates will be read from. The generator + * will use the resource stream to attempt to read the templates. + */ + embeddedTemplateDir = templateDir = "haskell"; + + /** + * Api Package. Optional, if needed, this can be used in templates + */ + apiPackage = "Api"; + + /** + * Model Package. Optional, if needed, this can be used in templates + */ + modelPackage = "Model"; + + /** + * Reserved words. Override this with reserved words specific to your language + */ + // from https://wiki.haskell.org/Keywords + reservedWords = new HashSet( + Arrays.asList( + "as", "case", "of", + "class", "data", // "data family", "data instance", + "default", "deriving", // "deriving instance", + "do", + "forall", "foreign", "hiding", + "id", + "if", "then", "else", + "import", "infix", "infixl", "infixr", + "instance", "let", "in", + "mdo", "module", "newtype", + "proc", "qualified", "rec", + "type", // "type family", "type instance", + "where" + ) + ); + + /** + * Additional Properties. These values can be passed to the templates and + * are available in models, apis, and supporting files + */ + additionalProperties.put("apiVersion", apiVersion); + + /** + * Supporting Files. You can write single files for the generator with the + * entire object tree available. If the input file has a suffix of `.mustache + * it will be processed by the template engine. Otherwise, it will be copied + */ + supportingFiles.add(new SupportingFile("README.mustache", "", "README.md")); + supportingFiles.add(new SupportingFile("stack.mustache", "", "stack.yaml")); + supportingFiles.add(new SupportingFile("haskell-servant-codegen.mustache", "", "haskell-servant-codegen.cabal")); + supportingFiles.add(new SupportingFile("Setup.mustache", "", "Setup.hs")); + supportingFiles.add(new SupportingFile("LICENSE", "", "LICENSE")); + supportingFiles.add(new SupportingFile("Apis.mustache", "lib", "Apis.hs")); + supportingFiles.add(new SupportingFile("Utils.mustache", "lib", "Utils.hs")); + supportingFiles.add(new SupportingFile("Client.mustache", "client", "Main.hs")); + supportingFiles.add(new SupportingFile("Server.mustache", "server", "Main.hs")); + + /** + * Language Specific Primitives. These types will not trigger imports by + * the client generator + */ + languageSpecificPrimitives = new HashSet( + Arrays.asList( + "Bool", + "String", + "Int", + "Integer", + "Float", + "Char", + "Double", + "List", + "FilePath" + ) + ); + + typeMapping.clear(); + // typeMapping.put("enum", "NSString"); + typeMapping.put("array", "List"); + typeMapping.put("set", "Set"); + typeMapping.put("boolean", "Bool"); + typeMapping.put("string", "String"); + typeMapping.put("int", "Int"); + typeMapping.put("long", "Integer"); + typeMapping.put("float", "Float"); + // typeMapping.put("byte", "Byte"); + typeMapping.put("short", "Int"); + typeMapping.put("char", "Char"); + typeMapping.put("double", "Double"); + typeMapping.put("DateTime", "Integer"); + // typeMapping.put("object", "Map"); + typeMapping.put("file", "FilePath"); + + importMapping.clear(); + importMapping.put("Map", "qualified Data.Map as Map"); + + cliOptions.add(new CliOption(CodegenConstants.MODEL_PACKAGE, CodegenConstants.MODEL_PACKAGE_DESC)); + cliOptions.add(new CliOption(CodegenConstants.API_PACKAGE, CodegenConstants.API_PACKAGE_DESC)); + } + + /** + * Escapes a reserved word as defined in the `reservedWords` array. Handle escaping + * those terms here. This logic is only called if a variable matches the reseved words + * + * @return the escaped term + */ + @Override + public String escapeReservedWord(String name) { + return name + "_"; + } + + /** + * Location to write model files. You can use the modelPackage() as defined when the class is + * instantiated + */ + public String modelFileFolder() { + return outputFolder + File.separatorChar + "lib" + File.separatorChar + modelPackage().replace('.', File.separatorChar); + } + + /** + * Location to write api files. You can use the apiPackage() as defined when the class is + * instantiated + */ + @Override + public String apiFileFolder() { + return outputFolder + File.separatorChar + "lib" + File.separatorChar + apiPackage().replace('.', File.separatorChar); + } + + /** + * Optional - type declaration. This is a String which is used by the templates to instantiate your + * types. There is typically special handling for different property types + * + * @return a string value used as the `dataType` field for model templates, `returnType` for api templates + */ + @Override + public String getTypeDeclaration(Property p) { + if(p instanceof ArrayProperty) { + ArrayProperty ap = (ArrayProperty) p; + Property inner = ap.getItems(); + return "[" + getTypeDeclaration(inner) + "]"; + } + else if (p instanceof MapProperty) { + MapProperty mp = (MapProperty) p; + Property inner = mp.getAdditionalProperties(); + return "Map.Map String " + getTypeDeclaration(inner); + } + return super.getTypeDeclaration(p); + } + + /** + * Optional - swagger type conversion. This is used to map swagger types in a `Property` into + * either language specific types via `typeMapping` or into complex models if there is not a mapping. + * + * @return a string value of the type or complex model for this property + * @see io.swagger.models.properties.Property + */ + @Override + public String getSwaggerType(Property p) { + String swaggerType = super.getSwaggerType(p); + String type = null; + if(typeMapping.containsKey(swaggerType)) { + type = typeMapping.get(swaggerType); + if(languageSpecificPrimitives.contains(type)) + return toModelName(type); + } + else + type = swaggerType; + return toModelName(type); + } + + private String capturePath(String path, List pathParams) { + for (CodegenParameter p : pathParams) { + String pName = "{"+p.baseName+"}"; + if (path.indexOf(pName) >= 0) { + path = path.replace(pName, "Capture " + "\""+p.baseName+"\" " + p.dataType); + } + } + return path; + } + + private String queryPath(String path, List queryParams) { + for (CodegenParameter p : queryParams) { + path += " :> QueryParam \"" + p.baseName + "\" " + p.dataType; + } + return path; + } + + private String bodyPath(String path, List bodyParams) { + for (CodegenParameter p : bodyParams) { + path += " :> ReqBody '[JSON] " + p.dataType; + } + return path; + } + + private String formPath(String path, List formParams) { + String names = "Form"; + for (CodegenParameter p : formParams) { + if(p.dataType.equals("FilePath")){ + // file data processing + } + names += p.baseName; + } + if(formParams.size() > 0){ + path += " :> ReqBody '[FormUrlEncoded] " + names; + } + return path; + } + + private String headerPath(String path, List headerParams) { + for (CodegenParameter p : headerParams) { + path += " :> Header \"" + p.baseName + "\" " + p.dataType; + } + return path; + } + + + private String filterReturnType(String rt) { + if (rt == null || rt.equals("null")) { + return "()"; + } else if (rt.indexOf(" ") >= 0) { + return "(" + rt + ")"; + } + return rt; + } + + private String addReturnPath(String path, String httpMethod, String returnType) { + return path + " :> " + upperCaseFirst(httpMethod) + " '[JSON] " + filterReturnType(returnType); + } + + private String joinStrings(String sep, List ss) { + StringBuilder sb = new StringBuilder(); + for (String s : ss) { + if (sb.length() > 0) { + sb.append(sep); + } + sb.append(s); + } + return sb.toString(); + } + + private String replacePathSplitter(String path) { + String[] ps = path.replaceFirst("/", "").split("/", 0); + List rs = new ArrayList(); + for (String p : ps) { + if (p.indexOf("{") < 0) { + rs.add("\"" + p + "\""); + } else { + rs.add(p); + } + } + return joinStrings(" :> ", rs); + } + + private String upperCaseFirst(String str) { + char[] array = str.toLowerCase().toCharArray(); + array[0] = Character.toUpperCase(array[0]); + return new String(array); + } + + private String parseScheme(String basePath) { + return "Http"; + } + + @Override + public CodegenOperation fromOperation(String resourcePath, String httpMethod, Operation operation, Map definitions, Swagger swagger){ + CodegenOperation op = super.fromOperation(resourcePath, httpMethod, operation, definitions, swagger); + String path = op.path; + op.nickname = addReturnPath(headerPath(formPath(bodyPath(queryPath(capturePath(replacePathSplitter(path), op.pathParams), op.queryParams), op.bodyParams), op.formParams), op.headerParams), op.httpMethod, op.returnType); + return op; + } + +} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/META-INF/services/io.swagger.codegen.CodegenConfig b/modules/swagger-codegen/src/main/resources/META-INF/services/io.swagger.codegen.CodegenConfig index 5d8a4f0fc6b..9129fc33421 100644 --- a/modules/swagger-codegen/src/main/resources/META-INF/services/io.swagger.codegen.CodegenConfig +++ b/modules/swagger-codegen/src/main/resources/META-INF/services/io.swagger.codegen.CodegenConfig @@ -33,3 +33,4 @@ io.swagger.codegen.languages.TypeScriptNodeClientCodegen io.swagger.codegen.languages.AkkaScalaClientCodegen io.swagger.codegen.languages.CsharpDotNet2ClientCodegen io.swagger.codegen.languages.ClojureClientCodegen +io.swagger.codegen.languages.HaskellServantCodegen diff --git a/modules/swagger-codegen/src/main/resources/haskell/Apis.mustache b/modules/swagger-codegen/src/main/resources/haskell/Apis.mustache new file mode 100644 index 00000000000..3b60afafec6 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/haskell/Apis.mustache @@ -0,0 +1,26 @@ +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE TypeOperators #-} +{-# LANGUAGE FlexibleInstances #-} +module Apis ( + api + , API + ) where + +{{#apiInfo}} +{{#apis}} +import {{package}}.{{classname}} ({{classname}}) +{{/apis}} +{{/apiInfo}} + +import Data.Proxy +import Servant.API +import Test.QuickCheck +import qualified Data.Map as Map +import Utils + +type API = {{#apiInfo}}{{#apis}}{{classname}}{{#hasMore}} :<|> {{/hasMore}}{{/apis}}{{/apiInfo}} + +api :: Proxy API +api = Proxy diff --git a/modules/swagger-codegen/src/main/resources/haskell/Client.mustache b/modules/swagger-codegen/src/main/resources/haskell/Client.mustache new file mode 100644 index 00000000000..ab48bcbc43e --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/haskell/Client.mustache @@ -0,0 +1,35 @@ +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE TypeOperators #-} + +module Main where + +import Control.Monad (void) +import Control.Monad.Trans.Either +import Control.Monad.IO.Class +import Servant.API +import Servant.Client + +import Data.List.Split (splitOn) +import Network.URI (URI (..), URIAuth (..), parseURI) +import Data.Maybe (fromMaybe) +import Test.QuickCheck +import Control.Monad +{{#models}} +import {{importPath}} +{{/models}} +{{#apiInfo}} +{{#apis}} +import {{package}}.{{classname}} +{{/apis}} +{{/apiInfo}} + +-- userClient :: IO () +-- userClient = do +-- users <- sample' (arbitrary :: Gen String) +-- let user = last users +-- void . runEitherT $ do +-- getUserByName user >>= (liftIO . putStrLn . show) + +main :: IO () +main = putStrLn "Hello Server!" diff --git a/modules/swagger-codegen/src/main/resources/haskell/LICENSE b/modules/swagger-codegen/src/main/resources/haskell/LICENSE new file mode 100644 index 00000000000..b0033f5f837 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/haskell/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2015 Masahiro Yamauchi + + Licensed 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. diff --git a/modules/swagger-codegen/src/main/resources/haskell/README.mustache b/modules/swagger-codegen/src/main/resources/haskell/README.mustache new file mode 100644 index 00000000000..c8f4b4bbb9d --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/haskell/README.mustache @@ -0,0 +1,7 @@ +# Generated Servant Codes + +## How to use + +0. Install haskell-stack +1. stack build +2. stack exec client diff --git a/modules/swagger-codegen/src/main/resources/haskell/Server.mustache b/modules/swagger-codegen/src/main/resources/haskell/Server.mustache new file mode 100644 index 00000000000..68b4ff6ce33 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/haskell/Server.mustache @@ -0,0 +1,13 @@ +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE TypeOperators #-} + +module Main where + +import Apis +import Servant +import Servant.Mock +import qualified Network.Wai.Handler.Warp as Warp + +main :: IO () +main = Warp.run 8080 $ serve api (mock api) diff --git a/modules/swagger-codegen/src/main/resources/haskell/Setup.mustache b/modules/swagger-codegen/src/main/resources/haskell/Setup.mustache new file mode 100644 index 00000000000..9a994af677b --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/haskell/Setup.mustache @@ -0,0 +1,2 @@ +import Distribution.Simple +main = defaultMain diff --git a/modules/swagger-codegen/src/main/resources/haskell/Utils.mustache b/modules/swagger-codegen/src/main/resources/haskell/Utils.mustache new file mode 100644 index 00000000000..f6db2602ce8 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/haskell/Utils.mustache @@ -0,0 +1,27 @@ +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE TypeOperators #-} +{-# LANGUAGE FlexibleInstances #-} +module Utils where + +import GHC.Generics +import Servant.API +import Data.List (intercalate) +import Data.List.Split (splitOn) +import qualified Data.Map as Map +import qualified Data.Text as T +import Test.QuickCheck + +instance FromText [String] where + fromText = Just . splitOn "," . T.unpack + +instance ToText [String] where + toText = T.pack . intercalate "," + +lkp inputs l = case lookup l inputs of + Nothing -> Left $ "label " ++ T.unpack l ++ " not found" + Just v -> Right $ read (T.unpack v) + +instance (Ord k, Arbitrary k, Arbitrary v) => Arbitrary (Map.Map k v) where + arbitrary = Map.fromList <$> arbitrary diff --git a/modules/swagger-codegen/src/main/resources/haskell/api.mustache b/modules/swagger-codegen/src/main/resources/haskell/api.mustache new file mode 100644 index 00000000000..c49fcd5eff8 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/haskell/api.mustache @@ -0,0 +1,82 @@ +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE TypeOperators #-} +{-# LANGUAGE FlexibleInstances #-} +{-# LANGUAGE OverloadedStrings #-} + +{{#operations}} +module {{package}}.{{classname}} ( + {{#operation}}{{operationId}}{{#hasMore}} + , {{/hasMore}}{{/operation}} + , proxy{{classname}} + , {{classname}} + ) where +{{/operations}} + +import GHC.Generics +import Data.Proxy +import Servant.API +import Servant.Client +import Network.URI (URI (..), URIAuth (..), parseURI) +import Data.Maybe (fromMaybe) +import Servant.Common.Text +import Data.List (intercalate) +import qualified Data.Text as T +import Utils +import Test.QuickCheck +{{#imports}}import {{import}} +{{/imports}} + +{{#operations}} +{{#operation}} +{{#hasFormParams}} +data Form{{#formParams}}{{baseName}}{{/formParams}} = Form{{#formParams}}{{baseName}}{{/formParams}} + { {{#formParams}}{{baseName}} :: {{dataType}}{{#hasMore}} + , {{/hasMore}}{{/formParams}} + } deriving (Show, Eq, Generic) + +instance FromFormUrlEncoded Form{{#formParams}}{{baseName}}{{/formParams}} where + fromFormUrlEncoded inputs = Form{{#formParams}}{{baseName}}{{/formParams}} <$> {{#formParams}} lkp inputs "{{baseName}}"{{#hasMore}} <*> {{/hasMore}}{{/formParams}} +instance ToFormUrlEncoded Form{{#formParams}}{{baseName}}{{/formParams}} where + toFormUrlEncoded x = [({{#formParams}}(T.pack $ show $ {{package}}.{{classname}}.{{baseName}} x){{#hasMore}}, {{/hasMore}}{{/formParams}})] +instance Arbitrary Form{{#formParams}}{{baseName}}{{/formParams}} where + arbitrary = Form{{#formParams}}{{baseName}}{{/formParams}} <$> {{#formParams}}arbitrary{{#hasMore}} <*> {{/hasMore}}{{/formParams}} +{{/hasFormParams}} + +{{/operation}} +{{/operations}} + +{{#operations}} +type {{classname}} = {{#operation}}{{& nickname}} -- {{operationId}}{{#hasMore}} + :<|> {{/hasMore}}{{/operation}} +{{/operations}} + +proxy{{classname}} :: Proxy {{classname}} +proxy{{classname}} = Proxy + +{{#operations}} + +serverPath :: String +serverPath = "{{basePath}}" + +parseHostPort :: String -> (String, Int) +parseHostPort path = (host,port) + where + authority = case parseURI path of + Just x -> uriAuthority x + _ -> Nothing + (host, port) = case authority of + Just y -> (uriRegName y, (getPort . uriPort) y) + _ -> ("localhost", 8080) + getPort p = case (length p) of + 0 -> 80 + _ -> (read . drop 1) p + +(host, port) = parseHostPort serverPath + +{{#operation}} +{{operationId}}{{#hasMore}} + :<|> {{/hasMore}}{{/operation}} + = client proxy{{classname}} $ BaseUrl Http host port +{{/operations}} diff --git a/modules/swagger-codegen/src/main/resources/haskell/haskell-servant-codegen.mustache b/modules/swagger-codegen/src/main/resources/haskell/haskell-servant-codegen.mustache new file mode 100644 index 00000000000..8fc17ba8e0f --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/haskell/haskell-servant-codegen.mustache @@ -0,0 +1,66 @@ +name: haskell-servant-codegen +version: 0.1.0.0 +synopsis: Swagger-codegen example for Haskell servant +description: Please see README.md +homepage: http://github.com/algas/haskell-servant-codegen#readme +license: Apache-2.0 +license-file: LICENSE +author: Masahiro Yamauchi +maintainer: sgt.yamauchi@gmail.com +copyright: 2015- Masahiro Yamauchi +category: Web +build-type: Simple +-- extra-source-files: +cabal-version: >=1.10 + +library + hs-source-dirs: lib + exposed-modules: Utils{{#models}}{{#model}} + , {{importPath}}{{/model}}{{/models}} +{{#apiInfo}} +{{#apis}} + , {{package}}.{{classname}} +{{/apis}} +{{/apiInfo}} + , Apis + ghc-options: -Wall + build-depends: base + , aeson + , text + , split + , containers + , network-uri + , QuickCheck + , servant + , servant-client + default-language: Haskell2010 + +executable client + hs-source-dirs: client + main-is: Main.hs + ghc-options: -threaded -rtsopts -with-rtsopts=-N + build-depends: base + , either + , transformers + , split + , network-uri + , QuickCheck + , servant + , servant-client + , haskell-servant-codegen + default-language: Haskell2010 + +executable server + hs-source-dirs: server + main-is: Main.hs + ghc-options: -threaded -rtsopts -with-rtsopts=-N + build-depends: base + , warp + , servant-server + , servant-mock + , haskell-servant-codegen + default-language: Haskell2010 + +source-repository head + type: git + location: https://github.com/algas/haskell-servant-codegen diff --git a/modules/swagger-codegen/src/main/resources/haskell/model.mustache b/modules/swagger-codegen/src/main/resources/haskell/model.mustache new file mode 100644 index 00000000000..1f76c197ae2 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/haskell/model.mustache @@ -0,0 +1,34 @@ +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE TypeOperators #-} +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE GeneralizedNewtypeDeriving #-} + +{{#models}} +{{#model}} +module {{package}}.{{classname}} + ( {{classname}} (..) + ) where +{{/model}} +{{/models}} + +import Data.Aeson +import GHC.Generics +import Test.QuickCheck +{{#imports}}import {{import}} +{{/imports}} + +{{#models}} +{{#model}} + +data {{classname}} = {{classname}} + { {{#vars}}{{& name}} :: {{datatype}}{{#hasMore}} + , {{/hasMore}}{{/vars}} + } deriving (Show, Eq, Generic) + +instance FromJSON {{classname}} +instance ToJSON {{classname}} +instance Arbitrary {{classname}} where + arbitrary = {{classname}} <$> {{#vars}}arbitrary{{#hasMore}} <*> {{/hasMore}}{{/vars}} +{{/model}} +{{/models}} diff --git a/modules/swagger-codegen/src/main/resources/haskell/stack.mustache b/modules/swagger-codegen/src/main/resources/haskell/stack.mustache new file mode 100644 index 00000000000..80699ab30c2 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/haskell/stack.mustache @@ -0,0 +1,33 @@ +# For more information, see: https://github.com/commercialhaskell/stack/blob/release/doc/yaml_configuration.md + +# Specifies the GHC version and set of packages available (e.g., lts-3.5, nightly-2015-09-21, ghc-7.10.2) +resolver: lts-3.17 + +# Local packages, usually specified by relative directory name +packages: +- '.' + +# Packages to be pulled from upstream that are not in the resolver (e.g., acme-missiles-0.3) +extra-deps: +- servant-mock-0.4.4.5 + +# Override default flag values for local packages and extra-deps +flags: {} + +# Extra package databases containing global packages +extra-package-dbs: [] + +# Control whether we use the GHC we find on the path +# system-ghc: true + +# Require a specific version of stack, using version ranges +# require-stack-version: -any # Default +# require-stack-version: >= 0.1.10.0 + +# Override the architecture used by stack, especially useful on Windows +# arch: i386 +# arch: x86_64 + +# Extra directories used by stack for building +# extra-include-dirs: [/path/to/dir] +# extra-lib-dirs: [/path/to/dir] diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/haskell/HaskellServantOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/haskell/HaskellServantOptionsTest.java new file mode 100644 index 00000000000..1806070d8d8 --- /dev/null +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/haskell/HaskellServantOptionsTest.java @@ -0,0 +1,36 @@ +package io.swagger.codegen.haskell; + +import io.swagger.codegen.AbstractOptionsTest; +import io.swagger.codegen.CodegenConfig; +import io.swagger.codegen.languages.HaskellServantCodegen; +import io.swagger.codegen.options.HaskellServantOptionsProvider; + +import mockit.Expectations; +import mockit.Tested; + +public class HaskellServantOptionsTest extends AbstractOptionsTest { + + @Tested + private HaskellServantCodegen clientCodegen; + + public HaskellServantOptionsTest() { + super(new HaskellServantOptionsProvider()); + } + + @Override + protected CodegenConfig getCodegenConfig() { + return clientCodegen; + } + + @Override + protected void setExpectations() { + new Expectations(clientCodegen) {{ + clientCodegen.setModelPackage(HaskellServantOptionsProvider.MODEL_PACKAGE_VALUE); + times = 1; + clientCodegen.setApiPackage(HaskellServantOptionsProvider.API_PACKAGE_VALUE); + times = 1; + clientCodegen.setSortParamsByRequiredFlag(Boolean.valueOf(HaskellServantOptionsProvider.SORT_PARAMS_VALUE)); + times = 1; + }}; + } +} diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/haskell/HaskellTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/haskell/HaskellTest.java new file mode 100644 index 00000000000..8800c80b819 --- /dev/null +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/haskell/HaskellTest.java @@ -0,0 +1,20 @@ +package io.swagger.codegen.haskell; + +import io.swagger.codegen.CodegenModel; +import io.swagger.codegen.CodegenOperation; +import io.swagger.codegen.DefaultCodegen; +import io.swagger.codegen.languages.HaskellServantCodegen; +import io.swagger.models.Operation; +import io.swagger.models.Swagger; +import io.swagger.parser.SwaggerParser; + +import org.testng.Assert; +import org.testng.annotations.Test; + +public class HaskellTest { + + @Test(description = "convert a haskell model with dots") + public void modelTest() { + Assert.assertEquals(true, true); + } +} diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/HaskellServantOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/HaskellServantOptionsProvider.java new file mode 100644 index 00000000000..cc4f7f3a9b3 --- /dev/null +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/HaskellServantOptionsProvider.java @@ -0,0 +1,34 @@ +package io.swagger.codegen.options; + +import io.swagger.codegen.CodegenConstants; + +import com.google.common.collect.ImmutableMap; + +import java.util.Map; + +public class HaskellServantOptionsProvider implements OptionsProvider { + public static final String MODEL_PACKAGE_VALUE = "Model"; + public static final String API_PACKAGE_VALUE = "Api"; + public static final String SORT_PARAMS_VALUE = "false"; + public static final String ENSURE_UNIQUE_PARAMS_VALUE = "true"; + + @Override + public String getLanguage() { + return "haskell"; + } + + @Override + public Map createOptions() { + ImmutableMap.Builder builder = new ImmutableMap.Builder(); + return builder.put(CodegenConstants.MODEL_PACKAGE, MODEL_PACKAGE_VALUE) + .put(CodegenConstants.API_PACKAGE, API_PACKAGE_VALUE) + .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, SORT_PARAMS_VALUE) + .put(CodegenConstants.ENSURE_UNIQUE_PARAMS, ENSURE_UNIQUE_PARAMS_VALUE) + .build(); + } + + @Override + public boolean isServer() { + return true; + } +} diff --git a/samples/server/petstore/haskell/LICENSE b/samples/server/petstore/haskell/LICENSE new file mode 100644 index 00000000000..b0033f5f837 --- /dev/null +++ b/samples/server/petstore/haskell/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2015 Masahiro Yamauchi + + Licensed 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. diff --git a/samples/server/petstore/haskell/README.md b/samples/server/petstore/haskell/README.md new file mode 100644 index 00000000000..c8f4b4bbb9d --- /dev/null +++ b/samples/server/petstore/haskell/README.md @@ -0,0 +1,7 @@ +# Generated Servant Codes + +## How to use + +0. Install haskell-stack +1. stack build +2. stack exec client diff --git a/samples/server/petstore/haskell/Setup.hs b/samples/server/petstore/haskell/Setup.hs new file mode 100644 index 00000000000..9a994af677b --- /dev/null +++ b/samples/server/petstore/haskell/Setup.hs @@ -0,0 +1,2 @@ +import Distribution.Simple +main = defaultMain diff --git a/samples/server/petstore/haskell/client/Main.hs b/samples/server/petstore/haskell/client/Main.hs new file mode 100644 index 00000000000..d0094c5f52e --- /dev/null +++ b/samples/server/petstore/haskell/client/Main.hs @@ -0,0 +1,35 @@ +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE TypeOperators #-} + +module Main where + +import Control.Monad (void) +import Control.Monad.Trans.Either +import Control.Monad.IO.Class +import Servant.API +import Servant.Client + +import Data.List.Split (splitOn) +import Network.URI (URI (..), URIAuth (..), parseURI) +import Data.Maybe (fromMaybe) +import Test.QuickCheck +import Control.Monad +import Model.User +import Model.Category +import Model.Pet +import Model.Tag +import Model.Order +import Api.UserApi +import Api.StoreApi +import Api.PetApi + +-- userClient :: IO () +-- userClient = do +-- users <- sample' (arbitrary :: Gen String) +-- let user = last users +-- void . runEitherT $ do +-- getUserByName user >>= (liftIO . putStrLn . show) + +main :: IO () +main = putStrLn "Hello Server!" diff --git a/samples/server/petstore/haskell/haskell-servant-codegen.cabal b/samples/server/petstore/haskell/haskell-servant-codegen.cabal new file mode 100644 index 00000000000..2693b3dd93b --- /dev/null +++ b/samples/server/petstore/haskell/haskell-servant-codegen.cabal @@ -0,0 +1,68 @@ +name: haskell-servant-codegen +version: 0.1.0.0 +synopsis: Swagger-codegen example for Haskell servant +description: Please see README.md +homepage: http://github.com/algas/haskell-servant-codegen#readme +license: Apache-2.0 +license-file: LICENSE +author: Masahiro Yamauchi +maintainer: sgt.yamauchi@gmail.com +copyright: 2015- Masahiro Yamauchi +category: Web +build-type: Simple +-- extra-source-files: +cabal-version: >=1.10 + +library + hs-source-dirs: lib + exposed-modules: Utils + , Model.User + , Model.Category + , Model.Pet + , Model.Tag + , Model.Order + , Api.UserApi + , Api.StoreApi + , Api.PetApi + , Apis + ghc-options: -Wall + build-depends: base + , aeson + , text + , split + , containers + , network-uri + , QuickCheck + , servant + , servant-client + default-language: Haskell2010 + +executable client + hs-source-dirs: client + main-is: Main.hs + ghc-options: -threaded -rtsopts -with-rtsopts=-N + build-depends: base + , either + , transformers + , split + , network-uri + , QuickCheck + , servant + , servant-client + , haskell-servant-codegen + default-language: Haskell2010 + +executable server + hs-source-dirs: server + main-is: Main.hs + ghc-options: -threaded -rtsopts -with-rtsopts=-N + build-depends: base + , warp + , servant-server + , servant-mock + , haskell-servant-codegen + default-language: Haskell2010 + +source-repository head + type: git + location: https://github.com/algas/haskell-servant-codegen diff --git a/samples/server/petstore/haskell/lib/Api/PetApi.hs b/samples/server/petstore/haskell/lib/Api/PetApi.hs new file mode 100644 index 00000000000..497ea240577 --- /dev/null +++ b/samples/server/petstore/haskell/lib/Api/PetApi.hs @@ -0,0 +1,104 @@ +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE TypeOperators #-} +{-# LANGUAGE FlexibleInstances #-} +{-# LANGUAGE OverloadedStrings #-} + +module Api.PetApi ( + updatePet + , addPet + , findPetsByStatus + , findPetsByTags + , getPetById + , updatePetWithForm + , deletePet + , uploadFile + , proxyPetApi + , PetApi + ) where + +import GHC.Generics +import Data.Proxy +import Servant.API +import Servant.Client +import Network.URI (URI (..), URIAuth (..), parseURI) +import Data.Maybe (fromMaybe) +import Servant.Common.Text +import Data.List (intercalate) +import qualified Data.Text as T +import Utils +import Test.QuickCheck +import Model.Pet + + + + + + +data Formnamestatus = Formnamestatus + { name :: String + , status :: String + } deriving (Show, Eq, Generic) + +instance FromFormUrlEncoded Formnamestatus where + fromFormUrlEncoded inputs = Formnamestatus <$> lkp inputs "name" <*> lkp inputs "status" +instance ToFormUrlEncoded Formnamestatus where + toFormUrlEncoded x = [((T.pack $ show $ Api.PetApi.name x), (T.pack $ show $ Api.PetApi.status x))] +instance Arbitrary Formnamestatus where + arbitrary = Formnamestatus <$> arbitrary <*> arbitrary + + +data FormadditionalMetadatafile = FormadditionalMetadatafile + { additionalMetadata :: String + , file :: FilePath + } deriving (Show, Eq, Generic) + +instance FromFormUrlEncoded FormadditionalMetadatafile where + fromFormUrlEncoded inputs = FormadditionalMetadatafile <$> lkp inputs "additionalMetadata" <*> lkp inputs "file" +instance ToFormUrlEncoded FormadditionalMetadatafile where + toFormUrlEncoded x = [((T.pack $ show $ Api.PetApi.additionalMetadata x), (T.pack $ show $ Api.PetApi.file x))] +instance Arbitrary FormadditionalMetadatafile where + arbitrary = FormadditionalMetadatafile <$> arbitrary <*> arbitrary + + +type PetApi = "pet" :> ReqBody '[JSON] Pet :> Put '[JSON] () -- updatePet + :<|> "pet" :> ReqBody '[JSON] Pet :> Post '[JSON] () -- addPet + :<|> "pet" :> "findByStatus" :> QueryParam "status" [String] :> Get '[JSON] [Pet] -- findPetsByStatus + :<|> "pet" :> "findByTags" :> QueryParam "tags" [String] :> Get '[JSON] [Pet] -- findPetsByTags + :<|> "pet" :> Capture "petId" Integer :> Get '[JSON] Pet -- getPetById + :<|> "pet" :> Capture "petId" String :> ReqBody '[FormUrlEncoded] Formnamestatus :> Post '[JSON] () -- updatePetWithForm + :<|> "pet" :> Capture "petId" Integer :> Header "api_key" String :> Delete '[JSON] () -- deletePet + :<|> "pet" :> Capture "petId" Integer :> "uploadImage" :> ReqBody '[FormUrlEncoded] FormadditionalMetadatafile :> Post '[JSON] () -- uploadFile + +proxyPetApi :: Proxy PetApi +proxyPetApi = Proxy + + +serverPath :: String +serverPath = "http://petstore.swagger.io/v2" + +parseHostPort :: String -> (String, Int) +parseHostPort path = (host,port) + where + authority = case parseURI path of + Just x -> uriAuthority x + _ -> Nothing + (host, port) = case authority of + Just y -> (uriRegName y, (getPort . uriPort) y) + _ -> ("localhost", 8080) + getPort p = case (length p) of + 0 -> 80 + _ -> (read . drop 1) p + +(host, port) = parseHostPort serverPath + +updatePet + :<|> addPet + :<|> findPetsByStatus + :<|> findPetsByTags + :<|> getPetById + :<|> updatePetWithForm + :<|> deletePet + :<|> uploadFile + = client proxyPetApi $ BaseUrl Http host port diff --git a/samples/server/petstore/haskell/lib/Api/StoreApi.hs b/samples/server/petstore/haskell/lib/Api/StoreApi.hs new file mode 100644 index 00000000000..819da1e5a05 --- /dev/null +++ b/samples/server/petstore/haskell/lib/Api/StoreApi.hs @@ -0,0 +1,67 @@ +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE TypeOperators #-} +{-# LANGUAGE FlexibleInstances #-} +{-# LANGUAGE OverloadedStrings #-} + +module Api.StoreApi ( + getInventory + , placeOrder + , getOrderById + , deleteOrder + , proxyStoreApi + , StoreApi + ) where + +import GHC.Generics +import Data.Proxy +import Servant.API +import Servant.Client +import Network.URI (URI (..), URIAuth (..), parseURI) +import Data.Maybe (fromMaybe) +import Servant.Common.Text +import Data.List (intercalate) +import qualified Data.Text as T +import Utils +import Test.QuickCheck +import qualified Data.Map as Map +import Model.Order + + + + + + +type StoreApi = "store" :> "inventory" :> Get '[JSON] (Map.Map String Integer) -- getInventory + :<|> "store" :> "order" :> ReqBody '[JSON] Order :> Post '[JSON] Order -- placeOrder + :<|> "store" :> "order" :> Capture "orderId" String :> Get '[JSON] Order -- getOrderById + :<|> "store" :> "order" :> Capture "orderId" String :> Delete '[JSON] () -- deleteOrder + +proxyStoreApi :: Proxy StoreApi +proxyStoreApi = Proxy + + +serverPath :: String +serverPath = "http://petstore.swagger.io/v2" + +parseHostPort :: String -> (String, Int) +parseHostPort path = (host,port) + where + authority = case parseURI path of + Just x -> uriAuthority x + _ -> Nothing + (host, port) = case authority of + Just y -> (uriRegName y, (getPort . uriPort) y) + _ -> ("localhost", 8080) + getPort p = case (length p) of + 0 -> 80 + _ -> (read . drop 1) p + +(host, port) = parseHostPort serverPath + +getInventory + :<|> placeOrder + :<|> getOrderById + :<|> deleteOrder + = client proxyStoreApi $ BaseUrl Http host port diff --git a/samples/server/petstore/haskell/lib/Api/UserApi.hs b/samples/server/petstore/haskell/lib/Api/UserApi.hs new file mode 100644 index 00000000000..b7c0ad638c5 --- /dev/null +++ b/samples/server/petstore/haskell/lib/Api/UserApi.hs @@ -0,0 +1,82 @@ +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE TypeOperators #-} +{-# LANGUAGE FlexibleInstances #-} +{-# LANGUAGE OverloadedStrings #-} + +module Api.UserApi ( + createUser + , createUsersWithArrayInput + , createUsersWithListInput + , loginUser + , logoutUser + , getUserByName + , updateUser + , deleteUser + , proxyUserApi + , UserApi + ) where + +import GHC.Generics +import Data.Proxy +import Servant.API +import Servant.Client +import Network.URI (URI (..), URIAuth (..), parseURI) +import Data.Maybe (fromMaybe) +import Servant.Common.Text +import Data.List (intercalate) +import qualified Data.Text as T +import Utils +import Test.QuickCheck +import Model.User + + + + + + + + + + +type UserApi = "user" :> ReqBody '[JSON] User :> Post '[JSON] () -- createUser + :<|> "user" :> "createWithArray" :> ReqBody '[JSON] [User] :> Post '[JSON] () -- createUsersWithArrayInput + :<|> "user" :> "createWithList" :> ReqBody '[JSON] [User] :> Post '[JSON] () -- createUsersWithListInput + :<|> "user" :> "login" :> QueryParam "username" String :> QueryParam "password" String :> Get '[JSON] String -- loginUser + :<|> "user" :> "logout" :> Get '[JSON] () -- logoutUser + :<|> "user" :> Capture "username" String :> Get '[JSON] User -- getUserByName + :<|> "user" :> Capture "username" String :> ReqBody '[JSON] User :> Put '[JSON] () -- updateUser + :<|> "user" :> Capture "username" String :> Delete '[JSON] () -- deleteUser + +proxyUserApi :: Proxy UserApi +proxyUserApi = Proxy + + +serverPath :: String +serverPath = "http://petstore.swagger.io/v2" + +parseHostPort :: String -> (String, Int) +parseHostPort path = (host,port) + where + authority = case parseURI path of + Just x -> uriAuthority x + _ -> Nothing + (host, port) = case authority of + Just y -> (uriRegName y, (getPort . uriPort) y) + _ -> ("localhost", 8080) + getPort p = case (length p) of + 0 -> 80 + _ -> (read . drop 1) p + +(host, port) = parseHostPort serverPath + +createUser + :<|> createUsersWithArrayInput + :<|> createUsersWithListInput + :<|> loginUser + :<|> logoutUser + :<|> getUserByName + :<|> updateUser + :<|> deleteUser + = client proxyUserApi $ BaseUrl Http host port diff --git a/samples/server/petstore/haskell/lib/Apis.hs b/samples/server/petstore/haskell/lib/Apis.hs new file mode 100644 index 00000000000..f8d61d2608a --- /dev/null +++ b/samples/server/petstore/haskell/lib/Apis.hs @@ -0,0 +1,24 @@ +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE TypeOperators #-} +{-# LANGUAGE FlexibleInstances #-} +module Apis ( + api + , API + ) where + +import Api.UserApi (UserApi) +import Api.StoreApi (StoreApi) +import Api.PetApi (PetApi) + +import Data.Proxy +import Servant.API +import Test.QuickCheck +import qualified Data.Map as Map +import Utils + +type API = UserApi :<|> StoreApi :<|> PetApi + +api :: Proxy API +api = Proxy diff --git a/samples/server/petstore/haskell/lib/Model/Category.hs b/samples/server/petstore/haskell/lib/Model/Category.hs new file mode 100644 index 00000000000..2d7d90776b2 --- /dev/null +++ b/samples/server/petstore/haskell/lib/Model/Category.hs @@ -0,0 +1,24 @@ +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE TypeOperators #-} +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE GeneralizedNewtypeDeriving #-} + +module Model.Category + ( Category (..) + ) where + +import Data.Aeson +import GHC.Generics +import Test.QuickCheck + + +data Category = Category + { id_ :: Integer + , name :: String + } deriving (Show, Eq, Generic) + +instance FromJSON Category +instance ToJSON Category +instance Arbitrary Category where + arbitrary = Category <$> arbitrary <*> arbitrary diff --git a/samples/server/petstore/haskell/lib/Model/Order.hs b/samples/server/petstore/haskell/lib/Model/Order.hs new file mode 100644 index 00000000000..5c50f4ad85c --- /dev/null +++ b/samples/server/petstore/haskell/lib/Model/Order.hs @@ -0,0 +1,28 @@ +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE TypeOperators #-} +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE GeneralizedNewtypeDeriving #-} + +module Model.Order + ( Order (..) + ) where + +import Data.Aeson +import GHC.Generics +import Test.QuickCheck + + +data Order = Order + { id_ :: Integer + , petId :: Integer + , quantity :: Integer + , shipDate :: Integer + , status :: String + , complete :: Bool + } deriving (Show, Eq, Generic) + +instance FromJSON Order +instance ToJSON Order +instance Arbitrary Order where + arbitrary = Order <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary diff --git a/samples/server/petstore/haskell/lib/Model/Pet.hs b/samples/server/petstore/haskell/lib/Model/Pet.hs new file mode 100644 index 00000000000..dfe4bb8893a --- /dev/null +++ b/samples/server/petstore/haskell/lib/Model/Pet.hs @@ -0,0 +1,30 @@ +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE TypeOperators #-} +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE GeneralizedNewtypeDeriving #-} + +module Model.Pet + ( Pet (..) + ) where + +import Data.Aeson +import GHC.Generics +import Test.QuickCheck +import Model.Category +import Model.Tag + + +data Pet = Pet + { id_ :: Integer + , category :: Category + , name :: String + , photoUrls :: [String] + , tags :: [Tag] + , status :: String + } deriving (Show, Eq, Generic) + +instance FromJSON Pet +instance ToJSON Pet +instance Arbitrary Pet where + arbitrary = Pet <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary diff --git a/samples/server/petstore/haskell/lib/Model/Tag.hs b/samples/server/petstore/haskell/lib/Model/Tag.hs new file mode 100644 index 00000000000..7bbf8feb9b4 --- /dev/null +++ b/samples/server/petstore/haskell/lib/Model/Tag.hs @@ -0,0 +1,24 @@ +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE TypeOperators #-} +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE GeneralizedNewtypeDeriving #-} + +module Model.Tag + ( Tag (..) + ) where + +import Data.Aeson +import GHC.Generics +import Test.QuickCheck + + +data Tag = Tag + { id_ :: Integer + , name :: String + } deriving (Show, Eq, Generic) + +instance FromJSON Tag +instance ToJSON Tag +instance Arbitrary Tag where + arbitrary = Tag <$> arbitrary <*> arbitrary diff --git a/samples/server/petstore/haskell/lib/Model/User.hs b/samples/server/petstore/haskell/lib/Model/User.hs new file mode 100644 index 00000000000..8ccf875dc7d --- /dev/null +++ b/samples/server/petstore/haskell/lib/Model/User.hs @@ -0,0 +1,30 @@ +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE TypeOperators #-} +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE GeneralizedNewtypeDeriving #-} + +module Model.User + ( User (..) + ) where + +import Data.Aeson +import GHC.Generics +import Test.QuickCheck + + +data User = User + { id_ :: Integer + , username :: String + , firstName :: String + , lastName :: String + , email :: String + , password :: String + , phone :: String + , userStatus :: Integer + } deriving (Show, Eq, Generic) + +instance FromJSON User +instance ToJSON User +instance Arbitrary User where + arbitrary = User <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary diff --git a/samples/server/petstore/haskell/lib/Utils.hs b/samples/server/petstore/haskell/lib/Utils.hs new file mode 100644 index 00000000000..f6db2602ce8 --- /dev/null +++ b/samples/server/petstore/haskell/lib/Utils.hs @@ -0,0 +1,27 @@ +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE TypeOperators #-} +{-# LANGUAGE FlexibleInstances #-} +module Utils where + +import GHC.Generics +import Servant.API +import Data.List (intercalate) +import Data.List.Split (splitOn) +import qualified Data.Map as Map +import qualified Data.Text as T +import Test.QuickCheck + +instance FromText [String] where + fromText = Just . splitOn "," . T.unpack + +instance ToText [String] where + toText = T.pack . intercalate "," + +lkp inputs l = case lookup l inputs of + Nothing -> Left $ "label " ++ T.unpack l ++ " not found" + Just v -> Right $ read (T.unpack v) + +instance (Ord k, Arbitrary k, Arbitrary v) => Arbitrary (Map.Map k v) where + arbitrary = Map.fromList <$> arbitrary diff --git a/samples/server/petstore/haskell/server/Main.hs b/samples/server/petstore/haskell/server/Main.hs new file mode 100644 index 00000000000..68b4ff6ce33 --- /dev/null +++ b/samples/server/petstore/haskell/server/Main.hs @@ -0,0 +1,13 @@ +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE TypeOperators #-} + +module Main where + +import Apis +import Servant +import Servant.Mock +import qualified Network.Wai.Handler.Warp as Warp + +main :: IO () +main = Warp.run 8080 $ serve api (mock api) diff --git a/samples/server/petstore/haskell/stack.yaml b/samples/server/petstore/haskell/stack.yaml new file mode 100644 index 00000000000..80699ab30c2 --- /dev/null +++ b/samples/server/petstore/haskell/stack.yaml @@ -0,0 +1,33 @@ +# For more information, see: https://github.com/commercialhaskell/stack/blob/release/doc/yaml_configuration.md + +# Specifies the GHC version and set of packages available (e.g., lts-3.5, nightly-2015-09-21, ghc-7.10.2) +resolver: lts-3.17 + +# Local packages, usually specified by relative directory name +packages: +- '.' + +# Packages to be pulled from upstream that are not in the resolver (e.g., acme-missiles-0.3) +extra-deps: +- servant-mock-0.4.4.5 + +# Override default flag values for local packages and extra-deps +flags: {} + +# Extra package databases containing global packages +extra-package-dbs: [] + +# Control whether we use the GHC we find on the path +# system-ghc: true + +# Require a specific version of stack, using version ranges +# require-stack-version: -any # Default +# require-stack-version: >= 0.1.10.0 + +# Override the architecture used by stack, especially useful on Windows +# arch: i386 +# arch: x86_64 + +# Extra directories used by stack for building +# extra-include-dirs: [/path/to/dir] +# extra-lib-dirs: [/path/to/dir] From cfcd6cbe48d65fa174f8abb02d2c57cb4c8f45cf Mon Sep 17 00:00:00 2001 From: Masahiro Yamauchi Date: Sun, 31 Jan 2016 22:33:51 +0900 Subject: [PATCH 030/189] Rename haskell to haskell-servant --- .../io/swagger/codegen/languages/HaskellServantCodegen.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/HaskellServantCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/HaskellServantCodegen.java index fae42843368..f70e416a299 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/HaskellServantCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/HaskellServantCodegen.java @@ -32,7 +32,7 @@ public class HaskellServantCodegen extends DefaultCodegen implements CodegenConf * @return the friendly name for the generator */ public String getName() { - return "haskell"; + return "haskell-servant"; } /** From e29cf209c8e66a2ad89e667eb4e37e8bc8fd670d Mon Sep 17 00:00:00 2001 From: Nick Maynard Date: Sun, 31 Jan 2016 21:02:11 +0000 Subject: [PATCH 031/189] Only define @DefaultValue if it's specified in the swagger spec --- .../main/resources/JavaJaxRS/jersey1_18/queryParams.mustache | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/jersey1_18/queryParams.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/jersey1_18/queryParams.mustache index 168233d222e..88da16ecf38 100644 --- a/modules/swagger-codegen/src/main/resources/JavaJaxRS/jersey1_18/queryParams.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/jersey1_18/queryParams.mustache @@ -1 +1 @@ -{{#isQueryParam}}@ApiParam(value = "{{{description}}}"{{#required}},required=true{{/required}}{{#allowableValues}}, {{> allowableValues }}{{/allowableValues}}{{#defaultValue}}, defaultValue="{{{defaultValue}}}"{{/defaultValue}}) @DefaultValue("{{defaultValue}}") @QueryParam("{{baseName}}") {{{dataType}}} {{paramName}}{{/isQueryParam}} \ No newline at end of file +{{#isQueryParam}}@ApiParam(value = "{{{description}}}"{{#required}},required=true{{/required}}{{#allowableValues}}, {{> allowableValues }}{{/allowableValues}}{{#defaultValue}}, defaultValue="{{{defaultValue}}}"{{/defaultValue}}){{#defaultValue}} @DefaultValue("{{{defaultValue}}}"){{/defaultValue}} @QueryParam("{{baseName}}") {{{dataType}}} {{paramName}}{{/isQueryParam}} From 943c66a97583a1a1bb5493fd91c273d13bf5c00b Mon Sep 17 00:00:00 2001 From: Nick Maynard Date: Sun, 31 Jan 2016 21:12:16 +0000 Subject: [PATCH 032/189] Update samples for DefaultValue --- .../gen/java/io/swagger/api/ApiException.java | 2 +- .../java/io/swagger/api/ApiOriginFilter.java | 2 +- .../io/swagger/api/ApiResponseMessage.java | 2 +- .../io/swagger/api/NotFoundException.java | 2 +- .../src/gen/java/io/swagger/api/PetApi.java | 58 ++++++++++++------- .../java/io/swagger/api/PetApiService.java | 2 +- .../api/PettestingByteArraytrueApi.java | 9 +-- .../PettestingByteArraytrueApiService.java | 2 +- .../src/gen/java/io/swagger/api/StoreApi.java | 17 +++--- .../java/io/swagger/api/StoreApiService.java | 2 +- .../gen/java/io/swagger/api/StringUtil.java | 2 +- .../src/gen/java/io/swagger/api/UserApi.java | 53 ++++++++++------- .../java/io/swagger/api/UserApiService.java | 2 +- .../gen/java/io/swagger/model/Category.java | 2 +- .../src/gen/java/io/swagger/model/Order.java | 2 +- .../src/gen/java/io/swagger/model/Pet.java | 2 +- .../src/gen/java/io/swagger/model/Tag.java | 2 +- .../src/gen/java/io/swagger/model/User.java | 2 +- 18 files changed, 96 insertions(+), 69 deletions(-) diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiException.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiException.java index a5617a528d0..05a021fa926 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiException.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiException.java @@ -1,6 +1,6 @@ package io.swagger.api; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2016-01-14T21:37:36.074Z") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-01-31T21:10:14.319Z") public class ApiException extends Exception{ private int code; public ApiException (int code, String msg) { diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiOriginFilter.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiOriginFilter.java index 3aa2bd2969b..453651a7531 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiOriginFilter.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiOriginFilter.java @@ -5,7 +5,7 @@ import java.io.IOException; import javax.servlet.*; import javax.servlet.http.HttpServletResponse; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2016-01-14T21:37:36.074Z") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-01-31T21:10:14.319Z") public class ApiOriginFilter implements javax.servlet.Filter { public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiResponseMessage.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiResponseMessage.java index 9375a2cd148..cdaec8116e1 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiResponseMessage.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/ApiResponseMessage.java @@ -3,7 +3,7 @@ package io.swagger.api; import javax.xml.bind.annotation.XmlTransient; @javax.xml.bind.annotation.XmlRootElement -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2016-01-14T21:37:36.074Z") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-01-31T21:10:14.319Z") public class ApiResponseMessage { public static final int ERROR = 1; public static final int WARNING = 2; diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/NotFoundException.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/NotFoundException.java index 66750bdde00..09e3cde5a11 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/NotFoundException.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/NotFoundException.java @@ -1,6 +1,6 @@ package io.swagger.api; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2016-01-14T21:37:36.074Z") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-01-31T21:10:14.319Z") public class NotFoundException extends ApiException { private int code; public NotFoundException (int code, String msg) { diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApi.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApi.java index 8f259abdd5e..5951ff34fab 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApi.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApi.java @@ -28,7 +28,7 @@ import javax.ws.rs.*; @io.swagger.annotations.Api(description = "the pet API") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2016-01-14T21:37:36.074Z") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-01-31T21:10:14.319Z") public class PetApi { private final PetApiService delegate = PetApiServiceFactory.getPetApi(); @@ -36,20 +36,21 @@ public class PetApi { @Consumes({ "application/json", "application/xml" }) @Produces({ "application/json", "application/xml" }) - @io.swagger.annotations.ApiOperation(value = "Update an existing pet", notes = "", response = Void.class, authorizations = { + @io.swagger.annotations.ApiOperation(value = "Update an existing pet", notes = "", response = void.class, authorizations = { @io.swagger.annotations.Authorization(value = "petstore_auth", scopes = { @io.swagger.annotations.AuthorizationScope(scope = "write:pets", description = "modify pets in your account"), @io.swagger.annotations.AuthorizationScope(scope = "read:pets", description = "read your pets") }) }, tags={ "pet", }) @io.swagger.annotations.ApiResponses(value = { - @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid ID supplied", response = Void.class), + @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid ID supplied", response = void.class), - @io.swagger.annotations.ApiResponse(code = 404, message = "Pet not found", response = Void.class), + @io.swagger.annotations.ApiResponse(code = 404, message = "Pet not found", response = void.class), - @io.swagger.annotations.ApiResponse(code = 405, message = "Validation exception", response = Void.class) }) + @io.swagger.annotations.ApiResponse(code = 405, message = "Validation exception", response = void.class) }) - public Response updatePet(@ApiParam(value = "Pet object that needs to be added to the store" ) Pet body,@Context SecurityContext securityContext) + public Response updatePet( +@ApiParam(value = "Pet object that needs to be added to the store" ) Pet body,@Context SecurityContext securityContext) throws NotFoundException { return delegate.updatePet(body,securityContext); } @@ -57,16 +58,17 @@ public class PetApi { @Consumes({ "application/json", "application/xml" }) @Produces({ "application/json", "application/xml" }) - @io.swagger.annotations.ApiOperation(value = "Add a new pet to the store", notes = "", response = Void.class, authorizations = { + @io.swagger.annotations.ApiOperation(value = "Add a new pet to the store", notes = "", response = void.class, authorizations = { @io.swagger.annotations.Authorization(value = "petstore_auth", scopes = { @io.swagger.annotations.AuthorizationScope(scope = "write:pets", description = "modify pets in your account"), @io.swagger.annotations.AuthorizationScope(scope = "read:pets", description = "read your pets") }) }, tags={ "pet", }) @io.swagger.annotations.ApiResponses(value = { - @io.swagger.annotations.ApiResponse(code = 405, message = "Invalid input", response = Void.class) }) + @io.swagger.annotations.ApiResponse(code = 405, message = "Invalid input", response = void.class) }) - public Response addPet(@ApiParam(value = "Pet object that needs to be added to the store" ) Pet body,@Context SecurityContext securityContext) + public Response addPet( +@ApiParam(value = "Pet object that needs to be added to the store" ) Pet body,@Context SecurityContext securityContext) throws NotFoundException { return delegate.addPet(body,securityContext); } @@ -85,7 +87,8 @@ public class PetApi { @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid status value", response = Pet.class, responseContainer = "List") }) - public Response findPetsByStatus(@ApiParam(value = "Status values that need to be considered for filter", defaultValue="available") @QueryParam("status") List status,@Context SecurityContext securityContext) + public Response findPetsByStatus(@ApiParam(value = "Status values that need to be considered for filter", defaultValue="available") @DefaultValue("available") @QueryParam("status") List status +,@Context SecurityContext securityContext) throws NotFoundException { return delegate.findPetsByStatus(status,securityContext); } @@ -104,7 +107,8 @@ public class PetApi { @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid tag value", response = Pet.class, responseContainer = "List") }) - public Response findPetsByTags(@ApiParam(value = "Tags to filter by") @QueryParam("tags") List tags,@Context SecurityContext securityContext) + public Response findPetsByTags(@ApiParam(value = "Tags to filter by") @QueryParam("tags") List tags +,@Context SecurityContext securityContext) throws NotFoundException { return delegate.findPetsByTags(tags,securityContext); } @@ -122,7 +126,8 @@ public class PetApi { @io.swagger.annotations.ApiResponse(code = 404, message = "Pet not found", response = Pet.class) }) - public Response getPetById(@ApiParam(value = "ID of pet that needs to be fetched",required=true) @PathParam("petId") Long petId,@Context SecurityContext securityContext) + public Response getPetById( +@ApiParam(value = "ID of pet that needs to be fetched",required=true) @PathParam("petId") Long petId,@Context SecurityContext securityContext) throws NotFoundException { return delegate.getPetById(petId,securityContext); } @@ -130,16 +135,19 @@ public class PetApi { @Path("/{petId}") @Consumes({ "application/x-www-form-urlencoded" }) @Produces({ "application/json", "application/xml" }) - @io.swagger.annotations.ApiOperation(value = "Updates a pet in the store with form data", notes = "", response = Void.class, authorizations = { + @io.swagger.annotations.ApiOperation(value = "Updates a pet in the store with form data", notes = "", response = void.class, authorizations = { @io.swagger.annotations.Authorization(value = "petstore_auth", scopes = { @io.swagger.annotations.AuthorizationScope(scope = "write:pets", description = "modify pets in your account"), @io.swagger.annotations.AuthorizationScope(scope = "read:pets", description = "read your pets") }) }, tags={ "pet", }) @io.swagger.annotations.ApiResponses(value = { - @io.swagger.annotations.ApiResponse(code = 405, message = "Invalid input", response = Void.class) }) + @io.swagger.annotations.ApiResponse(code = 405, message = "Invalid input", response = void.class) }) - public Response updatePetWithForm(@ApiParam(value = "ID of pet that needs to be updated",required=true) @PathParam("petId") String petId,@ApiParam(value = "Updated name of the pet")@FormParam("name") String name,@ApiParam(value = "Updated status of the pet")@FormParam("status") String status,@Context SecurityContext securityContext) + public Response updatePetWithForm( +@ApiParam(value = "ID of pet that needs to be updated",required=true) @PathParam("petId") String petId, +@ApiParam(value = "Updated name of the pet")@FormParam("name") String name, +@ApiParam(value = "Updated status of the pet")@FormParam("status") String status,@Context SecurityContext securityContext) throws NotFoundException { return delegate.updatePetWithForm(petId,name,status,securityContext); } @@ -147,16 +155,18 @@ public class PetApi { @Path("/{petId}") @Produces({ "application/json", "application/xml" }) - @io.swagger.annotations.ApiOperation(value = "Deletes a pet", notes = "", response = Void.class, authorizations = { + @io.swagger.annotations.ApiOperation(value = "Deletes a pet", notes = "", response = void.class, authorizations = { @io.swagger.annotations.Authorization(value = "petstore_auth", scopes = { @io.swagger.annotations.AuthorizationScope(scope = "write:pets", description = "modify pets in your account"), @io.swagger.annotations.AuthorizationScope(scope = "read:pets", description = "read your pets") }) }, tags={ "pet", }) @io.swagger.annotations.ApiResponses(value = { - @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid pet value", response = Void.class) }) + @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid pet value", response = void.class) }) - public Response deletePet(@ApiParam(value = "Pet id to delete",required=true) @PathParam("petId") Long petId,@ApiParam(value = "" )@HeaderParam("api_key") String apiKey,@Context SecurityContext securityContext) + public Response deletePet( +@ApiParam(value = "Pet id to delete",required=true) @PathParam("petId") Long petId, +@ApiParam(value = "" )@HeaderParam("api_key") String apiKey,@Context SecurityContext securityContext) throws NotFoundException { return delegate.deletePet(petId,apiKey,securityContext); } @@ -164,16 +174,19 @@ public class PetApi { @Path("/{petId}/uploadImage") @Consumes({ "multipart/form-data" }) @Produces({ "application/json", "application/xml" }) - @io.swagger.annotations.ApiOperation(value = "uploads an image", notes = "", response = Void.class, authorizations = { + @io.swagger.annotations.ApiOperation(value = "uploads an image", notes = "", response = void.class, authorizations = { @io.swagger.annotations.Authorization(value = "petstore_auth", scopes = { @io.swagger.annotations.AuthorizationScope(scope = "write:pets", description = "modify pets in your account"), @io.swagger.annotations.AuthorizationScope(scope = "read:pets", description = "read your pets") }) }, tags={ "pet", }) @io.swagger.annotations.ApiResponses(value = { - @io.swagger.annotations.ApiResponse(code = 200, message = "successful operation", response = Void.class) }) + @io.swagger.annotations.ApiResponse(code = 200, message = "successful operation", response = void.class) }) - public Response uploadFile(@ApiParam(value = "ID of pet to update",required=true) @PathParam("petId") Long petId,@ApiParam(value = "Additional data to pass to server")@FormParam("additionalMetadata") String additionalMetadata, @FormDataParam("file") InputStream inputStream, + public Response uploadFile( +@ApiParam(value = "ID of pet to update",required=true) @PathParam("petId") Long petId, +@ApiParam(value = "Additional data to pass to server")@FormParam("additionalMetadata") String additionalMetadata, + @FormDataParam("file") InputStream inputStream, @FormDataParam("file") FormDataContentDisposition fileDetail,@Context SecurityContext securityContext) throws NotFoundException { return delegate.uploadFile(petId,additionalMetadata,inputStream, fileDetail,securityContext); @@ -192,7 +205,8 @@ public class PetApi { @io.swagger.annotations.ApiResponse(code = 404, message = "Pet not found", response = byte[].class) }) - public Response getPetByIdWithByteArray(@ApiParam(value = "ID of pet that needs to be fetched",required=true) @PathParam("petId") Long petId,@Context SecurityContext securityContext) + public Response getPetByIdWithByteArray( +@ApiParam(value = "ID of pet that needs to be fetched",required=true) @PathParam("petId") Long petId,@Context SecurityContext securityContext) throws NotFoundException { return delegate.getPetByIdWithByteArray(petId,securityContext); } diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApiService.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApiService.java index 89dd965562c..589ffc75d64 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApiService.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PetApiService.java @@ -19,7 +19,7 @@ import com.sun.jersey.multipart.FormDataParam; import javax.ws.rs.core.Response; import javax.ws.rs.core.SecurityContext; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2016-01-14T21:37:36.074Z") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-01-31T21:10:14.319Z") public abstract class PetApiService { public abstract Response updatePet(Pet body,SecurityContext securityContext) diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PettestingByteArraytrueApi.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PettestingByteArraytrueApi.java index 81fda6fadac..8bdad3def7f 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PettestingByteArraytrueApi.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PettestingByteArraytrueApi.java @@ -26,7 +26,7 @@ import javax.ws.rs.*; @io.swagger.annotations.Api(description = "the pet?testing_byte_array=true API") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2016-01-14T21:37:36.074Z") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-01-31T21:10:14.319Z") public class PettestingByteArraytrueApi { private final PettestingByteArraytrueApiService delegate = PettestingByteArraytrueApiServiceFactory.getPettestingByteArraytrueApi(); @@ -34,16 +34,17 @@ public class PettestingByteArraytrueApi { @Consumes({ "application/json", "application/xml" }) @Produces({ "application/json", "application/xml" }) - @io.swagger.annotations.ApiOperation(value = "Fake endpoint to test byte array in body parameter for adding a new pet to the store", notes = "", response = Void.class, authorizations = { + @io.swagger.annotations.ApiOperation(value = "Fake endpoint to test byte array in body parameter for adding a new pet to the store", notes = "", response = void.class, authorizations = { @io.swagger.annotations.Authorization(value = "petstore_auth", scopes = { @io.swagger.annotations.AuthorizationScope(scope = "write:pets", description = "modify pets in your account"), @io.swagger.annotations.AuthorizationScope(scope = "read:pets", description = "read your pets") }) }, tags={ "pet" }) @io.swagger.annotations.ApiResponses(value = { - @io.swagger.annotations.ApiResponse(code = 405, message = "Invalid input", response = Void.class) }) + @io.swagger.annotations.ApiResponse(code = 405, message = "Invalid input", response = void.class) }) - public Response addPetUsingByteArray(@ApiParam(value = "Pet object in the form of byte array" ) byte[] body,@Context SecurityContext securityContext) + public Response addPetUsingByteArray( +@ApiParam(value = "Pet object in the form of byte array" ) byte[] body,@Context SecurityContext securityContext) throws NotFoundException { return delegate.addPetUsingByteArray(body,securityContext); } diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PettestingByteArraytrueApiService.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PettestingByteArraytrueApiService.java index 31a455cbc6b..01ca4f1e877 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PettestingByteArraytrueApiService.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/PettestingByteArraytrueApiService.java @@ -17,7 +17,7 @@ import com.sun.jersey.multipart.FormDataParam; import javax.ws.rs.core.Response; import javax.ws.rs.core.SecurityContext; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2016-01-14T21:37:36.074Z") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-01-31T21:10:14.319Z") public abstract class PettestingByteArraytrueApiService { public abstract Response addPetUsingByteArray(byte[] body,SecurityContext securityContext) diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApi.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApi.java index 64c82355e46..0200a17a256 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApi.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApi.java @@ -28,7 +28,7 @@ import javax.ws.rs.*; @io.swagger.annotations.Api(description = "the store API") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2016-01-14T21:37:36.074Z") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-01-31T21:10:14.319Z") public class StoreApi { private final StoreApiService delegate = StoreApiServiceFactory.getStoreApi(); @@ -56,7 +56,8 @@ public class StoreApi { @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid Order", response = Order.class) }) - public Response placeOrder(@ApiParam(value = "order placed for purchasing the pet" ) Order body,@Context SecurityContext securityContext) + public Response placeOrder( +@ApiParam(value = "order placed for purchasing the pet" ) Order body,@Context SecurityContext securityContext) throws NotFoundException { return delegate.placeOrder(body,securityContext); } @@ -72,7 +73,8 @@ public class StoreApi { @io.swagger.annotations.ApiResponse(code = 404, message = "Order not found", response = Order.class) }) - public Response getOrderById(@ApiParam(value = "ID of pet that needs to be fetched",required=true) @PathParam("orderId") String orderId,@Context SecurityContext securityContext) + public Response getOrderById( +@ApiParam(value = "ID of pet that needs to be fetched",required=true) @PathParam("orderId") String orderId,@Context SecurityContext securityContext) throws NotFoundException { return delegate.getOrderById(orderId,securityContext); } @@ -80,13 +82,14 @@ public class StoreApi { @Path("/order/{orderId}") @Produces({ "application/json", "application/xml" }) - @io.swagger.annotations.ApiOperation(value = "Delete purchase order by ID", notes = "For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors", response = Void.class, tags={ "store" }) + @io.swagger.annotations.ApiOperation(value = "Delete purchase order by ID", notes = "For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors", response = void.class, tags={ "store" }) @io.swagger.annotations.ApiResponses(value = { - @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid ID supplied", response = Void.class), + @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid ID supplied", response = void.class), - @io.swagger.annotations.ApiResponse(code = 404, message = "Order not found", response = Void.class) }) + @io.swagger.annotations.ApiResponse(code = 404, message = "Order not found", response = void.class) }) - public Response deleteOrder(@ApiParam(value = "ID of the order that needs to be deleted",required=true) @PathParam("orderId") String orderId,@Context SecurityContext securityContext) + public Response deleteOrder( +@ApiParam(value = "ID of the order that needs to be deleted",required=true) @PathParam("orderId") String orderId,@Context SecurityContext securityContext) throws NotFoundException { return delegate.deleteOrder(orderId,securityContext); } diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApiService.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApiService.java index 3a7c5a700de..a332fbd7a4f 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApiService.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StoreApiService.java @@ -19,7 +19,7 @@ import com.sun.jersey.multipart.FormDataParam; import javax.ws.rs.core.Response; import javax.ws.rs.core.SecurityContext; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2016-01-14T21:37:36.074Z") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-01-31T21:10:14.319Z") public abstract class StoreApiService { public abstract Response getInventory(SecurityContext securityContext) diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StringUtil.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StringUtil.java index 366fbfc81c4..7b6da6b2c21 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StringUtil.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/StringUtil.java @@ -1,6 +1,6 @@ package io.swagger.api; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2016-01-14T21:37:36.074Z") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-01-31T21:10:14.319Z") public class StringUtil { /** * Check if the given array contains the given value (with case-insensitive comparison). diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApi.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApi.java index 3751d867636..160019dbe2d 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApi.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApi.java @@ -28,7 +28,7 @@ import javax.ws.rs.*; @io.swagger.annotations.Api(description = "the user API") -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2016-01-14T21:37:36.074Z") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-01-31T21:10:14.319Z") public class UserApi { private final UserApiService delegate = UserApiServiceFactory.getUserApi(); @@ -36,11 +36,12 @@ public class UserApi { @Produces({ "application/json", "application/xml" }) - @io.swagger.annotations.ApiOperation(value = "Create user", notes = "This can only be done by the logged in user.", response = Void.class, tags={ "user", }) + @io.swagger.annotations.ApiOperation(value = "Create user", notes = "This can only be done by the logged in user.", response = void.class, tags={ "user", }) @io.swagger.annotations.ApiResponses(value = { - @io.swagger.annotations.ApiResponse(code = 200, message = "successful operation", response = Void.class) }) + @io.swagger.annotations.ApiResponse(code = 200, message = "successful operation", response = void.class) }) - public Response createUser(@ApiParam(value = "Created user object" ) User body,@Context SecurityContext securityContext) + public Response createUser( +@ApiParam(value = "Created user object" ) User body,@Context SecurityContext securityContext) throws NotFoundException { return delegate.createUser(body,securityContext); } @@ -48,11 +49,12 @@ public class UserApi { @Path("/createWithArray") @Produces({ "application/json", "application/xml" }) - @io.swagger.annotations.ApiOperation(value = "Creates list of users with given input array", notes = "", response = Void.class, tags={ "user", }) + @io.swagger.annotations.ApiOperation(value = "Creates list of users with given input array", notes = "", response = void.class, tags={ "user", }) @io.swagger.annotations.ApiResponses(value = { - @io.swagger.annotations.ApiResponse(code = 200, message = "successful operation", response = Void.class) }) + @io.swagger.annotations.ApiResponse(code = 200, message = "successful operation", response = void.class) }) - public Response createUsersWithArrayInput(@ApiParam(value = "List of user object" ) List body,@Context SecurityContext securityContext) + public Response createUsersWithArrayInput( +@ApiParam(value = "List of user object" ) List body,@Context SecurityContext securityContext) throws NotFoundException { return delegate.createUsersWithArrayInput(body,securityContext); } @@ -60,11 +62,12 @@ public class UserApi { @Path("/createWithList") @Produces({ "application/json", "application/xml" }) - @io.swagger.annotations.ApiOperation(value = "Creates list of users with given input array", notes = "", response = Void.class, tags={ "user", }) + @io.swagger.annotations.ApiOperation(value = "Creates list of users with given input array", notes = "", response = void.class, tags={ "user", }) @io.swagger.annotations.ApiResponses(value = { - @io.swagger.annotations.ApiResponse(code = 200, message = "successful operation", response = Void.class) }) + @io.swagger.annotations.ApiResponse(code = 200, message = "successful operation", response = void.class) }) - public Response createUsersWithListInput(@ApiParam(value = "List of user object" ) List body,@Context SecurityContext securityContext) + public Response createUsersWithListInput( +@ApiParam(value = "List of user object" ) List body,@Context SecurityContext securityContext) throws NotFoundException { return delegate.createUsersWithListInput(body,securityContext); } @@ -78,7 +81,9 @@ public class UserApi { @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid username/password supplied", response = String.class) }) - public Response loginUser(@ApiParam(value = "The user name for login") @QueryParam("username") String username,@ApiParam(value = "The password for login in clear text") @QueryParam("password") String password,@Context SecurityContext securityContext) + public Response loginUser(@ApiParam(value = "The user name for login") @QueryParam("username") String username +,@ApiParam(value = "The password for login in clear text") @QueryParam("password") String password +,@Context SecurityContext securityContext) throws NotFoundException { return delegate.loginUser(username,password,securityContext); } @@ -86,9 +91,9 @@ public class UserApi { @Path("/logout") @Produces({ "application/json", "application/xml" }) - @io.swagger.annotations.ApiOperation(value = "Logs out current logged in user session", notes = "", response = Void.class, tags={ "user", }) + @io.swagger.annotations.ApiOperation(value = "Logs out current logged in user session", notes = "", response = void.class, tags={ "user", }) @io.swagger.annotations.ApiResponses(value = { - @io.swagger.annotations.ApiResponse(code = 200, message = "successful operation", response = Void.class) }) + @io.swagger.annotations.ApiResponse(code = 200, message = "successful operation", response = void.class) }) public Response logoutUser(@Context SecurityContext securityContext) throws NotFoundException { @@ -106,7 +111,8 @@ public class UserApi { @io.swagger.annotations.ApiResponse(code = 404, message = "User not found", response = User.class) }) - public Response getUserByName(@ApiParam(value = "The name that needs to be fetched. Use user1 for testing.",required=true) @PathParam("username") String username,@Context SecurityContext securityContext) + public Response getUserByName( +@ApiParam(value = "The name that needs to be fetched. Use user1 for testing.",required=true) @PathParam("username") String username,@Context SecurityContext securityContext) throws NotFoundException { return delegate.getUserByName(username,securityContext); } @@ -114,13 +120,15 @@ public class UserApi { @Path("/{username}") @Produces({ "application/json", "application/xml" }) - @io.swagger.annotations.ApiOperation(value = "Updated user", notes = "This can only be done by the logged in user.", response = Void.class, tags={ "user", }) + @io.swagger.annotations.ApiOperation(value = "Updated user", notes = "This can only be done by the logged in user.", response = void.class, tags={ "user", }) @io.swagger.annotations.ApiResponses(value = { - @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid user supplied", response = Void.class), + @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid user supplied", response = void.class), - @io.swagger.annotations.ApiResponse(code = 404, message = "User not found", response = Void.class) }) + @io.swagger.annotations.ApiResponse(code = 404, message = "User not found", response = void.class) }) - public Response updateUser(@ApiParam(value = "name that need to be deleted",required=true) @PathParam("username") String username,@ApiParam(value = "Updated user object" ) User body,@Context SecurityContext securityContext) + public Response updateUser( +@ApiParam(value = "name that need to be deleted",required=true) @PathParam("username") String username, +@ApiParam(value = "Updated user object" ) User body,@Context SecurityContext securityContext) throws NotFoundException { return delegate.updateUser(username,body,securityContext); } @@ -128,13 +136,14 @@ public class UserApi { @Path("/{username}") @Produces({ "application/json", "application/xml" }) - @io.swagger.annotations.ApiOperation(value = "Delete user", notes = "This can only be done by the logged in user.", response = Void.class, tags={ "user" }) + @io.swagger.annotations.ApiOperation(value = "Delete user", notes = "This can only be done by the logged in user.", response = void.class, tags={ "user" }) @io.swagger.annotations.ApiResponses(value = { - @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid username supplied", response = Void.class), + @io.swagger.annotations.ApiResponse(code = 400, message = "Invalid username supplied", response = void.class), - @io.swagger.annotations.ApiResponse(code = 404, message = "User not found", response = Void.class) }) + @io.swagger.annotations.ApiResponse(code = 404, message = "User not found", response = void.class) }) - public Response deleteUser(@ApiParam(value = "The name that needs to be deleted",required=true) @PathParam("username") String username,@Context SecurityContext securityContext) + public Response deleteUser( +@ApiParam(value = "The name that needs to be deleted",required=true) @PathParam("username") String username,@Context SecurityContext securityContext) throws NotFoundException { return delegate.deleteUser(username,securityContext); } diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApiService.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApiService.java index fe464220da3..aac73ea0853 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApiService.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/api/UserApiService.java @@ -19,7 +19,7 @@ import com.sun.jersey.multipart.FormDataParam; import javax.ws.rs.core.Response; import javax.ws.rs.core.SecurityContext; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2016-01-14T21:37:36.074Z") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-01-31T21:10:14.319Z") public abstract class UserApiService { public abstract Response createUser(User body,SecurityContext securityContext) diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Category.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Category.java index a487d2b8e12..ae75071b81a 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Category.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Category.java @@ -10,7 +10,7 @@ import io.swagger.annotations.ApiModelProperty; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2016-01-14T21:37:36.074Z") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-01-31T21:10:14.319Z") public class Category { private Long id = null; diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Order.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Order.java index 80f1d735fa5..bbbc49454e5 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Order.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Order.java @@ -11,7 +11,7 @@ import java.util.Date; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2016-01-14T21:37:36.074Z") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-01-31T21:10:14.319Z") public class Order { private Long id = null; diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Pet.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Pet.java index b5e28b6a346..fab0903ee2a 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Pet.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Pet.java @@ -13,7 +13,7 @@ import java.util.*; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2016-01-14T21:37:36.074Z") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-01-31T21:10:14.319Z") public class Pet { private Long id = null; diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Tag.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Tag.java index 73349af60bc..9c867802749 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Tag.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/Tag.java @@ -10,7 +10,7 @@ import io.swagger.annotations.ApiModelProperty; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2016-01-14T21:37:36.074Z") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-01-31T21:10:14.319Z") public class Tag { private Long id = null; diff --git a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/User.java b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/User.java index 1792bf49ebd..0a18f623d90 100644 --- a/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/User.java +++ b/samples/server/petstore/jaxrs/src/gen/java/io/swagger/model/User.java @@ -10,7 +10,7 @@ import io.swagger.annotations.ApiModelProperty; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2016-01-14T21:37:36.074Z") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-01-31T21:10:14.319Z") public class User { private Long id = null; From 2ad3171674ba980c35fd5c753a87a658390e45d5 Mon Sep 17 00:00:00 2001 From: Masahiro Yamauchi Date: Mon, 1 Feb 2016 08:36:17 +0900 Subject: [PATCH 033/189] Rename --- bin/{haskell-petstore.sh => haskell-servant-petstore.sh} | 2 +- .../main/resources/{haskell => haskell-servant}/Apis.mustache | 0 .../main/resources/{haskell => haskell-servant}/Client.mustache | 0 .../src/main/resources/{haskell => haskell-servant}/LICENSE | 0 .../main/resources/{haskell => haskell-servant}/README.mustache | 0 .../main/resources/{haskell => haskell-servant}/Server.mustache | 0 .../main/resources/{haskell => haskell-servant}/Setup.mustache | 0 .../main/resources/{haskell => haskell-servant}/Utils.mustache | 0 .../main/resources/{haskell => haskell-servant}/api.mustache | 0 .../haskell-servant-codegen.mustache | 0 .../main/resources/{haskell => haskell-servant}/model.mustache | 0 .../main/resources/{haskell => haskell-servant}/stack.mustache | 0 .../{haskell => haskellservant}/HaskellServantOptionsTest.java | 2 +- .../codegen/{haskell => haskellservant}/HaskellTest.java | 2 +- samples/server/petstore/{haskell => haskell-servant}/LICENSE | 0 samples/server/petstore/{haskell => haskell-servant}/README.md | 0 samples/server/petstore/{haskell => haskell-servant}/Setup.hs | 0 .../server/petstore/{haskell => haskell-servant}/client/Main.hs | 0 .../{haskell => haskell-servant}/haskell-servant-codegen.cabal | 0 .../petstore/{haskell => haskell-servant}/lib/Api/PetApi.hs | 0 .../petstore/{haskell => haskell-servant}/lib/Api/StoreApi.hs | 0 .../petstore/{haskell => haskell-servant}/lib/Api/UserApi.hs | 0 .../server/petstore/{haskell => haskell-servant}/lib/Apis.hs | 0 .../petstore/{haskell => haskell-servant}/lib/Model/Category.hs | 0 .../petstore/{haskell => haskell-servant}/lib/Model/Order.hs | 0 .../petstore/{haskell => haskell-servant}/lib/Model/Pet.hs | 0 .../petstore/{haskell => haskell-servant}/lib/Model/Tag.hs | 0 .../petstore/{haskell => haskell-servant}/lib/Model/User.hs | 0 .../server/petstore/{haskell => haskell-servant}/lib/Utils.hs | 0 .../server/petstore/{haskell => haskell-servant}/server/Main.hs | 0 samples/server/petstore/{haskell => haskell-servant}/stack.yaml | 0 31 files changed, 3 insertions(+), 3 deletions(-) rename bin/{haskell-petstore.sh => haskell-servant-petstore.sh} (83%) rename modules/swagger-codegen/src/main/resources/{haskell => haskell-servant}/Apis.mustache (100%) rename modules/swagger-codegen/src/main/resources/{haskell => haskell-servant}/Client.mustache (100%) rename modules/swagger-codegen/src/main/resources/{haskell => haskell-servant}/LICENSE (100%) rename modules/swagger-codegen/src/main/resources/{haskell => haskell-servant}/README.mustache (100%) rename modules/swagger-codegen/src/main/resources/{haskell => haskell-servant}/Server.mustache (100%) rename modules/swagger-codegen/src/main/resources/{haskell => haskell-servant}/Setup.mustache (100%) rename modules/swagger-codegen/src/main/resources/{haskell => haskell-servant}/Utils.mustache (100%) rename modules/swagger-codegen/src/main/resources/{haskell => haskell-servant}/api.mustache (100%) rename modules/swagger-codegen/src/main/resources/{haskell => haskell-servant}/haskell-servant-codegen.mustache (100%) rename modules/swagger-codegen/src/main/resources/{haskell => haskell-servant}/model.mustache (100%) rename modules/swagger-codegen/src/main/resources/{haskell => haskell-servant}/stack.mustache (100%) rename modules/swagger-codegen/src/test/java/io/swagger/codegen/{haskell => haskellservant}/HaskellServantOptionsTest.java (96%) rename modules/swagger-codegen/src/test/java/io/swagger/codegen/{haskell => haskellservant}/HaskellTest.java (92%) rename samples/server/petstore/{haskell => haskell-servant}/LICENSE (100%) rename samples/server/petstore/{haskell => haskell-servant}/README.md (100%) rename samples/server/petstore/{haskell => haskell-servant}/Setup.hs (100%) rename samples/server/petstore/{haskell => haskell-servant}/client/Main.hs (100%) rename samples/server/petstore/{haskell => haskell-servant}/haskell-servant-codegen.cabal (100%) rename samples/server/petstore/{haskell => haskell-servant}/lib/Api/PetApi.hs (100%) rename samples/server/petstore/{haskell => haskell-servant}/lib/Api/StoreApi.hs (100%) rename samples/server/petstore/{haskell => haskell-servant}/lib/Api/UserApi.hs (100%) rename samples/server/petstore/{haskell => haskell-servant}/lib/Apis.hs (100%) rename samples/server/petstore/{haskell => haskell-servant}/lib/Model/Category.hs (100%) rename samples/server/petstore/{haskell => haskell-servant}/lib/Model/Order.hs (100%) rename samples/server/petstore/{haskell => haskell-servant}/lib/Model/Pet.hs (100%) rename samples/server/petstore/{haskell => haskell-servant}/lib/Model/Tag.hs (100%) rename samples/server/petstore/{haskell => haskell-servant}/lib/Model/User.hs (100%) rename samples/server/petstore/{haskell => haskell-servant}/lib/Utils.hs (100%) rename samples/server/petstore/{haskell => haskell-servant}/server/Main.hs (100%) rename samples/server/petstore/{haskell => haskell-servant}/stack.yaml (100%) diff --git a/bin/haskell-petstore.sh b/bin/haskell-servant-petstore.sh similarity index 83% rename from bin/haskell-petstore.sh rename to bin/haskell-servant-petstore.sh index c604acd7cf2..a35f38251cc 100755 --- a/bin/haskell-petstore.sh +++ b/bin/haskell-servant-petstore.sh @@ -26,6 +26,6 @@ fi # if you've executed sbt assembly previously it will use that instead. export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties" -ags="$@ generate -t modules/swagger-codegen/src/main/resources/haskell -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l haskell -o samples/server/petstore/haskell" +ags="$@ generate -t modules/swagger-codegen/src/main/resources/haskell-servant -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l haskell-servant -o samples/server/petstore/haskell-servant" java $JAVA_OPTS -jar $executable $ags diff --git a/modules/swagger-codegen/src/main/resources/haskell/Apis.mustache b/modules/swagger-codegen/src/main/resources/haskell-servant/Apis.mustache similarity index 100% rename from modules/swagger-codegen/src/main/resources/haskell/Apis.mustache rename to modules/swagger-codegen/src/main/resources/haskell-servant/Apis.mustache diff --git a/modules/swagger-codegen/src/main/resources/haskell/Client.mustache b/modules/swagger-codegen/src/main/resources/haskell-servant/Client.mustache similarity index 100% rename from modules/swagger-codegen/src/main/resources/haskell/Client.mustache rename to modules/swagger-codegen/src/main/resources/haskell-servant/Client.mustache diff --git a/modules/swagger-codegen/src/main/resources/haskell/LICENSE b/modules/swagger-codegen/src/main/resources/haskell-servant/LICENSE similarity index 100% rename from modules/swagger-codegen/src/main/resources/haskell/LICENSE rename to modules/swagger-codegen/src/main/resources/haskell-servant/LICENSE diff --git a/modules/swagger-codegen/src/main/resources/haskell/README.mustache b/modules/swagger-codegen/src/main/resources/haskell-servant/README.mustache similarity index 100% rename from modules/swagger-codegen/src/main/resources/haskell/README.mustache rename to modules/swagger-codegen/src/main/resources/haskell-servant/README.mustache diff --git a/modules/swagger-codegen/src/main/resources/haskell/Server.mustache b/modules/swagger-codegen/src/main/resources/haskell-servant/Server.mustache similarity index 100% rename from modules/swagger-codegen/src/main/resources/haskell/Server.mustache rename to modules/swagger-codegen/src/main/resources/haskell-servant/Server.mustache diff --git a/modules/swagger-codegen/src/main/resources/haskell/Setup.mustache b/modules/swagger-codegen/src/main/resources/haskell-servant/Setup.mustache similarity index 100% rename from modules/swagger-codegen/src/main/resources/haskell/Setup.mustache rename to modules/swagger-codegen/src/main/resources/haskell-servant/Setup.mustache diff --git a/modules/swagger-codegen/src/main/resources/haskell/Utils.mustache b/modules/swagger-codegen/src/main/resources/haskell-servant/Utils.mustache similarity index 100% rename from modules/swagger-codegen/src/main/resources/haskell/Utils.mustache rename to modules/swagger-codegen/src/main/resources/haskell-servant/Utils.mustache diff --git a/modules/swagger-codegen/src/main/resources/haskell/api.mustache b/modules/swagger-codegen/src/main/resources/haskell-servant/api.mustache similarity index 100% rename from modules/swagger-codegen/src/main/resources/haskell/api.mustache rename to modules/swagger-codegen/src/main/resources/haskell-servant/api.mustache diff --git a/modules/swagger-codegen/src/main/resources/haskell/haskell-servant-codegen.mustache b/modules/swagger-codegen/src/main/resources/haskell-servant/haskell-servant-codegen.mustache similarity index 100% rename from modules/swagger-codegen/src/main/resources/haskell/haskell-servant-codegen.mustache rename to modules/swagger-codegen/src/main/resources/haskell-servant/haskell-servant-codegen.mustache diff --git a/modules/swagger-codegen/src/main/resources/haskell/model.mustache b/modules/swagger-codegen/src/main/resources/haskell-servant/model.mustache similarity index 100% rename from modules/swagger-codegen/src/main/resources/haskell/model.mustache rename to modules/swagger-codegen/src/main/resources/haskell-servant/model.mustache diff --git a/modules/swagger-codegen/src/main/resources/haskell/stack.mustache b/modules/swagger-codegen/src/main/resources/haskell-servant/stack.mustache similarity index 100% rename from modules/swagger-codegen/src/main/resources/haskell/stack.mustache rename to modules/swagger-codegen/src/main/resources/haskell-servant/stack.mustache diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/haskell/HaskellServantOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/haskellservant/HaskellServantOptionsTest.java similarity index 96% rename from modules/swagger-codegen/src/test/java/io/swagger/codegen/haskell/HaskellServantOptionsTest.java rename to modules/swagger-codegen/src/test/java/io/swagger/codegen/haskellservant/HaskellServantOptionsTest.java index 1806070d8d8..d5848e47cae 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/haskell/HaskellServantOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/haskellservant/HaskellServantOptionsTest.java @@ -1,4 +1,4 @@ -package io.swagger.codegen.haskell; +package io.swagger.codegen.haskellservant; import io.swagger.codegen.AbstractOptionsTest; import io.swagger.codegen.CodegenConfig; diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/haskell/HaskellTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/haskellservant/HaskellTest.java similarity index 92% rename from modules/swagger-codegen/src/test/java/io/swagger/codegen/haskell/HaskellTest.java rename to modules/swagger-codegen/src/test/java/io/swagger/codegen/haskellservant/HaskellTest.java index 8800c80b819..e371a4f311e 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/haskell/HaskellTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/haskellservant/HaskellTest.java @@ -1,4 +1,4 @@ -package io.swagger.codegen.haskell; +package io.swagger.codegen.haskellservant; import io.swagger.codegen.CodegenModel; import io.swagger.codegen.CodegenOperation; diff --git a/samples/server/petstore/haskell/LICENSE b/samples/server/petstore/haskell-servant/LICENSE similarity index 100% rename from samples/server/petstore/haskell/LICENSE rename to samples/server/petstore/haskell-servant/LICENSE diff --git a/samples/server/petstore/haskell/README.md b/samples/server/petstore/haskell-servant/README.md similarity index 100% rename from samples/server/petstore/haskell/README.md rename to samples/server/petstore/haskell-servant/README.md diff --git a/samples/server/petstore/haskell/Setup.hs b/samples/server/petstore/haskell-servant/Setup.hs similarity index 100% rename from samples/server/petstore/haskell/Setup.hs rename to samples/server/petstore/haskell-servant/Setup.hs diff --git a/samples/server/petstore/haskell/client/Main.hs b/samples/server/petstore/haskell-servant/client/Main.hs similarity index 100% rename from samples/server/petstore/haskell/client/Main.hs rename to samples/server/petstore/haskell-servant/client/Main.hs diff --git a/samples/server/petstore/haskell/haskell-servant-codegen.cabal b/samples/server/petstore/haskell-servant/haskell-servant-codegen.cabal similarity index 100% rename from samples/server/petstore/haskell/haskell-servant-codegen.cabal rename to samples/server/petstore/haskell-servant/haskell-servant-codegen.cabal diff --git a/samples/server/petstore/haskell/lib/Api/PetApi.hs b/samples/server/petstore/haskell-servant/lib/Api/PetApi.hs similarity index 100% rename from samples/server/petstore/haskell/lib/Api/PetApi.hs rename to samples/server/petstore/haskell-servant/lib/Api/PetApi.hs diff --git a/samples/server/petstore/haskell/lib/Api/StoreApi.hs b/samples/server/petstore/haskell-servant/lib/Api/StoreApi.hs similarity index 100% rename from samples/server/petstore/haskell/lib/Api/StoreApi.hs rename to samples/server/petstore/haskell-servant/lib/Api/StoreApi.hs diff --git a/samples/server/petstore/haskell/lib/Api/UserApi.hs b/samples/server/petstore/haskell-servant/lib/Api/UserApi.hs similarity index 100% rename from samples/server/petstore/haskell/lib/Api/UserApi.hs rename to samples/server/petstore/haskell-servant/lib/Api/UserApi.hs diff --git a/samples/server/petstore/haskell/lib/Apis.hs b/samples/server/petstore/haskell-servant/lib/Apis.hs similarity index 100% rename from samples/server/petstore/haskell/lib/Apis.hs rename to samples/server/petstore/haskell-servant/lib/Apis.hs diff --git a/samples/server/petstore/haskell/lib/Model/Category.hs b/samples/server/petstore/haskell-servant/lib/Model/Category.hs similarity index 100% rename from samples/server/petstore/haskell/lib/Model/Category.hs rename to samples/server/petstore/haskell-servant/lib/Model/Category.hs diff --git a/samples/server/petstore/haskell/lib/Model/Order.hs b/samples/server/petstore/haskell-servant/lib/Model/Order.hs similarity index 100% rename from samples/server/petstore/haskell/lib/Model/Order.hs rename to samples/server/petstore/haskell-servant/lib/Model/Order.hs diff --git a/samples/server/petstore/haskell/lib/Model/Pet.hs b/samples/server/petstore/haskell-servant/lib/Model/Pet.hs similarity index 100% rename from samples/server/petstore/haskell/lib/Model/Pet.hs rename to samples/server/petstore/haskell-servant/lib/Model/Pet.hs diff --git a/samples/server/petstore/haskell/lib/Model/Tag.hs b/samples/server/petstore/haskell-servant/lib/Model/Tag.hs similarity index 100% rename from samples/server/petstore/haskell/lib/Model/Tag.hs rename to samples/server/petstore/haskell-servant/lib/Model/Tag.hs diff --git a/samples/server/petstore/haskell/lib/Model/User.hs b/samples/server/petstore/haskell-servant/lib/Model/User.hs similarity index 100% rename from samples/server/petstore/haskell/lib/Model/User.hs rename to samples/server/petstore/haskell-servant/lib/Model/User.hs diff --git a/samples/server/petstore/haskell/lib/Utils.hs b/samples/server/petstore/haskell-servant/lib/Utils.hs similarity index 100% rename from samples/server/petstore/haskell/lib/Utils.hs rename to samples/server/petstore/haskell-servant/lib/Utils.hs diff --git a/samples/server/petstore/haskell/server/Main.hs b/samples/server/petstore/haskell-servant/server/Main.hs similarity index 100% rename from samples/server/petstore/haskell/server/Main.hs rename to samples/server/petstore/haskell-servant/server/Main.hs diff --git a/samples/server/petstore/haskell/stack.yaml b/samples/server/petstore/haskell-servant/stack.yaml similarity index 100% rename from samples/server/petstore/haskell/stack.yaml rename to samples/server/petstore/haskell-servant/stack.yaml From 30e81540550ada23e6347131fa5fe679ed359100 Mon Sep 17 00:00:00 2001 From: Masahiro Yamauchi Date: Mon, 1 Feb 2016 08:59:50 +0900 Subject: [PATCH 034/189] Update dependencies and repository info --- .../haskell-servant/haskell-servant-codegen.mustache | 6 +----- .../src/main/resources/haskell-servant/stack.mustache | 2 +- samples/server/petstore/haskell-servant/stack.yaml | 2 +- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/haskell-servant/haskell-servant-codegen.mustache b/modules/swagger-codegen/src/main/resources/haskell-servant/haskell-servant-codegen.mustache index 8fc17ba8e0f..8b7d7fc54b2 100644 --- a/modules/swagger-codegen/src/main/resources/haskell-servant/haskell-servant-codegen.mustache +++ b/modules/swagger-codegen/src/main/resources/haskell-servant/haskell-servant-codegen.mustache @@ -2,7 +2,7 @@ name: haskell-servant-codegen version: 0.1.0.0 synopsis: Swagger-codegen example for Haskell servant description: Please see README.md -homepage: http://github.com/algas/haskell-servant-codegen#readme +homepage: https://github.com/swagger-api/swagger-codegen#readme license: Apache-2.0 license-file: LICENSE author: Masahiro Yamauchi @@ -60,7 +60,3 @@ executable server , servant-mock , haskell-servant-codegen default-language: Haskell2010 - -source-repository head - type: git - location: https://github.com/algas/haskell-servant-codegen diff --git a/modules/swagger-codegen/src/main/resources/haskell-servant/stack.mustache b/modules/swagger-codegen/src/main/resources/haskell-servant/stack.mustache index 80699ab30c2..00448df3e95 100644 --- a/modules/swagger-codegen/src/main/resources/haskell-servant/stack.mustache +++ b/modules/swagger-codegen/src/main/resources/haskell-servant/stack.mustache @@ -9,7 +9,7 @@ packages: # Packages to be pulled from upstream that are not in the resolver (e.g., acme-missiles-0.3) extra-deps: -- servant-mock-0.4.4.5 +- servant-mock-0.4.4.6 # Override default flag values for local packages and extra-deps flags: {} diff --git a/samples/server/petstore/haskell-servant/stack.yaml b/samples/server/petstore/haskell-servant/stack.yaml index 80699ab30c2..00448df3e95 100644 --- a/samples/server/petstore/haskell-servant/stack.yaml +++ b/samples/server/petstore/haskell-servant/stack.yaml @@ -9,7 +9,7 @@ packages: # Packages to be pulled from upstream that are not in the resolver (e.g., acme-missiles-0.3) extra-deps: -- servant-mock-0.4.4.5 +- servant-mock-0.4.4.6 # Override default flag values for local packages and extra-deps flags: {} From 62b692da1d6aeec7a12c01185a574a90aa3cb856 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 1 Feb 2016 20:30:49 +0600 Subject: [PATCH 035/189] fix jboss context-root --- .../main/resources/JavaJaxRS/resteasy3_0_11/jboss-web.mustache | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/jboss-web.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/jboss-web.mustache index 8e05a2ef4e1..788fc867d92 100644 --- a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/jboss-web.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/jboss-web.mustache @@ -1,3 +1,3 @@ - {{contextPath}}/* + {{contextPath}} \ No newline at end of file From b275eefbbfc546d4dfffcee5c36735916ee98164 Mon Sep 17 00:00:00 2001 From: wing328 Date: Tue, 2 Feb 2016 00:57:57 +0800 Subject: [PATCH 036/189] remove testFolder (not used) --- .../java/io/swagger/codegen/languages/CSharpClientCodegen.java | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java index 991b60cd495..07252e685f0 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java @@ -41,7 +41,6 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig protected String packageVersion = "1.0.0"; protected String clientPackage = "IO.Swagger.Client"; protected String sourceFolder = "src" + File.separator + "main" + File.separator + "csharp"; - protected String testFolder = "Test"; public CSharpClientCodegen() { super(); From 40400e365749737d51a7be8a403a84572476d183 Mon Sep 17 00:00:00 2001 From: Alex Date: Tue, 2 Feb 2016 00:27:08 +0600 Subject: [PATCH 037/189] update supporting JodaTime and Java8 DateTime --- .../languages/JavaResteasyServerCodegen.java | 3 + .../resteasy3_0_11/JacksonConfig.mustache | 47 ++++++++++++++ .../JodaDateTimeProvider.mustache | 64 +++++++++---------- .../JodaLocalDateProvider.mustache | 64 +++++++++---------- .../resteasy3_0_11/LocalDateProvider.mustache | 56 +++++++--------- .../LocalDateTimeProvider.mustache | 56 +++++++--------- .../JavaJaxRS/resteasy3_0_11/gradle.mustache | 5 +- 7 files changed, 162 insertions(+), 133 deletions(-) create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/JacksonConfig.mustache diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaResteasyServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaResteasyServerCodegen.java index 8831c8f1a26..f846790614f 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaResteasyServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaResteasyServerCodegen.java @@ -121,6 +121,9 @@ public class JavaResteasyServerCodegen extends JavaClientCodegen implements Code importMapping.put("LocalDate", "org.joda.time.LocalDate"); importMapping.put("DateTime", "org.joda.time.DateTime"); + supportingFiles.add(new SupportingFile("JacksonConfig.mustache", + (sourceFolder + '/' + invokerPackage).replace(".", "/"), "JacksonConfig.java")); + supportingFiles.add(new SupportingFile("JodaDateTimeProvider.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "JodaDateTimeProvider.java")); supportingFiles.add(new SupportingFile("JodaLocalDateProvider.mustache", diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/JacksonConfig.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/JacksonConfig.mustache new file mode 100644 index 00000000000..f2caa6c8331 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/JacksonConfig.mustache @@ -0,0 +1,47 @@ +package {{invokerPackage}}; + +import com.fasterxml.jackson.core.JsonGenerationException; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import com.fasterxml.jackson.datatype.joda.JodaModule; +import org.joda.time.DateTime; +import org.joda.time.LocalDate; +import org.joda.time.format.ISODateTimeFormat; + +import javax.ws.rs.ext.ContextResolver; +import javax.ws.rs.ext.Provider; +import java.io.IOException; + +@Provider +public class JacksonConfig implements ContextResolver { + private final ObjectMapper objectMapper; + + public JacksonConfig() throws Exception { + + objectMapper = new ObjectMapper(); + objectMapper.registerModule(new JodaModule() { + { + addSerializer(DateTime.class, new StdSerializer(DateTime.class) { + @Override + public void serialize(DateTime value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonGenerationException { + jgen.writeString(ISODateTimeFormat.dateTimeNoMillis().print(value)); + } + }); + addSerializer(LocalDate.class, new StdSerializer(LocalDate.class) { + @Override + public void serialize(LocalDate value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonGenerationException { + jgen.writeString(ISODateTimeFormat.date().print(value)); + } + }); + + } + }); + } + + @Override + public ObjectMapper getContext(Class arg0) { + return objectMapper; + } +} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/JodaDateTimeProvider.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/JodaDateTimeProvider.mustache index f9421790983..8010eb85f93 100644 --- a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/JodaDateTimeProvider.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/JodaDateTimeProvider.mustache @@ -1,44 +1,42 @@ package {{apiPackage}}; -import com.sun.jersey.core.spi.component.ComponentContext; -import com.sun.jersey.spi.inject.Injectable; -import com.sun.jersey.spi.inject.PerRequestTypeInjectableProvider; - -import javax.ws.rs.QueryParam; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.Response.Status; -import javax.ws.rs.core.UriInfo; -import javax.ws.rs.ext.Provider; import org.joda.time.DateTime; -import java.util.List; +import javax.ws.rs.ext.ParamConverter; +import javax.ws.rs.ext.ParamConverterProvider; +import javax.ws.rs.ext.Provider; +import java.lang.annotation.Annotation; +import java.lang.reflect.Type; +import javax.ws.rs.WebApplicationException; +import javax.ws.rs.core.Response; + @Provider -public class JodaDateTimeProvider extends PerRequestTypeInjectableProvider { - private final UriInfo uriInfo; +public class JodaDateTimeProvider implements ParamConverterProvider { - public JodaDateTimeProvider(@Context UriInfo uriInfo) { - super(DateTime.class); - this.uriInfo = uriInfo; + public static class JodaDateTimeConverter implements ParamConverter { + + @Override + public DateTime fromString(String string) { + try { + DateTime dateTime = DateTime.parse(string); + return dateTime; + } catch (Exception e) { + throw new WebApplicationException(Response.status(Response.Status.BAD_REQUEST). + entity(string + " must be valid DateTime").build()); + } + } + + @Override + public String toString(DateTime t) { + return t.toString(); + } } @Override - public Injectable getInjectable(final ComponentContext cc, final QueryParam a) { - return new Injectable() { - @Override - public DateTime getValue() { - final List values = uriInfo.getQueryParameters().get(a.value()); - - if (values == null || values.isEmpty()) - return null; - if (values.size() > 1) { - throw new WebApplicationException(Response.status(Status.BAD_REQUEST). - entity(a.value() + " cannot contain multiple values").build()); - } - - return DateTime.parse(values.get(0)); - } - }; + public ParamConverter getConverter(Class type, Type type1, Annotation[] antns) { + if (DateTime.class.equals(type)) { + return (ParamConverter) new JodaDateTimeConverter(); + } + return null; } } \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/JodaLocalDateProvider.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/JodaLocalDateProvider.mustache index 7bd4027e63d..6227bf6df27 100644 --- a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/JodaLocalDateProvider.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/JodaLocalDateProvider.mustache @@ -1,44 +1,42 @@ package {{apiPackage}}; -import com.sun.jersey.core.spi.component.ComponentContext; -import com.sun.jersey.spi.inject.Injectable; -import com.sun.jersey.spi.inject.PerRequestTypeInjectableProvider; - -import javax.ws.rs.QueryParam; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.Response.Status; -import javax.ws.rs.core.UriInfo; -import javax.ws.rs.ext.Provider; import org.joda.time.LocalDate; -import java.util.List; +import javax.ws.rs.ext.ParamConverter; +import javax.ws.rs.ext.ParamConverterProvider; +import javax.ws.rs.ext.Provider; +import java.lang.annotation.Annotation; +import java.lang.reflect.Type; +import javax.ws.rs.WebApplicationException; +import javax.ws.rs.core.Response; + @Provider -public class JodaLocalDateProvider extends PerRequestTypeInjectableProvider { - private final UriInfo uriInfo; +public class JodaLocalDateProvider implements ParamConverterProvider { - public JodaLocalDateProvider(@Context UriInfo uriInfo) { - super(LocalDate.class); - this.uriInfo = uriInfo; + public static class JodaLocalDateConverter implements ParamConverter { + + @Override + public LocalDate fromString(String string) { + try { + LocalDate localDate = LocalDate.parse(string); + return localDate; + } catch (Exception e) { + throw new WebApplicationException(Response.status(Response.Status.BAD_REQUEST). + entity(string + " must be valid LocalDate").build()); + } + } + + @Override + public String toString(LocalDate t) { + return t.toString(); + } } @Override - public Injectable getInjectable(final ComponentContext cc, final QueryParam a) { - return new Injectable() { - @Override - public LocalDate getValue() { - final List values = uriInfo.getQueryParameters().get(a.value()); - - if (values == null || values.isEmpty()) - return null; - if (values.size() > 1) { - throw new WebApplicationException(Response.status(Status.BAD_REQUEST). - entity(a.value() + " cannot contain multiple values").build()); - } - - return LocalDate.parse(values.get(0)); - } - }; + public ParamConverter getConverter(Class type, Type type1, Annotation[] antns) { + if (LocalDate.class.equals(type)) { + return (ParamConverter) new JodaLocalDateConverter(); + } + return null; } } \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/LocalDateProvider.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/LocalDateProvider.mustache index 8c4cd4cbd15..cf52264a1f4 100644 --- a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/LocalDateProvider.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/LocalDateProvider.mustache @@ -1,44 +1,34 @@ package {{apiPackage}}; -import com.sun.jersey.core.spi.component.ComponentContext; -import com.sun.jersey.spi.inject.Injectable; -import com.sun.jersey.spi.inject.PerRequestTypeInjectableProvider; - -import javax.ws.rs.QueryParam; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.Response.Status; -import javax.ws.rs.core.UriInfo; -import javax.ws.rs.ext.Provider; import java.time.LocalDate; -import java.util.List; +import javax.ws.rs.ext.ParamConverter; +import javax.ws.rs.ext.ParamConverterProvider; +import javax.ws.rs.ext.Provider; +import java.lang.annotation.Annotation; +import java.lang.reflect.Type; @Provider -public class LocalDateProvider extends PerRequestTypeInjectableProvider { - private final UriInfo uriInfo; +public class LocalDateProvider implements ParamConverterProvider { - public LocalDateProvider(@Context UriInfo uriInfo) { - super(LocalDate.class); - this.uriInfo = uriInfo; + public static class LocalDateConverter implements ParamConverter { + + @Override + public LocalDate fromString(String string) { + LocalDate localDate = LocalDate.parse(string); + return localDate; + } + + @Override + public String toString(LocalDate t) { + return t.toString(); + } } @Override - public Injectable getInjectable(final ComponentContext cc, final QueryParam a) { - return new Injectable() { - @Override - public LocalDate getValue() { - final List values = uriInfo.getQueryParameters().get(a.value()); - - if (values == null || values.isEmpty()) - return null; - if (values.size() > 1) { - throw new WebApplicationException(Response.status(Status.BAD_REQUEST). - entity(a.value() + " cannot contain multiple values").build()); - } - - return LocalDate.parse(values.get(0)); - } - }; + public ParamConverter getConverter(Class type, Type type1, Annotation[] antns) { + if (LocalDate.class.equals(type)) { + return (ParamConverter) new LocalDateConverter(); + } + return null; } } \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/LocalDateTimeProvider.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/LocalDateTimeProvider.mustache index 93bb6f19d50..591b410b275 100644 --- a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/LocalDateTimeProvider.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/LocalDateTimeProvider.mustache @@ -1,44 +1,34 @@ package {{apiPackage}}; -import com.sun.jersey.core.spi.component.ComponentContext; -import com.sun.jersey.spi.inject.Injectable; -import com.sun.jersey.spi.inject.PerRequestTypeInjectableProvider; - -import javax.ws.rs.QueryParam; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.Response.Status; -import javax.ws.rs.core.UriInfo; -import javax.ws.rs.ext.Provider; import java.time.LocalDateTime; -import java.util.List; +import javax.ws.rs.ext.ParamConverter; +import javax.ws.rs.ext.ParamConverterProvider; +import javax.ws.rs.ext.Provider; +import java.lang.annotation.Annotation; +import java.lang.reflect.Type; @Provider -public class LocalDateTimeProvider extends PerRequestTypeInjectableProvider { - private final UriInfo uriInfo; +public class LocalDateTimeProvider implements ParamConverterProvider { - public LocalDateTimeProvider(@Context UriInfo uriInfo) { - super(LocalDateTime.class); - this.uriInfo = uriInfo; + public static class LocalDateTimeConverter implements ParamConverter { + + @Override + public LocalDateTime fromString(String string) { + LocalDate localDateTime = LocalDateTime.parse(string); + return localDateTime; + } + + @Override + public String toString(LocalDateTime t) { + return t.toString(); + } } @Override - public Injectable getInjectable(final ComponentContext cc, final QueryParam a) { - return new Injectable() { - @Override - public LocalDateTime getValue() { - final List values = uriInfo.getQueryParameters().get(a.value()); - - if (values == null || values.isEmpty()) - return null; - if (values.size() > 1) { - throw new WebApplicationException(Response.status(Status.BAD_REQUEST). - entity(a.value() + " cannot contain multiple values").build()); - } - - return LocalDateTime.parse(values.get(0)); - } - }; + public ParamConverter getConverter(Class type, Type type1, Annotation[] antns) { + if (LocalDateTime.class.equals(type)) { + return (ParamConverter) new LocalDateTimeConverter(); + } + return null; } } \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/gradle.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/gradle.mustache index be2097d48c2..06b1a1d0d78 100644 --- a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/gradle.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy3_0_11/gradle.mustache @@ -5,12 +5,15 @@ repositories { } dependencies { - compile 'com.fasterxml.jackson.core:jackson-annotations:2.7.0' providedCompile 'org.jboss.resteasy:resteasy-jaxrs:3.0.11.Final' providedCompile 'org.jboss.resteasy:jaxrs-api:3.0.11.Final' providedCompile 'org.jboss.resteasy:resteasy-validator-provider-11:3.0.11.Final' providedCompile 'javax.annotation:javax.annotation-api:1.2' providedCompile 'org.jboss.spec.javax.servlet:jboss-servlet-api_3.0_spec:1.0.0.Final' + compile 'org.jboss.resteasy:resteasy-jackson2-provider:3.0.11.Final' + +// compile 'com.fasterxml.jackson.datatype:jackson-datatype-joda:2.4.1' +// compile 'joda-time:joda-time:2.7' testCompile 'junit:junit:4.12', 'org.hamcrest:hamcrest-core:1.3' From 42f669031dba86c00b5c21089249e967a2766a89 Mon Sep 17 00:00:00 2001 From: Andrew Z Allen Date: Tue, 2 Feb 2016 00:07:53 -0700 Subject: [PATCH 038/189] Add tests for API --- .../Javascript-Closure-Angular/api.mustache | 107 +- .../javascript-closure-angular/.gitignore | 2 + .../API/Client/PetApi.js | 604 +++---- .../API/Client/StoreApi.js | 220 +-- .../API/Client/UserApi.js | 436 ++--- .../javascript-closure-angular/compile.py | 63 + .../javascript-closure-angular/karma.conf.js | 78 + .../lib/goog/base.js | 1548 +++++++++++++++++ .../javascript-closure-angular/package.json | 8 + .../test/petapi.spec.js | 98 ++ .../test/storeapi.spec.js | 68 + .../test/userapi.spec.js | 81 + 12 files changed, 2435 insertions(+), 878 deletions(-) create mode 100644 samples/client/petstore/javascript-closure-angular/.gitignore create mode 100755 samples/client/petstore/javascript-closure-angular/compile.py create mode 100644 samples/client/petstore/javascript-closure-angular/karma.conf.js create mode 100644 samples/client/petstore/javascript-closure-angular/lib/goog/base.js create mode 100644 samples/client/petstore/javascript-closure-angular/package.json create mode 100644 samples/client/petstore/javascript-closure-angular/test/petapi.spec.js create mode 100644 samples/client/petstore/javascript-closure-angular/test/storeapi.spec.js create mode 100644 samples/client/petstore/javascript-closure-angular/test/userapi.spec.js diff --git a/modules/swagger-codegen/src/main/resources/Javascript-Closure-Angular/api.mustache b/modules/swagger-codegen/src/main/resources/Javascript-Closure-Angular/api.mustache index e6934799f52..957add6753e 100644 --- a/modules/swagger-codegen/src/main/resources/Javascript-Closure-Angular/api.mustache +++ b/modules/swagger-codegen/src/main/resources/Javascript-Closure-Angular/api.mustache @@ -28,10 +28,11 @@ goog.require('{{import}}'); {{/description}} * @constructor * @param {!angular.$http} $http + * @param {!Object} $httpParamSerializer * @param {!angular.$injector} $injector * @struct */ -{{package}}.{{classname}} = function($http, $injector) { +{{package}}.{{classname}} = function($http, $httpParamSerializer, $injector) { /** @private {!string} */ this.basePath_ = $injector.has('{{classname}}BasePath') ? /** @type {!string} */ ($injector.get('{{classname}}BasePath')) : @@ -45,8 +46,11 @@ goog.require('{{import}}'); /** @private {!angular.$http} */ this.http_ = $http; + + /** @private {!Object} */ + this.httpParamSerializer_ = $injector.get('$httpParamSerializer'); } -{{package}}.{{classname}}.$inject = ['$http', '$injector']; +{{package}}.{{classname}}.$inject = ['$http', '$httpParamSerializer', '$injector']; {{#operation}} /** @@ -57,87 +61,64 @@ goog.require('{{import}}'); * @return {!angular.$q.Promise{{#returnType}}{{/returnType}}} */ {{package}}.{{classname}}.prototype.{{nickname}} = function({{#allParams}}{{^required}}opt_{{/required}}{{paramName}}, {{/allParams}}opt_extraHttpRequestParams) { - /** @const {!string} */ + /** @const {string} */ var path = this.basePath_ + '{{path}}'{{#pathParams}} .replace('{' + '{{baseName}}' + '}', String({{^required}}opt_{{/required}}{{paramName}})){{/pathParams}}; -{{#required}} - // verify required parameter '{{paramName}}' is set - if (!{{paramName}}) { - throw new Error('Missing required parameter {{paramName}} when calling {{nickname}}'); + /** @type {!Object} */ + var queryParameters = {}; + + /** @type {!Object} */ + var headerParams = angular.extend({}, this.defaultHeaders); +{{#hasFormParams}} + /** @type {!Object} */ + var formParams = {}; + +{{/hasFormParams}} +{{#allParams}} +{{#required}} + // verify required parameter '{{^required}}opt_{{/required}}{{paramName}}' is set + if (!{{^required}}opt_{{/required}}{{paramName}}) { + throw new Error('Missing required parameter {{^required}}opt_{{/required}}{{paramName}} when calling {{nickname}}'); } {{/required}} - - /** @type {!Object} */ - var queryParameters = {}; +{{/allParams}} {{#queryParams}} if ({{^required}}opt_{{/required}}{{paramName}} !== undefined) { - queryParameters['{{baseName}}'] = String({{^required}}opt_{{/required}}{{paramName}}); + queryParameters['{{baseName}}'] = {{^required}}opt_{{/required}}{{paramName}}; } -{{/queryParams}} - /** @type {!Object} */ - var headerParams = angular.copy(this.defaultHeaders_); +{{/queryParams}} {{#headerParams}} - if ({{^required}}opt_{{/required}}{{paramName}} !== undefined) { - headerParams['{{baseName}}'] = {{^required}}opt_{{/required}}{{paramName}}; - } + headerParams['{{baseName}}'] = {{^required}}opt_{{/required}}{{paramName}}; + {{/headerParams}} {{#hasFormParams}} + headerParams['Content-Type'] = 'application/x-www-form-urlencoded'; - /** @type {!FormData} */ - var formParams = new FormData(); {{/hasFormParams}} {{#formParams}} - if ({{^required}}opt_{{/required}}{{paramName}} !== undefined) { - var {{paramName}}_ = /** @type {?} */ ({{^required}}opt_{{/required}}{{paramName}}); - if ({{paramName}}_ instanceof Blob) { - formParams.append('{{baseName}}', {{paramName}}_); - } else if (typeof {{paramName}}_ === 'string') { - formParams.append('{{baseName}}', {{paramName}}_); - } else { - throw new Error('Forms parameter {{^required}}opt_{{/required}}{{paramName}} is required to be a string or a Blob (https://developer.mozilla.org/en-US/docs/Web/API/Blob/Blob)'); - } - } -{{/formParams}} -{{#allParams}} -{{/allParams}} + formParams['{{baseName}}'] = {{^required}}opt_{{/required}}{{paramName}}; - /** @type {!angular.$http.Config} */ - var httpRequestConfig = /** @type {!angular.$http.Config} */ ({ - url: path, - json: {{#hasFormParams}}false{{/hasFormParams}}{{^hasFormParams}}true{{/hasFormParams}},{{#bodyParam}} - data: {{paramName}},{{/bodyParam}}{{#hasFormParams}} - data: formParams,{{/hasFormParams}} - params: queryParameters, - headers: headerParams - }); +{{/formParams}} + /** @type {!Object} */ + var httpRequestParams = { + method: '{{httpMethod}}', + url: path, + json: {{#hasFormParams}}false{{/hasFormParams}}{{^hasFormParams}}true{{/hasFormParams}}, + {{#bodyParam}}data: {{^required}}opt_{{/required}}{{paramName}}, + {{/bodyParam}} + {{#hasFormParams}}data: this.httpParamSerializer_(formParams), + {{/hasFormParams}} + params: queryParameters, + headers: headerParams + }; if (opt_extraHttpRequestParams) { - // If an opt_extraHttpRequestParams object is passed in, override values - // set the generated config with the passed in values. - httpRequestConfig = angular.merge(httpRequestConfig, opt_extraHttpRequestParams); + httpRequestParams = angular.extend(httpRequestParams, opt_extraHttpRequestParams); } - // This whole block is to work around a limitation in closure compiler. It - // would be better to call the $http service directly as a function, but that - // isn't permitted since it has methods attached to it. Manually confirmed to - // compile down to just a single method even with only SIMPLE optimization on. - // https://github.com/google/closure-compiler/blob/90769b826df65eabfb0211517b0d6d85c0c1c60b/contrib/externs/angular-1.4.js#L1393 - switch ('{{httpMethod}}') { - case 'GET': - return this.http_.get(path, httpRequestConfig); - case 'HEAD': - return this.http_.head(path, httpRequestConfig); - case 'POST': - return this.http_.post(path, {}, httpRequestConfig); - case 'PUT': - return this.http_.put(path, {}, httpRequestConfig); - case 'DELETE': - return this.http_.delete(path, httpRequestConfig); - case 'PATCH': - return this.http_.patch(path, {}, httpRequestConfig); - } + return this.http_(httpRequestParams); } {{/operation}} {{/operations}} diff --git a/samples/client/petstore/javascript-closure-angular/.gitignore b/samples/client/petstore/javascript-closure-angular/.gitignore new file mode 100644 index 00000000000..ea9d108fa3e --- /dev/null +++ b/samples/client/petstore/javascript-closure-angular/.gitignore @@ -0,0 +1,2 @@ +*.compiled.js +node_modules diff --git a/samples/client/petstore/javascript-closure-angular/API/Client/PetApi.js b/samples/client/petstore/javascript-closure-angular/API/Client/PetApi.js index d7c1b7b9841..e39dcfc7e24 100644 --- a/samples/client/petstore/javascript-closure-angular/API/Client/PetApi.js +++ b/samples/client/petstore/javascript-closure-angular/API/Client/PetApi.js @@ -5,7 +5,7 @@ * * This is a sample server Petstore server. You can find out more about Swagger at <a href=\"http://swagger.io\">http://swagger.io</a> or on irc.freenode.net, #swagger. For this sample, you can use the api key \"special-key\" to test the authorization filters * Version: 1.0.0 - * Generated at: 2016-01-27T23:51:03.092-07:00 + * Generated at: 2016-02-02T00:45:38.616-07:00 * Generated by: class io.swagger.codegen.languages.JavascriptClosureAngularClientCodegen */ /** @@ -16,15 +16,15 @@ goog.provide('API.Client.PetApi'); goog.require('API.Client.Pet'); -goog.require('API.Client.binary'); /** * @constructor * @param {!angular.$http} $http + * @param {!Object} $httpParamSerializer * @param {!angular.$injector} $injector * @struct */ -API.Client.PetApi = function($http, $injector) { +API.Client.PetApi = function($http, $httpParamSerializer, $injector) { /** @private {!string} */ this.basePath_ = $injector.has('PetApiBasePath') ? /** @type {!string} */ ($injector.get('PetApiBasePath')) : @@ -38,8 +38,11 @@ API.Client.PetApi = function($http, $injector) { /** @private {!angular.$http} */ this.http_ = $http; + + /** @private {!Object} */ + this.httpParamSerializer_ = $injector.get('$httpParamSerializer'); } -API.Client.PetApi.$inject = ['$http', '$injector']; +API.Client.PetApi.$inject = ['$http', '$httpParamSerializer', '$injector']; /** * Update an existing pet @@ -49,49 +52,31 @@ API.Client.PetApi.$inject = ['$http', '$injector']; * @return {!angular.$q.Promise} */ API.Client.PetApi.prototype.updatePet = function(opt_body, opt_extraHttpRequestParams) { - /** @const {!string} */ + /** @const {string} */ var path = this.basePath_ + '/pet'; - /** @type {!Object} */ + /** @type {!Object} */ var queryParameters = {}; - /** @type {!Object} */ - var headerParams = angular.copy(this.defaultHeaders_); - - /** @type {!angular.$http.Config} */ - var httpRequestConfig = /** @type {!angular.$http.Config} */ ({ - url: path, - json: true, - data: body, - params: queryParameters, - headers: headerParams - }); + /** @type {!Object} */ + var headerParams = angular.extend({}, this.defaultHeaders); + /** @type {!Object} */ + var httpRequestParams = { + method: 'PUT', + url: path, + json: true, + data: opt_body, + + + params: queryParameters, + headers: headerParams + }; if (opt_extraHttpRequestParams) { - // If an opt_extraHttpRequestParams object is passed in, override values - // set the generated config with the passed in values. - httpRequestConfig = angular.merge(httpRequestConfig, opt_extraHttpRequestParams); + httpRequestParams = angular.extend(httpRequestParams, opt_extraHttpRequestParams); } - // This whole block is to work around a limitation in closure compiler. It - // would be better to call the $http service directly as a function, but that - // isn't permitted since it has methods attached to it. Manually confirmed to - // compile down to just a single method even with only SIMPLE optimization on. - // https://github.com/google/closure-compiler/blob/90769b826df65eabfb0211517b0d6d85c0c1c60b/contrib/externs/angular-1.4.js#L1393 - switch ('PUT') { - case 'GET': - return this.http_.get(path, httpRequestConfig); - case 'HEAD': - return this.http_.head(path, httpRequestConfig); - case 'POST': - return this.http_.post(path, {}, httpRequestConfig); - case 'PUT': - return this.http_.put(path, {}, httpRequestConfig); - case 'DELETE': - return this.http_.delete(path, httpRequestConfig); - case 'PATCH': - return this.http_.patch(path, {}, httpRequestConfig); - } + return this.http_(httpRequestParams); } /** @@ -102,49 +87,31 @@ API.Client.PetApi.prototype.updatePet = function(opt_body, opt_extraHttpRequestP * @return {!angular.$q.Promise} */ API.Client.PetApi.prototype.addPet = function(opt_body, opt_extraHttpRequestParams) { - /** @const {!string} */ + /** @const {string} */ var path = this.basePath_ + '/pet'; - /** @type {!Object} */ + /** @type {!Object} */ var queryParameters = {}; - /** @type {!Object} */ - var headerParams = angular.copy(this.defaultHeaders_); - - /** @type {!angular.$http.Config} */ - var httpRequestConfig = /** @type {!angular.$http.Config} */ ({ - url: path, - json: true, - data: body, - params: queryParameters, - headers: headerParams - }); + /** @type {!Object} */ + var headerParams = angular.extend({}, this.defaultHeaders); + /** @type {!Object} */ + var httpRequestParams = { + method: 'POST', + url: path, + json: true, + data: opt_body, + + + params: queryParameters, + headers: headerParams + }; if (opt_extraHttpRequestParams) { - // If an opt_extraHttpRequestParams object is passed in, override values - // set the generated config with the passed in values. - httpRequestConfig = angular.merge(httpRequestConfig, opt_extraHttpRequestParams); + httpRequestParams = angular.extend(httpRequestParams, opt_extraHttpRequestParams); } - // This whole block is to work around a limitation in closure compiler. It - // would be better to call the $http service directly as a function, but that - // isn't permitted since it has methods attached to it. Manually confirmed to - // compile down to just a single method even with only SIMPLE optimization on. - // https://github.com/google/closure-compiler/blob/90769b826df65eabfb0211517b0d6d85c0c1c60b/contrib/externs/angular-1.4.js#L1393 - switch ('POST') { - case 'GET': - return this.http_.get(path, httpRequestConfig); - case 'HEAD': - return this.http_.head(path, httpRequestConfig); - case 'POST': - return this.http_.post(path, {}, httpRequestConfig); - case 'PUT': - return this.http_.put(path, {}, httpRequestConfig); - case 'DELETE': - return this.http_.delete(path, httpRequestConfig); - case 'PATCH': - return this.http_.patch(path, {}, httpRequestConfig); - } + return this.http_(httpRequestParams); } /** @@ -155,51 +122,34 @@ API.Client.PetApi.prototype.addPet = function(opt_body, opt_extraHttpRequestPara * @return {!angular.$q.Promise>} */ API.Client.PetApi.prototype.findPetsByStatus = function(opt_status, opt_extraHttpRequestParams) { - /** @const {!string} */ + /** @const {string} */ var path = this.basePath_ + '/pet/findByStatus'; - /** @type {!Object} */ + /** @type {!Object} */ var queryParameters = {}; + + /** @type {!Object} */ + var headerParams = angular.extend({}, this.defaultHeaders); if (opt_status !== undefined) { - queryParameters['status'] = String(opt_status); + queryParameters['status'] = opt_status; } - /** @type {!Object} */ - var headerParams = angular.copy(this.defaultHeaders_); - - /** @type {!angular.$http.Config} */ - var httpRequestConfig = /** @type {!angular.$http.Config} */ ({ - url: path, - json: true, - params: queryParameters, - headers: headerParams - }); + /** @type {!Object} */ + var httpRequestParams = { + method: 'GET', + url: path, + json: true, + + + params: queryParameters, + headers: headerParams + }; if (opt_extraHttpRequestParams) { - // If an opt_extraHttpRequestParams object is passed in, override values - // set the generated config with the passed in values. - httpRequestConfig = angular.merge(httpRequestConfig, opt_extraHttpRequestParams); + httpRequestParams = angular.extend(httpRequestParams, opt_extraHttpRequestParams); } - // This whole block is to work around a limitation in closure compiler. It - // would be better to call the $http service directly as a function, but that - // isn't permitted since it has methods attached to it. Manually confirmed to - // compile down to just a single method even with only SIMPLE optimization on. - // https://github.com/google/closure-compiler/blob/90769b826df65eabfb0211517b0d6d85c0c1c60b/contrib/externs/angular-1.4.js#L1393 - switch ('GET') { - case 'GET': - return this.http_.get(path, httpRequestConfig); - case 'HEAD': - return this.http_.head(path, httpRequestConfig); - case 'POST': - return this.http_.post(path, {}, httpRequestConfig); - case 'PUT': - return this.http_.put(path, {}, httpRequestConfig); - case 'DELETE': - return this.http_.delete(path, httpRequestConfig); - case 'PATCH': - return this.http_.patch(path, {}, httpRequestConfig); - } + return this.http_(httpRequestParams); } /** @@ -210,51 +160,34 @@ API.Client.PetApi.prototype.findPetsByStatus = function(opt_status, opt_extraHtt * @return {!angular.$q.Promise>} */ API.Client.PetApi.prototype.findPetsByTags = function(opt_tags, opt_extraHttpRequestParams) { - /** @const {!string} */ + /** @const {string} */ var path = this.basePath_ + '/pet/findByTags'; - /** @type {!Object} */ + /** @type {!Object} */ var queryParameters = {}; + + /** @type {!Object} */ + var headerParams = angular.extend({}, this.defaultHeaders); if (opt_tags !== undefined) { - queryParameters['tags'] = String(opt_tags); + queryParameters['tags'] = opt_tags; } - /** @type {!Object} */ - var headerParams = angular.copy(this.defaultHeaders_); - - /** @type {!angular.$http.Config} */ - var httpRequestConfig = /** @type {!angular.$http.Config} */ ({ - url: path, - json: true, - params: queryParameters, - headers: headerParams - }); + /** @type {!Object} */ + var httpRequestParams = { + method: 'GET', + url: path, + json: true, + + + params: queryParameters, + headers: headerParams + }; if (opt_extraHttpRequestParams) { - // If an opt_extraHttpRequestParams object is passed in, override values - // set the generated config with the passed in values. - httpRequestConfig = angular.merge(httpRequestConfig, opt_extraHttpRequestParams); + httpRequestParams = angular.extend(httpRequestParams, opt_extraHttpRequestParams); } - // This whole block is to work around a limitation in closure compiler. It - // would be better to call the $http service directly as a function, but that - // isn't permitted since it has methods attached to it. Manually confirmed to - // compile down to just a single method even with only SIMPLE optimization on. - // https://github.com/google/closure-compiler/blob/90769b826df65eabfb0211517b0d6d85c0c1c60b/contrib/externs/angular-1.4.js#L1393 - switch ('GET') { - case 'GET': - return this.http_.get(path, httpRequestConfig); - case 'HEAD': - return this.http_.head(path, httpRequestConfig); - case 'POST': - return this.http_.post(path, {}, httpRequestConfig); - case 'PUT': - return this.http_.put(path, {}, httpRequestConfig); - case 'DELETE': - return this.http_.delete(path, httpRequestConfig); - case 'PATCH': - return this.http_.patch(path, {}, httpRequestConfig); - } + return this.http_(httpRequestParams); } /** @@ -265,49 +198,35 @@ API.Client.PetApi.prototype.findPetsByTags = function(opt_tags, opt_extraHttpReq * @return {!angular.$q.Promise} */ API.Client.PetApi.prototype.getPetById = function(petId, opt_extraHttpRequestParams) { - /** @const {!string} */ + /** @const {string} */ var path = this.basePath_ + '/pet/{petId}' .replace('{' + 'petId' + '}', String(petId)); - /** @type {!Object} */ + /** @type {!Object} */ var queryParameters = {}; - /** @type {!Object} */ - var headerParams = angular.copy(this.defaultHeaders_); - - /** @type {!angular.$http.Config} */ - var httpRequestConfig = /** @type {!angular.$http.Config} */ ({ - url: path, - json: true, - params: queryParameters, - headers: headerParams - }); + /** @type {!Object} */ + var headerParams = angular.extend({}, this.defaultHeaders); + // verify required parameter 'petId' is set + if (!petId) { + throw new Error('Missing required parameter petId when calling getPetById'); + } + /** @type {!Object} */ + var httpRequestParams = { + method: 'GET', + url: path, + json: true, + + + params: queryParameters, + headers: headerParams + }; if (opt_extraHttpRequestParams) { - // If an opt_extraHttpRequestParams object is passed in, override values - // set the generated config with the passed in values. - httpRequestConfig = angular.merge(httpRequestConfig, opt_extraHttpRequestParams); + httpRequestParams = angular.extend(httpRequestParams, opt_extraHttpRequestParams); } - // This whole block is to work around a limitation in closure compiler. It - // would be better to call the $http service directly as a function, but that - // isn't permitted since it has methods attached to it. Manually confirmed to - // compile down to just a single method even with only SIMPLE optimization on. - // https://github.com/google/closure-compiler/blob/90769b826df65eabfb0211517b0d6d85c0c1c60b/contrib/externs/angular-1.4.js#L1393 - switch ('GET') { - case 'GET': - return this.http_.get(path, httpRequestConfig); - case 'HEAD': - return this.http_.head(path, httpRequestConfig); - case 'POST': - return this.http_.post(path, {}, httpRequestConfig); - case 'PUT': - return this.http_.put(path, {}, httpRequestConfig); - case 'DELETE': - return this.http_.delete(path, httpRequestConfig); - case 'PATCH': - return this.http_.patch(path, {}, httpRequestConfig); - } + return this.http_(httpRequestParams); } /** @@ -320,73 +239,45 @@ API.Client.PetApi.prototype.getPetById = function(petId, opt_extraHttpRequestPar * @return {!angular.$q.Promise} */ API.Client.PetApi.prototype.updatePetWithForm = function(petId, opt_name, opt_status, opt_extraHttpRequestParams) { - /** @const {!string} */ + /** @const {string} */ var path = this.basePath_ + '/pet/{petId}' .replace('{' + 'petId' + '}', String(petId)); - /** @type {!Object} */ + /** @type {!Object} */ var queryParameters = {}; - /** @type {!Object} */ - var headerParams = angular.copy(this.defaultHeaders_); + /** @type {!Object} */ + var headerParams = angular.extend({}, this.defaultHeaders); + /** @type {!Object} */ + var formParams = {}; - /** @type {!FormData} */ - var formParams = new FormData(); - if (opt_name !== undefined) { - var name_ = /** @type {?} */ (opt_name); - if (name_ instanceof Blob) { - formParams.append('name', name_); - } else if (typeof name_ === 'string') { - formParams.append('name', name_); - } else { - throw new Error('Forms parameter opt_name is required to be a string or a Blob (https://developer.mozilla.org/en-US/docs/Web/API/Blob/Blob)'); - } - } - if (opt_status !== undefined) { - var status_ = /** @type {?} */ (opt_status); - if (status_ instanceof Blob) { - formParams.append('status', status_); - } else if (typeof status_ === 'string') { - formParams.append('status', status_); - } else { - throw new Error('Forms parameter opt_status is required to be a string or a Blob (https://developer.mozilla.org/en-US/docs/Web/API/Blob/Blob)'); - } + // verify required parameter 'petId' is set + if (!petId) { + throw new Error('Missing required parameter petId when calling updatePetWithForm'); } + headerParams['Content-Type'] = 'application/x-www-form-urlencoded'; - /** @type {!angular.$http.Config} */ - var httpRequestConfig = /** @type {!angular.$http.Config} */ ({ - url: path, - json: false, - data: formParams, - params: queryParameters, - headers: headerParams - }); + formParams['name'] = opt_name; + + formParams['status'] = opt_status; + + /** @type {!Object} */ + var httpRequestParams = { + method: 'POST', + url: path, + json: false, + + data: this.httpParamSerializer_(formParams), + + params: queryParameters, + headers: headerParams + }; if (opt_extraHttpRequestParams) { - // If an opt_extraHttpRequestParams object is passed in, override values - // set the generated config with the passed in values. - httpRequestConfig = angular.merge(httpRequestConfig, opt_extraHttpRequestParams); + httpRequestParams = angular.extend(httpRequestParams, opt_extraHttpRequestParams); } - // This whole block is to work around a limitation in closure compiler. It - // would be better to call the $http service directly as a function, but that - // isn't permitted since it has methods attached to it. Manually confirmed to - // compile down to just a single method even with only SIMPLE optimization on. - // https://github.com/google/closure-compiler/blob/90769b826df65eabfb0211517b0d6d85c0c1c60b/contrib/externs/angular-1.4.js#L1393 - switch ('POST') { - case 'GET': - return this.http_.get(path, httpRequestConfig); - case 'HEAD': - return this.http_.head(path, httpRequestConfig); - case 'POST': - return this.http_.post(path, {}, httpRequestConfig); - case 'PUT': - return this.http_.put(path, {}, httpRequestConfig); - case 'DELETE': - return this.http_.delete(path, httpRequestConfig); - case 'PATCH': - return this.http_.patch(path, {}, httpRequestConfig); - } + return this.http_(httpRequestParams); } /** @@ -398,52 +289,37 @@ API.Client.PetApi.prototype.updatePetWithForm = function(petId, opt_name, opt_st * @return {!angular.$q.Promise} */ API.Client.PetApi.prototype.deletePet = function(petId, opt_apiKey, opt_extraHttpRequestParams) { - /** @const {!string} */ + /** @const {string} */ var path = this.basePath_ + '/pet/{petId}' .replace('{' + 'petId' + '}', String(petId)); - /** @type {!Object} */ + /** @type {!Object} */ var queryParameters = {}; - /** @type {!Object} */ - var headerParams = angular.copy(this.defaultHeaders_); - if (opt_apiKey !== undefined) { - headerParams['api_key'] = opt_apiKey; + /** @type {!Object} */ + var headerParams = angular.extend({}, this.defaultHeaders); + // verify required parameter 'petId' is set + if (!petId) { + throw new Error('Missing required parameter petId when calling deletePet'); } + headerParams['api_key'] = opt_apiKey; - /** @type {!angular.$http.Config} */ - var httpRequestConfig = /** @type {!angular.$http.Config} */ ({ - url: path, - json: true, - params: queryParameters, - headers: headerParams - }); + /** @type {!Object} */ + var httpRequestParams = { + method: 'DELETE', + url: path, + json: true, + + + params: queryParameters, + headers: headerParams + }; if (opt_extraHttpRequestParams) { - // If an opt_extraHttpRequestParams object is passed in, override values - // set the generated config with the passed in values. - httpRequestConfig = angular.merge(httpRequestConfig, opt_extraHttpRequestParams); + httpRequestParams = angular.extend(httpRequestParams, opt_extraHttpRequestParams); } - // This whole block is to work around a limitation in closure compiler. It - // would be better to call the $http service directly as a function, but that - // isn't permitted since it has methods attached to it. Manually confirmed to - // compile down to just a single method even with only SIMPLE optimization on. - // https://github.com/google/closure-compiler/blob/90769b826df65eabfb0211517b0d6d85c0c1c60b/contrib/externs/angular-1.4.js#L1393 - switch ('DELETE') { - case 'GET': - return this.http_.get(path, httpRequestConfig); - case 'HEAD': - return this.http_.head(path, httpRequestConfig); - case 'POST': - return this.http_.post(path, {}, httpRequestConfig); - case 'PUT': - return this.http_.put(path, {}, httpRequestConfig); - case 'DELETE': - return this.http_.delete(path, httpRequestConfig); - case 'PATCH': - return this.http_.patch(path, {}, httpRequestConfig); - } + return this.http_(httpRequestParams); } /** @@ -456,73 +332,45 @@ API.Client.PetApi.prototype.deletePet = function(petId, opt_apiKey, opt_extraHtt * @return {!angular.$q.Promise} */ API.Client.PetApi.prototype.uploadFile = function(petId, opt_additionalMetadata, opt_file, opt_extraHttpRequestParams) { - /** @const {!string} */ + /** @const {string} */ var path = this.basePath_ + '/pet/{petId}/uploadImage' .replace('{' + 'petId' + '}', String(petId)); - /** @type {!Object} */ + /** @type {!Object} */ var queryParameters = {}; - /** @type {!Object} */ - var headerParams = angular.copy(this.defaultHeaders_); + /** @type {!Object} */ + var headerParams = angular.extend({}, this.defaultHeaders); + /** @type {!Object} */ + var formParams = {}; - /** @type {!FormData} */ - var formParams = new FormData(); - if (opt_additionalMetadata !== undefined) { - var additionalMetadata_ = /** @type {?} */ (opt_additionalMetadata); - if (additionalMetadata_ instanceof Blob) { - formParams.append('additionalMetadata', additionalMetadata_); - } else if (typeof additionalMetadata_ === 'string') { - formParams.append('additionalMetadata', additionalMetadata_); - } else { - throw new Error('Forms parameter opt_additionalMetadata is required to be a string or a Blob (https://developer.mozilla.org/en-US/docs/Web/API/Blob/Blob)'); - } - } - if (opt_file !== undefined) { - var file_ = /** @type {?} */ (opt_file); - if (file_ instanceof Blob) { - formParams.append('file', file_); - } else if (typeof file_ === 'string') { - formParams.append('file', file_); - } else { - throw new Error('Forms parameter opt_file is required to be a string or a Blob (https://developer.mozilla.org/en-US/docs/Web/API/Blob/Blob)'); - } + // verify required parameter 'petId' is set + if (!petId) { + throw new Error('Missing required parameter petId when calling uploadFile'); } + headerParams['Content-Type'] = 'application/x-www-form-urlencoded'; - /** @type {!angular.$http.Config} */ - var httpRequestConfig = /** @type {!angular.$http.Config} */ ({ - url: path, - json: false, - data: formParams, - params: queryParameters, - headers: headerParams - }); + formParams['additionalMetadata'] = opt_additionalMetadata; + + formParams['file'] = opt_file; + + /** @type {!Object} */ + var httpRequestParams = { + method: 'POST', + url: path, + json: false, + + data: this.httpParamSerializer_(formParams), + + params: queryParameters, + headers: headerParams + }; if (opt_extraHttpRequestParams) { - // If an opt_extraHttpRequestParams object is passed in, override values - // set the generated config with the passed in values. - httpRequestConfig = angular.merge(httpRequestConfig, opt_extraHttpRequestParams); + httpRequestParams = angular.extend(httpRequestParams, opt_extraHttpRequestParams); } - // This whole block is to work around a limitation in closure compiler. It - // would be better to call the $http service directly as a function, but that - // isn't permitted since it has methods attached to it. Manually confirmed to - // compile down to just a single method even with only SIMPLE optimization on. - // https://github.com/google/closure-compiler/blob/90769b826df65eabfb0211517b0d6d85c0c1c60b/contrib/externs/angular-1.4.js#L1393 - switch ('POST') { - case 'GET': - return this.http_.get(path, httpRequestConfig); - case 'HEAD': - return this.http_.head(path, httpRequestConfig); - case 'POST': - return this.http_.post(path, {}, httpRequestConfig); - case 'PUT': - return this.http_.put(path, {}, httpRequestConfig); - case 'DELETE': - return this.http_.delete(path, httpRequestConfig); - case 'PATCH': - return this.http_.patch(path, {}, httpRequestConfig); - } + return this.http_(httpRequestParams); } /** @@ -530,103 +378,71 @@ API.Client.PetApi.prototype.uploadFile = function(petId, opt_additionalMetadata, * Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions * @param {!number} petId ID of pet that needs to be fetched * @param {!angular.$http.Config=} opt_extraHttpRequestParams Extra HTTP parameters to send. - * @return {!angular.$q.Promise} + * @return {!angular.$q.Promise} */ API.Client.PetApi.prototype.getPetByIdWithByteArray = function(petId, opt_extraHttpRequestParams) { - /** @const {!string} */ + /** @const {string} */ var path = this.basePath_ + '/pet/{petId}?testing_byte_array=true' .replace('{' + 'petId' + '}', String(petId)); - /** @type {!Object} */ + /** @type {!Object} */ var queryParameters = {}; - /** @type {!Object} */ - var headerParams = angular.copy(this.defaultHeaders_); - - /** @type {!angular.$http.Config} */ - var httpRequestConfig = /** @type {!angular.$http.Config} */ ({ - url: path, - json: true, - params: queryParameters, - headers: headerParams - }); + /** @type {!Object} */ + var headerParams = angular.extend({}, this.defaultHeaders); + // verify required parameter 'petId' is set + if (!petId) { + throw new Error('Missing required parameter petId when calling getPetByIdWithByteArray'); + } + /** @type {!Object} */ + var httpRequestParams = { + method: 'GET', + url: path, + json: true, + + + params: queryParameters, + headers: headerParams + }; if (opt_extraHttpRequestParams) { - // If an opt_extraHttpRequestParams object is passed in, override values - // set the generated config with the passed in values. - httpRequestConfig = angular.merge(httpRequestConfig, opt_extraHttpRequestParams); + httpRequestParams = angular.extend(httpRequestParams, opt_extraHttpRequestParams); } - // This whole block is to work around a limitation in closure compiler. It - // would be better to call the $http service directly as a function, but that - // isn't permitted since it has methods attached to it. Manually confirmed to - // compile down to just a single method even with only SIMPLE optimization on. - // https://github.com/google/closure-compiler/blob/90769b826df65eabfb0211517b0d6d85c0c1c60b/contrib/externs/angular-1.4.js#L1393 - switch ('GET') { - case 'GET': - return this.http_.get(path, httpRequestConfig); - case 'HEAD': - return this.http_.head(path, httpRequestConfig); - case 'POST': - return this.http_.post(path, {}, httpRequestConfig); - case 'PUT': - return this.http_.put(path, {}, httpRequestConfig); - case 'DELETE': - return this.http_.delete(path, httpRequestConfig); - case 'PATCH': - return this.http_.patch(path, {}, httpRequestConfig); - } + return this.http_(httpRequestParams); } /** * Fake endpoint to test byte array in body parameter for adding a new pet to the store * - * @param {!API.Client.binary=} opt_body Pet object in the form of byte array + * @param {!string=} opt_body Pet object in the form of byte array * @param {!angular.$http.Config=} opt_extraHttpRequestParams Extra HTTP parameters to send. * @return {!angular.$q.Promise} */ API.Client.PetApi.prototype.addPetUsingByteArray = function(opt_body, opt_extraHttpRequestParams) { - /** @const {!string} */ + /** @const {string} */ var path = this.basePath_ + '/pet?testing_byte_array=true'; - /** @type {!Object} */ + /** @type {!Object} */ var queryParameters = {}; - /** @type {!Object} */ - var headerParams = angular.copy(this.defaultHeaders_); - - /** @type {!angular.$http.Config} */ - var httpRequestConfig = /** @type {!angular.$http.Config} */ ({ - url: path, - json: true, - data: body, - params: queryParameters, - headers: headerParams - }); + /** @type {!Object} */ + var headerParams = angular.extend({}, this.defaultHeaders); + /** @type {!Object} */ + var httpRequestParams = { + method: 'POST', + url: path, + json: true, + data: opt_body, + + + params: queryParameters, + headers: headerParams + }; if (opt_extraHttpRequestParams) { - // If an opt_extraHttpRequestParams object is passed in, override values - // set the generated config with the passed in values. - httpRequestConfig = angular.merge(httpRequestConfig, opt_extraHttpRequestParams); + httpRequestParams = angular.extend(httpRequestParams, opt_extraHttpRequestParams); } - // This whole block is to work around a limitation in closure compiler. It - // would be better to call the $http service directly as a function, but that - // isn't permitted since it has methods attached to it. Manually confirmed to - // compile down to just a single method even with only SIMPLE optimization on. - // https://github.com/google/closure-compiler/blob/90769b826df65eabfb0211517b0d6d85c0c1c60b/contrib/externs/angular-1.4.js#L1393 - switch ('POST') { - case 'GET': - return this.http_.get(path, httpRequestConfig); - case 'HEAD': - return this.http_.head(path, httpRequestConfig); - case 'POST': - return this.http_.post(path, {}, httpRequestConfig); - case 'PUT': - return this.http_.put(path, {}, httpRequestConfig); - case 'DELETE': - return this.http_.delete(path, httpRequestConfig); - case 'PATCH': - return this.http_.patch(path, {}, httpRequestConfig); - } + return this.http_(httpRequestParams); } diff --git a/samples/client/petstore/javascript-closure-angular/API/Client/StoreApi.js b/samples/client/petstore/javascript-closure-angular/API/Client/StoreApi.js index 4e85bb35c51..f312b7b20ce 100644 --- a/samples/client/petstore/javascript-closure-angular/API/Client/StoreApi.js +++ b/samples/client/petstore/javascript-closure-angular/API/Client/StoreApi.js @@ -5,7 +5,7 @@ * * This is a sample server Petstore server. You can find out more about Swagger at <a href=\"http://swagger.io\">http://swagger.io</a> or on irc.freenode.net, #swagger. For this sample, you can use the api key \"special-key\" to test the authorization filters * Version: 1.0.0 - * Generated at: 2016-01-27T23:51:03.092-07:00 + * Generated at: 2016-02-02T00:45:38.616-07:00 * Generated by: class io.swagger.codegen.languages.JavascriptClosureAngularClientCodegen */ /** @@ -20,10 +20,11 @@ goog.require('API.Client.Order'); /** * @constructor * @param {!angular.$http} $http + * @param {!Object} $httpParamSerializer * @param {!angular.$injector} $injector * @struct */ -API.Client.StoreApi = function($http, $injector) { +API.Client.StoreApi = function($http, $httpParamSerializer, $injector) { /** @private {!string} */ this.basePath_ = $injector.has('StoreApiBasePath') ? /** @type {!string} */ ($injector.get('StoreApiBasePath')) : @@ -37,8 +38,11 @@ API.Client.StoreApi = function($http, $injector) { /** @private {!angular.$http} */ this.http_ = $http; + + /** @private {!Object} */ + this.httpParamSerializer_ = $injector.get('$httpParamSerializer'); } -API.Client.StoreApi.$inject = ['$http', '$injector']; +API.Client.StoreApi.$inject = ['$http', '$httpParamSerializer', '$injector']; /** * Returns pet inventories by status @@ -47,48 +51,30 @@ API.Client.StoreApi.$inject = ['$http', '$injector']; * @return {!angular.$q.Promise>} */ API.Client.StoreApi.prototype.getInventory = function(opt_extraHttpRequestParams) { - /** @const {!string} */ + /** @const {string} */ var path = this.basePath_ + '/store/inventory'; - /** @type {!Object} */ + /** @type {!Object} */ var queryParameters = {}; - /** @type {!Object} */ - var headerParams = angular.copy(this.defaultHeaders_); - - /** @type {!angular.$http.Config} */ - var httpRequestConfig = /** @type {!angular.$http.Config} */ ({ - url: path, - json: true, - params: queryParameters, - headers: headerParams - }); + /** @type {!Object} */ + var headerParams = angular.extend({}, this.defaultHeaders); + /** @type {!Object} */ + var httpRequestParams = { + method: 'GET', + url: path, + json: true, + + + params: queryParameters, + headers: headerParams + }; if (opt_extraHttpRequestParams) { - // If an opt_extraHttpRequestParams object is passed in, override values - // set the generated config with the passed in values. - httpRequestConfig = angular.merge(httpRequestConfig, opt_extraHttpRequestParams); + httpRequestParams = angular.extend(httpRequestParams, opt_extraHttpRequestParams); } - // This whole block is to work around a limitation in closure compiler. It - // would be better to call the $http service directly as a function, but that - // isn't permitted since it has methods attached to it. Manually confirmed to - // compile down to just a single method even with only SIMPLE optimization on. - // https://github.com/google/closure-compiler/blob/90769b826df65eabfb0211517b0d6d85c0c1c60b/contrib/externs/angular-1.4.js#L1393 - switch ('GET') { - case 'GET': - return this.http_.get(path, httpRequestConfig); - case 'HEAD': - return this.http_.head(path, httpRequestConfig); - case 'POST': - return this.http_.post(path, {}, httpRequestConfig); - case 'PUT': - return this.http_.put(path, {}, httpRequestConfig); - case 'DELETE': - return this.http_.delete(path, httpRequestConfig); - case 'PATCH': - return this.http_.patch(path, {}, httpRequestConfig); - } + return this.http_(httpRequestParams); } /** @@ -99,49 +85,31 @@ API.Client.StoreApi.prototype.getInventory = function(opt_extraHttpRequestParams * @return {!angular.$q.Promise} */ API.Client.StoreApi.prototype.placeOrder = function(opt_body, opt_extraHttpRequestParams) { - /** @const {!string} */ + /** @const {string} */ var path = this.basePath_ + '/store/order'; - /** @type {!Object} */ + /** @type {!Object} */ var queryParameters = {}; - /** @type {!Object} */ - var headerParams = angular.copy(this.defaultHeaders_); - - /** @type {!angular.$http.Config} */ - var httpRequestConfig = /** @type {!angular.$http.Config} */ ({ - url: path, - json: true, - data: body, - params: queryParameters, - headers: headerParams - }); + /** @type {!Object} */ + var headerParams = angular.extend({}, this.defaultHeaders); + /** @type {!Object} */ + var httpRequestParams = { + method: 'POST', + url: path, + json: true, + data: opt_body, + + + params: queryParameters, + headers: headerParams + }; if (opt_extraHttpRequestParams) { - // If an opt_extraHttpRequestParams object is passed in, override values - // set the generated config with the passed in values. - httpRequestConfig = angular.merge(httpRequestConfig, opt_extraHttpRequestParams); + httpRequestParams = angular.extend(httpRequestParams, opt_extraHttpRequestParams); } - // This whole block is to work around a limitation in closure compiler. It - // would be better to call the $http service directly as a function, but that - // isn't permitted since it has methods attached to it. Manually confirmed to - // compile down to just a single method even with only SIMPLE optimization on. - // https://github.com/google/closure-compiler/blob/90769b826df65eabfb0211517b0d6d85c0c1c60b/contrib/externs/angular-1.4.js#L1393 - switch ('POST') { - case 'GET': - return this.http_.get(path, httpRequestConfig); - case 'HEAD': - return this.http_.head(path, httpRequestConfig); - case 'POST': - return this.http_.post(path, {}, httpRequestConfig); - case 'PUT': - return this.http_.put(path, {}, httpRequestConfig); - case 'DELETE': - return this.http_.delete(path, httpRequestConfig); - case 'PATCH': - return this.http_.patch(path, {}, httpRequestConfig); - } + return this.http_(httpRequestParams); } /** @@ -152,49 +120,35 @@ API.Client.StoreApi.prototype.placeOrder = function(opt_body, opt_extraHttpReque * @return {!angular.$q.Promise} */ API.Client.StoreApi.prototype.getOrderById = function(orderId, opt_extraHttpRequestParams) { - /** @const {!string} */ + /** @const {string} */ var path = this.basePath_ + '/store/order/{orderId}' .replace('{' + 'orderId' + '}', String(orderId)); - /** @type {!Object} */ + /** @type {!Object} */ var queryParameters = {}; - /** @type {!Object} */ - var headerParams = angular.copy(this.defaultHeaders_); - - /** @type {!angular.$http.Config} */ - var httpRequestConfig = /** @type {!angular.$http.Config} */ ({ - url: path, - json: true, - params: queryParameters, - headers: headerParams - }); + /** @type {!Object} */ + var headerParams = angular.extend({}, this.defaultHeaders); + // verify required parameter 'orderId' is set + if (!orderId) { + throw new Error('Missing required parameter orderId when calling getOrderById'); + } + /** @type {!Object} */ + var httpRequestParams = { + method: 'GET', + url: path, + json: true, + + + params: queryParameters, + headers: headerParams + }; if (opt_extraHttpRequestParams) { - // If an opt_extraHttpRequestParams object is passed in, override values - // set the generated config with the passed in values. - httpRequestConfig = angular.merge(httpRequestConfig, opt_extraHttpRequestParams); + httpRequestParams = angular.extend(httpRequestParams, opt_extraHttpRequestParams); } - // This whole block is to work around a limitation in closure compiler. It - // would be better to call the $http service directly as a function, but that - // isn't permitted since it has methods attached to it. Manually confirmed to - // compile down to just a single method even with only SIMPLE optimization on. - // https://github.com/google/closure-compiler/blob/90769b826df65eabfb0211517b0d6d85c0c1c60b/contrib/externs/angular-1.4.js#L1393 - switch ('GET') { - case 'GET': - return this.http_.get(path, httpRequestConfig); - case 'HEAD': - return this.http_.head(path, httpRequestConfig); - case 'POST': - return this.http_.post(path, {}, httpRequestConfig); - case 'PUT': - return this.http_.put(path, {}, httpRequestConfig); - case 'DELETE': - return this.http_.delete(path, httpRequestConfig); - case 'PATCH': - return this.http_.patch(path, {}, httpRequestConfig); - } + return this.http_(httpRequestParams); } /** @@ -205,47 +159,33 @@ API.Client.StoreApi.prototype.getOrderById = function(orderId, opt_extraHttpRequ * @return {!angular.$q.Promise} */ API.Client.StoreApi.prototype.deleteOrder = function(orderId, opt_extraHttpRequestParams) { - /** @const {!string} */ + /** @const {string} */ var path = this.basePath_ + '/store/order/{orderId}' .replace('{' + 'orderId' + '}', String(orderId)); - /** @type {!Object} */ + /** @type {!Object} */ var queryParameters = {}; - /** @type {!Object} */ - var headerParams = angular.copy(this.defaultHeaders_); - - /** @type {!angular.$http.Config} */ - var httpRequestConfig = /** @type {!angular.$http.Config} */ ({ - url: path, - json: true, - params: queryParameters, - headers: headerParams - }); + /** @type {!Object} */ + var headerParams = angular.extend({}, this.defaultHeaders); + // verify required parameter 'orderId' is set + if (!orderId) { + throw new Error('Missing required parameter orderId when calling deleteOrder'); + } + /** @type {!Object} */ + var httpRequestParams = { + method: 'DELETE', + url: path, + json: true, + + + params: queryParameters, + headers: headerParams + }; if (opt_extraHttpRequestParams) { - // If an opt_extraHttpRequestParams object is passed in, override values - // set the generated config with the passed in values. - httpRequestConfig = angular.merge(httpRequestConfig, opt_extraHttpRequestParams); + httpRequestParams = angular.extend(httpRequestParams, opt_extraHttpRequestParams); } - // This whole block is to work around a limitation in closure compiler. It - // would be better to call the $http service directly as a function, but that - // isn't permitted since it has methods attached to it. Manually confirmed to - // compile down to just a single method even with only SIMPLE optimization on. - // https://github.com/google/closure-compiler/blob/90769b826df65eabfb0211517b0d6d85c0c1c60b/contrib/externs/angular-1.4.js#L1393 - switch ('DELETE') { - case 'GET': - return this.http_.get(path, httpRequestConfig); - case 'HEAD': - return this.http_.head(path, httpRequestConfig); - case 'POST': - return this.http_.post(path, {}, httpRequestConfig); - case 'PUT': - return this.http_.put(path, {}, httpRequestConfig); - case 'DELETE': - return this.http_.delete(path, httpRequestConfig); - case 'PATCH': - return this.http_.patch(path, {}, httpRequestConfig); - } + return this.http_(httpRequestParams); } diff --git a/samples/client/petstore/javascript-closure-angular/API/Client/UserApi.js b/samples/client/petstore/javascript-closure-angular/API/Client/UserApi.js index a8762b531db..4c97786fa9f 100644 --- a/samples/client/petstore/javascript-closure-angular/API/Client/UserApi.js +++ b/samples/client/petstore/javascript-closure-angular/API/Client/UserApi.js @@ -5,7 +5,7 @@ * * This is a sample server Petstore server. You can find out more about Swagger at <a href=\"http://swagger.io\">http://swagger.io</a> or on irc.freenode.net, #swagger. For this sample, you can use the api key \"special-key\" to test the authorization filters * Version: 1.0.0 - * Generated at: 2016-01-27T23:51:03.092-07:00 + * Generated at: 2016-02-02T00:45:38.616-07:00 * Generated by: class io.swagger.codegen.languages.JavascriptClosureAngularClientCodegen */ /** @@ -20,10 +20,11 @@ goog.require('API.Client.User'); /** * @constructor * @param {!angular.$http} $http + * @param {!Object} $httpParamSerializer * @param {!angular.$injector} $injector * @struct */ -API.Client.UserApi = function($http, $injector) { +API.Client.UserApi = function($http, $httpParamSerializer, $injector) { /** @private {!string} */ this.basePath_ = $injector.has('UserApiBasePath') ? /** @type {!string} */ ($injector.get('UserApiBasePath')) : @@ -37,8 +38,11 @@ API.Client.UserApi = function($http, $injector) { /** @private {!angular.$http} */ this.http_ = $http; + + /** @private {!Object} */ + this.httpParamSerializer_ = $injector.get('$httpParamSerializer'); } -API.Client.UserApi.$inject = ['$http', '$injector']; +API.Client.UserApi.$inject = ['$http', '$httpParamSerializer', '$injector']; /** * Create user @@ -48,49 +52,31 @@ API.Client.UserApi.$inject = ['$http', '$injector']; * @return {!angular.$q.Promise} */ API.Client.UserApi.prototype.createUser = function(opt_body, opt_extraHttpRequestParams) { - /** @const {!string} */ + /** @const {string} */ var path = this.basePath_ + '/user'; - /** @type {!Object} */ + /** @type {!Object} */ var queryParameters = {}; - /** @type {!Object} */ - var headerParams = angular.copy(this.defaultHeaders_); - - /** @type {!angular.$http.Config} */ - var httpRequestConfig = /** @type {!angular.$http.Config} */ ({ - url: path, - json: true, - data: body, - params: queryParameters, - headers: headerParams - }); + /** @type {!Object} */ + var headerParams = angular.extend({}, this.defaultHeaders); + /** @type {!Object} */ + var httpRequestParams = { + method: 'POST', + url: path, + json: true, + data: opt_body, + + + params: queryParameters, + headers: headerParams + }; if (opt_extraHttpRequestParams) { - // If an opt_extraHttpRequestParams object is passed in, override values - // set the generated config with the passed in values. - httpRequestConfig = angular.merge(httpRequestConfig, opt_extraHttpRequestParams); + httpRequestParams = angular.extend(httpRequestParams, opt_extraHttpRequestParams); } - // This whole block is to work around a limitation in closure compiler. It - // would be better to call the $http service directly as a function, but that - // isn't permitted since it has methods attached to it. Manually confirmed to - // compile down to just a single method even with only SIMPLE optimization on. - // https://github.com/google/closure-compiler/blob/90769b826df65eabfb0211517b0d6d85c0c1c60b/contrib/externs/angular-1.4.js#L1393 - switch ('POST') { - case 'GET': - return this.http_.get(path, httpRequestConfig); - case 'HEAD': - return this.http_.head(path, httpRequestConfig); - case 'POST': - return this.http_.post(path, {}, httpRequestConfig); - case 'PUT': - return this.http_.put(path, {}, httpRequestConfig); - case 'DELETE': - return this.http_.delete(path, httpRequestConfig); - case 'PATCH': - return this.http_.patch(path, {}, httpRequestConfig); - } + return this.http_(httpRequestParams); } /** @@ -101,49 +87,31 @@ API.Client.UserApi.prototype.createUser = function(opt_body, opt_extraHttpReques * @return {!angular.$q.Promise} */ API.Client.UserApi.prototype.createUsersWithArrayInput = function(opt_body, opt_extraHttpRequestParams) { - /** @const {!string} */ + /** @const {string} */ var path = this.basePath_ + '/user/createWithArray'; - /** @type {!Object} */ + /** @type {!Object} */ var queryParameters = {}; - /** @type {!Object} */ - var headerParams = angular.copy(this.defaultHeaders_); - - /** @type {!angular.$http.Config} */ - var httpRequestConfig = /** @type {!angular.$http.Config} */ ({ - url: path, - json: true, - data: body, - params: queryParameters, - headers: headerParams - }); + /** @type {!Object} */ + var headerParams = angular.extend({}, this.defaultHeaders); + /** @type {!Object} */ + var httpRequestParams = { + method: 'POST', + url: path, + json: true, + data: opt_body, + + + params: queryParameters, + headers: headerParams + }; if (opt_extraHttpRequestParams) { - // If an opt_extraHttpRequestParams object is passed in, override values - // set the generated config with the passed in values. - httpRequestConfig = angular.merge(httpRequestConfig, opt_extraHttpRequestParams); + httpRequestParams = angular.extend(httpRequestParams, opt_extraHttpRequestParams); } - // This whole block is to work around a limitation in closure compiler. It - // would be better to call the $http service directly as a function, but that - // isn't permitted since it has methods attached to it. Manually confirmed to - // compile down to just a single method even with only SIMPLE optimization on. - // https://github.com/google/closure-compiler/blob/90769b826df65eabfb0211517b0d6d85c0c1c60b/contrib/externs/angular-1.4.js#L1393 - switch ('POST') { - case 'GET': - return this.http_.get(path, httpRequestConfig); - case 'HEAD': - return this.http_.head(path, httpRequestConfig); - case 'POST': - return this.http_.post(path, {}, httpRequestConfig); - case 'PUT': - return this.http_.put(path, {}, httpRequestConfig); - case 'DELETE': - return this.http_.delete(path, httpRequestConfig); - case 'PATCH': - return this.http_.patch(path, {}, httpRequestConfig); - } + return this.http_(httpRequestParams); } /** @@ -154,49 +122,31 @@ API.Client.UserApi.prototype.createUsersWithArrayInput = function(opt_body, opt_ * @return {!angular.$q.Promise} */ API.Client.UserApi.prototype.createUsersWithListInput = function(opt_body, opt_extraHttpRequestParams) { - /** @const {!string} */ + /** @const {string} */ var path = this.basePath_ + '/user/createWithList'; - /** @type {!Object} */ + /** @type {!Object} */ var queryParameters = {}; - /** @type {!Object} */ - var headerParams = angular.copy(this.defaultHeaders_); - - /** @type {!angular.$http.Config} */ - var httpRequestConfig = /** @type {!angular.$http.Config} */ ({ - url: path, - json: true, - data: body, - params: queryParameters, - headers: headerParams - }); + /** @type {!Object} */ + var headerParams = angular.extend({}, this.defaultHeaders); + /** @type {!Object} */ + var httpRequestParams = { + method: 'POST', + url: path, + json: true, + data: opt_body, + + + params: queryParameters, + headers: headerParams + }; if (opt_extraHttpRequestParams) { - // If an opt_extraHttpRequestParams object is passed in, override values - // set the generated config with the passed in values. - httpRequestConfig = angular.merge(httpRequestConfig, opt_extraHttpRequestParams); + httpRequestParams = angular.extend(httpRequestParams, opt_extraHttpRequestParams); } - // This whole block is to work around a limitation in closure compiler. It - // would be better to call the $http service directly as a function, but that - // isn't permitted since it has methods attached to it. Manually confirmed to - // compile down to just a single method even with only SIMPLE optimization on. - // https://github.com/google/closure-compiler/blob/90769b826df65eabfb0211517b0d6d85c0c1c60b/contrib/externs/angular-1.4.js#L1393 - switch ('POST') { - case 'GET': - return this.http_.get(path, httpRequestConfig); - case 'HEAD': - return this.http_.head(path, httpRequestConfig); - case 'POST': - return this.http_.post(path, {}, httpRequestConfig); - case 'PUT': - return this.http_.put(path, {}, httpRequestConfig); - case 'DELETE': - return this.http_.delete(path, httpRequestConfig); - case 'PATCH': - return this.http_.patch(path, {}, httpRequestConfig); - } + return this.http_(httpRequestParams); } /** @@ -208,54 +158,38 @@ API.Client.UserApi.prototype.createUsersWithListInput = function(opt_body, opt_e * @return {!angular.$q.Promise} */ API.Client.UserApi.prototype.loginUser = function(opt_username, opt_password, opt_extraHttpRequestParams) { - /** @const {!string} */ + /** @const {string} */ var path = this.basePath_ + '/user/login'; - /** @type {!Object} */ + /** @type {!Object} */ var queryParameters = {}; + + /** @type {!Object} */ + var headerParams = angular.extend({}, this.defaultHeaders); if (opt_username !== undefined) { - queryParameters['username'] = String(opt_username); + queryParameters['username'] = opt_username; } + if (opt_password !== undefined) { - queryParameters['password'] = String(opt_password); + queryParameters['password'] = opt_password; } - /** @type {!Object} */ - var headerParams = angular.copy(this.defaultHeaders_); - - /** @type {!angular.$http.Config} */ - var httpRequestConfig = /** @type {!angular.$http.Config} */ ({ - url: path, - json: true, - params: queryParameters, - headers: headerParams - }); + /** @type {!Object} */ + var httpRequestParams = { + method: 'GET', + url: path, + json: true, + + + params: queryParameters, + headers: headerParams + }; if (opt_extraHttpRequestParams) { - // If an opt_extraHttpRequestParams object is passed in, override values - // set the generated config with the passed in values. - httpRequestConfig = angular.merge(httpRequestConfig, opt_extraHttpRequestParams); + httpRequestParams = angular.extend(httpRequestParams, opt_extraHttpRequestParams); } - // This whole block is to work around a limitation in closure compiler. It - // would be better to call the $http service directly as a function, but that - // isn't permitted since it has methods attached to it. Manually confirmed to - // compile down to just a single method even with only SIMPLE optimization on. - // https://github.com/google/closure-compiler/blob/90769b826df65eabfb0211517b0d6d85c0c1c60b/contrib/externs/angular-1.4.js#L1393 - switch ('GET') { - case 'GET': - return this.http_.get(path, httpRequestConfig); - case 'HEAD': - return this.http_.head(path, httpRequestConfig); - case 'POST': - return this.http_.post(path, {}, httpRequestConfig); - case 'PUT': - return this.http_.put(path, {}, httpRequestConfig); - case 'DELETE': - return this.http_.delete(path, httpRequestConfig); - case 'PATCH': - return this.http_.patch(path, {}, httpRequestConfig); - } + return this.http_(httpRequestParams); } /** @@ -265,48 +199,30 @@ API.Client.UserApi.prototype.loginUser = function(opt_username, opt_password, op * @return {!angular.$q.Promise} */ API.Client.UserApi.prototype.logoutUser = function(opt_extraHttpRequestParams) { - /** @const {!string} */ + /** @const {string} */ var path = this.basePath_ + '/user/logout'; - /** @type {!Object} */ + /** @type {!Object} */ var queryParameters = {}; - /** @type {!Object} */ - var headerParams = angular.copy(this.defaultHeaders_); - - /** @type {!angular.$http.Config} */ - var httpRequestConfig = /** @type {!angular.$http.Config} */ ({ - url: path, - json: true, - params: queryParameters, - headers: headerParams - }); + /** @type {!Object} */ + var headerParams = angular.extend({}, this.defaultHeaders); + /** @type {!Object} */ + var httpRequestParams = { + method: 'GET', + url: path, + json: true, + + + params: queryParameters, + headers: headerParams + }; if (opt_extraHttpRequestParams) { - // If an opt_extraHttpRequestParams object is passed in, override values - // set the generated config with the passed in values. - httpRequestConfig = angular.merge(httpRequestConfig, opt_extraHttpRequestParams); + httpRequestParams = angular.extend(httpRequestParams, opt_extraHttpRequestParams); } - // This whole block is to work around a limitation in closure compiler. It - // would be better to call the $http service directly as a function, but that - // isn't permitted since it has methods attached to it. Manually confirmed to - // compile down to just a single method even with only SIMPLE optimization on. - // https://github.com/google/closure-compiler/blob/90769b826df65eabfb0211517b0d6d85c0c1c60b/contrib/externs/angular-1.4.js#L1393 - switch ('GET') { - case 'GET': - return this.http_.get(path, httpRequestConfig); - case 'HEAD': - return this.http_.head(path, httpRequestConfig); - case 'POST': - return this.http_.post(path, {}, httpRequestConfig); - case 'PUT': - return this.http_.put(path, {}, httpRequestConfig); - case 'DELETE': - return this.http_.delete(path, httpRequestConfig); - case 'PATCH': - return this.http_.patch(path, {}, httpRequestConfig); - } + return this.http_(httpRequestParams); } /** @@ -317,49 +233,35 @@ API.Client.UserApi.prototype.logoutUser = function(opt_extraHttpRequestParams) { * @return {!angular.$q.Promise} */ API.Client.UserApi.prototype.getUserByName = function(username, opt_extraHttpRequestParams) { - /** @const {!string} */ + /** @const {string} */ var path = this.basePath_ + '/user/{username}' .replace('{' + 'username' + '}', String(username)); - /** @type {!Object} */ + /** @type {!Object} */ var queryParameters = {}; - /** @type {!Object} */ - var headerParams = angular.copy(this.defaultHeaders_); - - /** @type {!angular.$http.Config} */ - var httpRequestConfig = /** @type {!angular.$http.Config} */ ({ - url: path, - json: true, - params: queryParameters, - headers: headerParams - }); + /** @type {!Object} */ + var headerParams = angular.extend({}, this.defaultHeaders); + // verify required parameter 'username' is set + if (!username) { + throw new Error('Missing required parameter username when calling getUserByName'); + } + /** @type {!Object} */ + var httpRequestParams = { + method: 'GET', + url: path, + json: true, + + + params: queryParameters, + headers: headerParams + }; if (opt_extraHttpRequestParams) { - // If an opt_extraHttpRequestParams object is passed in, override values - // set the generated config with the passed in values. - httpRequestConfig = angular.merge(httpRequestConfig, opt_extraHttpRequestParams); + httpRequestParams = angular.extend(httpRequestParams, opt_extraHttpRequestParams); } - // This whole block is to work around a limitation in closure compiler. It - // would be better to call the $http service directly as a function, but that - // isn't permitted since it has methods attached to it. Manually confirmed to - // compile down to just a single method even with only SIMPLE optimization on. - // https://github.com/google/closure-compiler/blob/90769b826df65eabfb0211517b0d6d85c0c1c60b/contrib/externs/angular-1.4.js#L1393 - switch ('GET') { - case 'GET': - return this.http_.get(path, httpRequestConfig); - case 'HEAD': - return this.http_.head(path, httpRequestConfig); - case 'POST': - return this.http_.post(path, {}, httpRequestConfig); - case 'PUT': - return this.http_.put(path, {}, httpRequestConfig); - case 'DELETE': - return this.http_.delete(path, httpRequestConfig); - case 'PATCH': - return this.http_.patch(path, {}, httpRequestConfig); - } + return this.http_(httpRequestParams); } /** @@ -371,50 +273,36 @@ API.Client.UserApi.prototype.getUserByName = function(username, opt_extraHttpReq * @return {!angular.$q.Promise} */ API.Client.UserApi.prototype.updateUser = function(username, opt_body, opt_extraHttpRequestParams) { - /** @const {!string} */ + /** @const {string} */ var path = this.basePath_ + '/user/{username}' .replace('{' + 'username' + '}', String(username)); - /** @type {!Object} */ + /** @type {!Object} */ var queryParameters = {}; - /** @type {!Object} */ - var headerParams = angular.copy(this.defaultHeaders_); - - /** @type {!angular.$http.Config} */ - var httpRequestConfig = /** @type {!angular.$http.Config} */ ({ - url: path, - json: true, - data: body, - params: queryParameters, - headers: headerParams - }); + /** @type {!Object} */ + var headerParams = angular.extend({}, this.defaultHeaders); + // verify required parameter 'username' is set + if (!username) { + throw new Error('Missing required parameter username when calling updateUser'); + } + /** @type {!Object} */ + var httpRequestParams = { + method: 'PUT', + url: path, + json: true, + data: opt_body, + + + params: queryParameters, + headers: headerParams + }; if (opt_extraHttpRequestParams) { - // If an opt_extraHttpRequestParams object is passed in, override values - // set the generated config with the passed in values. - httpRequestConfig = angular.merge(httpRequestConfig, opt_extraHttpRequestParams); + httpRequestParams = angular.extend(httpRequestParams, opt_extraHttpRequestParams); } - // This whole block is to work around a limitation in closure compiler. It - // would be better to call the $http service directly as a function, but that - // isn't permitted since it has methods attached to it. Manually confirmed to - // compile down to just a single method even with only SIMPLE optimization on. - // https://github.com/google/closure-compiler/blob/90769b826df65eabfb0211517b0d6d85c0c1c60b/contrib/externs/angular-1.4.js#L1393 - switch ('PUT') { - case 'GET': - return this.http_.get(path, httpRequestConfig); - case 'HEAD': - return this.http_.head(path, httpRequestConfig); - case 'POST': - return this.http_.post(path, {}, httpRequestConfig); - case 'PUT': - return this.http_.put(path, {}, httpRequestConfig); - case 'DELETE': - return this.http_.delete(path, httpRequestConfig); - case 'PATCH': - return this.http_.patch(path, {}, httpRequestConfig); - } + return this.http_(httpRequestParams); } /** @@ -425,47 +313,33 @@ API.Client.UserApi.prototype.updateUser = function(username, opt_body, opt_extra * @return {!angular.$q.Promise} */ API.Client.UserApi.prototype.deleteUser = function(username, opt_extraHttpRequestParams) { - /** @const {!string} */ + /** @const {string} */ var path = this.basePath_ + '/user/{username}' .replace('{' + 'username' + '}', String(username)); - /** @type {!Object} */ + /** @type {!Object} */ var queryParameters = {}; - /** @type {!Object} */ - var headerParams = angular.copy(this.defaultHeaders_); - - /** @type {!angular.$http.Config} */ - var httpRequestConfig = /** @type {!angular.$http.Config} */ ({ - url: path, - json: true, - params: queryParameters, - headers: headerParams - }); + /** @type {!Object} */ + var headerParams = angular.extend({}, this.defaultHeaders); + // verify required parameter 'username' is set + if (!username) { + throw new Error('Missing required parameter username when calling deleteUser'); + } + /** @type {!Object} */ + var httpRequestParams = { + method: 'DELETE', + url: path, + json: true, + + + params: queryParameters, + headers: headerParams + }; if (opt_extraHttpRequestParams) { - // If an opt_extraHttpRequestParams object is passed in, override values - // set the generated config with the passed in values. - httpRequestConfig = angular.merge(httpRequestConfig, opt_extraHttpRequestParams); + httpRequestParams = angular.extend(httpRequestParams, opt_extraHttpRequestParams); } - // This whole block is to work around a limitation in closure compiler. It - // would be better to call the $http service directly as a function, but that - // isn't permitted since it has methods attached to it. Manually confirmed to - // compile down to just a single method even with only SIMPLE optimization on. - // https://github.com/google/closure-compiler/blob/90769b826df65eabfb0211517b0d6d85c0c1c60b/contrib/externs/angular-1.4.js#L1393 - switch ('DELETE') { - case 'GET': - return this.http_.get(path, httpRequestConfig); - case 'HEAD': - return this.http_.head(path, httpRequestConfig); - case 'POST': - return this.http_.post(path, {}, httpRequestConfig); - case 'PUT': - return this.http_.put(path, {}, httpRequestConfig); - case 'DELETE': - return this.http_.delete(path, httpRequestConfig); - case 'PATCH': - return this.http_.patch(path, {}, httpRequestConfig); - } + return this.http_(httpRequestParams); } diff --git a/samples/client/petstore/javascript-closure-angular/compile.py b/samples/client/petstore/javascript-closure-angular/compile.py new file mode 100755 index 00000000000..2797a6f3456 --- /dev/null +++ b/samples/client/petstore/javascript-closure-angular/compile.py @@ -0,0 +1,63 @@ +#!/usr/bin/python + +import httplib, urllib, sys + +# Collect all the files in an order that will work. That is Models first then APIs +def concatFiles(files): + code = "" + for file in files: + code += open(file).read() + return code + +def makeRequest(params): + # Always use the following value for the Content-type header. + headers = { "Content-type": "application/x-www-form-urlencoded" } + conn = httplib.HTTPConnection('closure-compiler.appspot.com') + conn.request('POST', '/compile', params, headers) + response = conn.getresponse() + data = response.read() + conn.close() + return data + +def checkForCompilerErrors(files): + params = urllib.urlencode([ + ('js_code', concatFiles(files)), + ('compilation_level', 'SIMPLE_OPTIMIZATIONS'), + ('language', 'ECMASCRIPT5_STRICT'), + ('output_format', 'text'), + ('output_info', 'errors'), + ]) + + return makeRequest(params) + +def compile(output, files): + params = urllib.urlencode([ + ('js_code', concatFiles(files)), + ('compilation_level', 'SIMPLE_OPTIMIZATIONS'), + ('language', 'ECMASCRIPT5_STRICT'), + ('output_format', 'text'), + ('output_info', 'compiled_code'), + ]) + + f = open(output, 'w') + f.write(makeRequest(params)) + f.close() + +targets = { + "PetAPI": ["API/Client/Tag.js", "API/Client/Category.js", "API/Client/Pet.js", "API/Client/PetApi.js"], + "StoreAPI": ["API/Client/Order.js", "API/Client/StoreApi.js"], + "UserAPI": ["API/Client/User.js", "API/Client/UserApi.js"], +} + +def main(): + for name, targetFiles in targets.iteritems(): + errors = checkForCompilerErrors(targetFiles) + if errors: + print "Compiler errors when building %s" % name + print errors + + for name, targetFiles in targets.iteritems(): + compile("%s.compiled.js" % name, targets[name]) + +if __name__ == "__main__": + sys.exit(main()) diff --git a/samples/client/petstore/javascript-closure-angular/karma.conf.js b/samples/client/petstore/javascript-closure-angular/karma.conf.js new file mode 100644 index 00000000000..b3994e2a309 --- /dev/null +++ b/samples/client/petstore/javascript-closure-angular/karma.conf.js @@ -0,0 +1,78 @@ +// Karma configuration +// Generated on Tue Feb 02 2016 00:09:34 GMT-0700 (MST) + +module.exports = function(config) { + config.set({ + + // base path, that will be used to resolve files and exclude + basePath: '', + + + // frameworks to use + frameworks: ['jasmine', 'closure'], + + + // list of files / patterns to load in the browser + files: [ + 'node_modules/angular/angular.js', + 'node_modules/angular-mocks/angular-mocks.js', + {pattern: 'lib/**/*.js', included: true}, + {pattern: 'API/**/*.js', included: false}, + {pattern: 'test/**/*.js'}, + ], + + preprocessors: { + // tests are preprocessed for dependencies (closure) + 'test/**/*.js': ['closure', 'closure-iit'], + // source files are preprocessed for dependencies + 'API/**/*.js': ['closure'], + // external deps + 'lib/goog/deps.js': ['closure-deps'] + }, + + // list of files to exclude + exclude: [], + + + // test results reporter to use + // possible values: 'dots', 'progress', 'junit', 'growl', 'coverage' + reporters: ['dots'], + + + // web server port + port: 9876, + + + // enable / disable colors in the output (reporters and logs) + colors: true, + + + // level of logging + // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG + logLevel: config.LOG_INFO, + + + // enable / disable watching file and executing tests whenever any file changes + autoWatch: true, + + + // Start these browsers, currently available: + // - Chrome + // - ChromeCanary + // - Firefox + // - Opera (has to be installed with `npm install karma-opera-launcher`) + // - Safari (only Mac; has to be installed with `npm install karma-safari-launcher`) + // - PhantomJS + // - IE (only Windows; has to be installed with `npm install karma-ie-launcher`) + browsers: ['PhantomJS'], + + + // If browser does not capture in given timeout [ms], kill it + captureTimeout: 60000, + + + // Continuous Integration mode + // if true, it capture browsers, run tests and exit + singleRun: false + }); +}; diff --git a/samples/client/petstore/javascript-closure-angular/lib/goog/base.js b/samples/client/petstore/javascript-closure-angular/lib/goog/base.js new file mode 100644 index 00000000000..58674377024 --- /dev/null +++ b/samples/client/petstore/javascript-closure-angular/lib/goog/base.js @@ -0,0 +1,1548 @@ +// Copyright 2006 The Closure Library Authors. All Rights Reserved. +// +// Licensed 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. + +/** + * @fileoverview Bootstrap for the Google JS Library (Closure). + * + * In uncompiled mode base.js will write out Closure's deps file, unless the + * global CLOSURE_NO_DEPS is set to true. This allows projects to + * include their own deps file(s) from different locations. + * + * + * @provideGoog + */ + + +/** + * @define {boolean} Overridden to true by the compiler when --closure_pass + * or --mark_as_compiled is specified. + */ +var COMPILED = false; + + +/** + * Base namespace for the Closure library. Checks to see goog is + * already defined in the current scope before assigning to prevent + * clobbering if base.js is loaded more than once. + * + * @const + */ +var goog = goog || {}; // Identifies this file as the Closure base. + + +/** + * Reference to the global context. In most cases this will be 'window'. + */ +goog.global = this; + + +/** + * @define {boolean} DEBUG is provided as a convenience so that debugging code + * that should not be included in a production js_binary can be easily stripped + * by specifying --define goog.DEBUG=false to the JSCompiler. For example, most + * toString() methods should be declared inside an "if (goog.DEBUG)" conditional + * because they are generally used for debugging purposes and it is difficult + * for the JSCompiler to statically determine whether they are used. + */ +goog.DEBUG = true; + + +/** + * @define {string} LOCALE defines the locale being used for compilation. It is + * used to select locale specific data to be compiled in js binary. BUILD rule + * can specify this value by "--define goog.LOCALE=" as JSCompiler + * option. + * + * Take into account that the locale code format is important. You should use + * the canonical Unicode format with hyphen as a delimiter. Language must be + * lowercase, Language Script - Capitalized, Region - UPPERCASE. + * There are few examples: pt-BR, en, en-US, sr-Latin-BO, zh-Hans-CN. + * + * See more info about locale codes here: + * http://www.unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers + * + * For language codes you should use values defined by ISO 693-1. See it here + * http://www.w3.org/WAI/ER/IG/ert/iso639.htm. There is only one exception from + * this rule: the Hebrew language. For legacy reasons the old code (iw) should + * be used instead of the new code (he), see http://wiki/Main/IIISynonyms. + */ +goog.LOCALE = 'en'; // default to en + + +/** + * @define {boolean} Whether this code is running on trusted sites. + * + * On untrusted sites, several native functions can be defined or overridden by + * external libraries like Prototype, Datejs, and JQuery and setting this flag + * to false forces closure to use its own implementations when possible. + * + * If your javascript can be loaded by a third party site and you are wary about + * relying on non-standard implementations, specify + * "--define goog.TRUSTED_SITE=false" to the JSCompiler. + */ +goog.TRUSTED_SITE = true; + + +/** + * Creates object stubs for a namespace. The presence of one or more + * goog.provide() calls indicate that the file defines the given + * objects/namespaces. Build tools also scan for provide/require statements + * to discern dependencies, build dependency files (see deps.js), etc. + * @see goog.require + * @param {string} name Namespace provided by this file in the form + * "goog.package.part". + */ +goog.provide = function(name) { + if (!COMPILED) { + // Ensure that the same namespace isn't provided twice. This is intended + // to teach new developers that 'goog.provide' is effectively a variable + // declaration. And when JSCompiler transforms goog.provide into a real + // variable declaration, the compiled JS should work the same as the raw + // JS--even when the raw JS uses goog.provide incorrectly. + if (goog.isProvided_(name)) { + throw Error('Namespace "' + name + '" already declared.'); + } + delete goog.implicitNamespaces_[name]; + + var namespace = name; + while ((namespace = namespace.substring(0, namespace.lastIndexOf('.')))) { + if (goog.getObjectByName(namespace)) { + break; + } + goog.implicitNamespaces_[namespace] = true; + } + } + + goog.exportPath_(name); +}; + + +/** + * Marks that the current file should only be used for testing, and never for + * live code in production. + * @param {string=} opt_message Optional message to add to the error that's + * raised when used in production code. + */ +goog.setTestOnly = function(opt_message) { + if (COMPILED && !goog.DEBUG) { + opt_message = opt_message || ''; + throw Error('Importing test-only code into non-debug environment' + + opt_message ? ': ' + opt_message : '.'); + } +}; + + +if (!COMPILED) { + + /** + * Check if the given name has been goog.provided. This will return false for + * names that are available only as implicit namespaces. + * @param {string} name name of the object to look for. + * @return {boolean} Whether the name has been provided. + * @private + */ + goog.isProvided_ = function(name) { + return !goog.implicitNamespaces_[name] && !!goog.getObjectByName(name); + }; + + /** + * Namespaces implicitly defined by goog.provide. For example, + * goog.provide('goog.events.Event') implicitly declares + * that 'goog' and 'goog.events' must be namespaces. + * + * @type {Object} + * @private + */ + goog.implicitNamespaces_ = {}; +} + + +/** + * Builds an object structure for the provided namespace path, + * ensuring that names that already exist are not overwritten. For + * example: + * "a.b.c" -> a = {};a.b={};a.b.c={}; + * Used by goog.provide and goog.exportSymbol. + * @param {string} name name of the object that this file defines. + * @param {*=} opt_object the object to expose at the end of the path. + * @param {Object=} opt_objectToExportTo The object to add the path to; default + * is |goog.global|. + * @private + */ +goog.exportPath_ = function(name, opt_object, opt_objectToExportTo) { + var parts = name.split('.'); + var cur = opt_objectToExportTo || goog.global; + + // Internet Explorer exhibits strange behavior when throwing errors from + // methods externed in this manner. See the testExportSymbolExceptions in + // base_test.html for an example. + if (!(parts[0] in cur) && cur.execScript) { + cur.execScript('var ' + parts[0]); + } + + // Certain browsers cannot parse code in the form for((a in b); c;); + // This pattern is produced by the JSCompiler when it collapses the + // statement above into the conditional loop below. To prevent this from + // happening, use a for-loop and reserve the init logic as below. + + // Parentheses added to eliminate strict JS warning in Firefox. + for (var part; parts.length && (part = parts.shift());) { + if (!parts.length && goog.isDef(opt_object)) { + // last part and we have an object; use it + cur[part] = opt_object; + } else if (cur[part]) { + cur = cur[part]; + } else { + cur = cur[part] = {}; + } + } +}; + + +/** + * Returns an object based on its fully qualified external name. If you are + * using a compilation pass that renames property names beware that using this + * function will not find renamed properties. + * + * @param {string} name The fully qualified name. + * @param {Object=} opt_obj The object within which to look; default is + * |goog.global|. + * @return {?} The value (object or primitive) or, if not found, null. + */ +goog.getObjectByName = function(name, opt_obj) { + var parts = name.split('.'); + var cur = opt_obj || goog.global; + for (var part; part = parts.shift(); ) { + if (goog.isDefAndNotNull(cur[part])) { + cur = cur[part]; + } else { + return null; + } + } + return cur; +}; + + +/** + * Globalizes a whole namespace, such as goog or goog.lang. + * + * @param {Object} obj The namespace to globalize. + * @param {Object=} opt_global The object to add the properties to. + * @deprecated Properties may be explicitly exported to the global scope, but + * this should no longer be done in bulk. + */ +goog.globalize = function(obj, opt_global) { + var global = opt_global || goog.global; + for (var x in obj) { + global[x] = obj[x]; + } +}; + + +/** + * Adds a dependency from a file to the files it requires. + * @param {string} relPath The path to the js file. + * @param {Array} provides An array of strings with the names of the objects + * this file provides. + * @param {Array} requires An array of strings with the names of the objects + * this file requires. + */ +goog.addDependency = function(relPath, provides, requires) { + if (!COMPILED) { + var provide, require; + var path = relPath.replace(/\\/g, '/'); + var deps = goog.dependencies_; + for (var i = 0; provide = provides[i]; i++) { + deps.nameToPath[provide] = path; + if (!(path in deps.pathToNames)) { + deps.pathToNames[path] = {}; + } + deps.pathToNames[path][provide] = true; + } + for (var j = 0; require = requires[j]; j++) { + if (!(path in deps.requires)) { + deps.requires[path] = {}; + } + deps.requires[path][require] = true; + } + } +}; + + + + +// NOTE(nnaze): The debug DOM loader was included in base.js as an orignal +// way to do "debug-mode" development. The dependency system can sometimes +// be confusing, as can the debug DOM loader's asyncronous nature. +// +// With the DOM loader, a call to goog.require() is not blocking -- the +// script will not load until some point after the current script. If a +// namespace is needed at runtime, it needs to be defined in a previous +// script, or loaded via require() with its registered dependencies. +// User-defined namespaces may need their own deps file. See http://go/js_deps, +// http://go/genjsdeps, or, externally, DepsWriter. +// http://code.google.com/closure/library/docs/depswriter.html +// +// Because of legacy clients, the DOM loader can't be easily removed from +// base.js. Work is being done to make it disableable or replaceable for +// different environments (DOM-less JavaScript interpreters like Rhino or V8, +// for example). See bootstrap/ for more information. + + +/** + * @define {boolean} Whether to enable the debug loader. + * + * If enabled, a call to goog.require() will attempt to load the namespace by + * appending a script tag to the DOM (if the namespace has been registered). + * + * If disabled, goog.require() will simply assert that the namespace has been + * provided (and depend on the fact that some outside tool correctly ordered + * the script). + */ +goog.ENABLE_DEBUG_LOADER = true; + + +/** + * Implements a system for the dynamic resolution of dependencies + * that works in parallel with the BUILD system. Note that all calls + * to goog.require will be stripped by the JSCompiler when the + * --closure_pass option is used. + * @see goog.provide + * @param {string} name Namespace to include (as was given in goog.provide()) + * in the form "goog.package.part". + */ +goog.require = function(name) { + + // if the object already exists we do not need do do anything + // TODO(arv): If we start to support require based on file name this has + // to change + // TODO(arv): If we allow goog.foo.* this has to change + // TODO(arv): If we implement dynamic load after page load we should probably + // not remove this code for the compiled output + if (!COMPILED) { + if (goog.isProvided_(name)) { + return; + } + + if (goog.ENABLE_DEBUG_LOADER) { + var path = goog.getPathFromDeps_(name); + if (path) { + goog.included_[path] = true; + goog.writeScripts_(); + return; + } + } + + var errorMessage = 'goog.require could not find: ' + name; + if (goog.global.console) { + goog.global.console['error'](errorMessage); + } + + + throw Error(errorMessage); + + } +}; + + +/** + * Path for included scripts + * @type {string} + */ +goog.basePath = ''; + + +/** + * A hook for overriding the base path. + * @type {string|undefined} + */ +goog.global.CLOSURE_BASE_PATH; + + +/** + * Whether to write out Closure's deps file. By default, + * the deps are written. + * @type {boolean|undefined} + */ +goog.global.CLOSURE_NO_DEPS; + + +/** + * A function to import a single script. This is meant to be overridden when + * Closure is being run in non-HTML contexts, such as web workers. It's defined + * in the global scope so that it can be set before base.js is loaded, which + * allows deps.js to be imported properly. + * + * The function is passed the script source, which is a relative URI. It should + * return true if the script was imported, false otherwise. + */ +goog.global.CLOSURE_IMPORT_SCRIPT; + + +/** + * Null function used for default values of callbacks, etc. + * @return {void} Nothing. + */ +goog.nullFunction = function() {}; + + +/** + * The identity function. Returns its first argument. + * + * @param {*=} opt_returnValue The single value that will be returned. + * @param {...*} var_args Optional trailing arguments. These are ignored. + * @return {?} The first argument. We can't know the type -- just pass it along + * without type. + * @deprecated Use goog.functions.identity instead. + */ +goog.identityFunction = function(opt_returnValue, var_args) { + return opt_returnValue; +}; + + +/** + * When defining a class Foo with an abstract method bar(), you can do: + * + * Foo.prototype.bar = goog.abstractMethod + * + * Now if a subclass of Foo fails to override bar(), an error + * will be thrown when bar() is invoked. + * + * Note: This does not take the name of the function to override as + * an argument because that would make it more difficult to obfuscate + * our JavaScript code. + * + * @type {!Function} + * @throws {Error} when invoked to indicate the method should be + * overridden. + */ +goog.abstractMethod = function() { + throw Error('unimplemented abstract method'); +}; + + +/** + * Adds a {@code getInstance} static method that always return the same instance + * object. + * @param {!Function} ctor The constructor for the class to add the static + * method to. + */ +goog.addSingletonGetter = function(ctor) { + ctor.getInstance = function() { + if (ctor.instance_) { + return ctor.instance_; + } + if (goog.DEBUG) { + // NOTE: JSCompiler can't optimize away Array#push. + goog.instantiatedSingletons_[goog.instantiatedSingletons_.length] = ctor; + } + return ctor.instance_ = new ctor; + }; +}; + + +/** + * All singleton classes that have been instantiated, for testing. Don't read + * it directly, use the {@code goog.testing.singleton} module. The compiler + * removes this variable if unused. + * @type {!Array.} + * @private + */ +goog.instantiatedSingletons_ = []; + + +if (!COMPILED && goog.ENABLE_DEBUG_LOADER) { + /** + * Object used to keep track of urls that have already been added. This + * record allows the prevention of circular dependencies. + * @type {Object} + * @private + */ + goog.included_ = {}; + + + /** + * This object is used to keep track of dependencies and other data that is + * used for loading scripts + * @private + * @type {Object} + */ + goog.dependencies_ = { + pathToNames: {}, // 1 to many + nameToPath: {}, // 1 to 1 + requires: {}, // 1 to many + // used when resolving dependencies to prevent us from + // visiting the file twice + visited: {}, + written: {} // used to keep track of script files we have written + }; + + + /** + * Tries to detect whether is in the context of an HTML document. + * @return {boolean} True if it looks like HTML document. + * @private + */ + goog.inHtmlDocument_ = function() { + var doc = goog.global.document; + return typeof doc != 'undefined' && + 'write' in doc; // XULDocument misses write. + }; + + + /** + * Tries to detect the base path of the base.js script that bootstraps Closure + * @private + */ + goog.findBasePath_ = function() { + if (goog.global.CLOSURE_BASE_PATH) { + goog.basePath = goog.global.CLOSURE_BASE_PATH; + return; + } else if (!goog.inHtmlDocument_()) { + return; + } + var doc = goog.global.document; + var scripts = doc.getElementsByTagName('script'); + // Search backwards since the current script is in almost all cases the one + // that has base.js. + for (var i = scripts.length - 1; i >= 0; --i) { + var src = scripts[i].src; + var qmark = src.lastIndexOf('?'); + var l = qmark == -1 ? src.length : qmark; + if (src.substr(l - 7, 7) == 'base.js') { + goog.basePath = src.substr(0, l - 7); + return; + } + } + }; + + + /** + * Imports a script if, and only if, that script hasn't already been imported. + * (Must be called at execution time) + * @param {string} src Script source. + * @private + */ + goog.importScript_ = function(src) { + var importScript = goog.global.CLOSURE_IMPORT_SCRIPT || + goog.writeScriptTag_; + if (!goog.dependencies_.written[src] && importScript(src)) { + goog.dependencies_.written[src] = true; + } + }; + + + /** + * The default implementation of the import function. Writes a script tag to + * import the script. + * + * @param {string} src The script source. + * @return {boolean} True if the script was imported, false otherwise. + * @private + */ + goog.writeScriptTag_ = function(src) { + if (goog.inHtmlDocument_()) { + var doc = goog.global.document; + + // If the user tries to require a new symbol after document load, + // something has gone terribly wrong. Doing a document.write would + // wipe out the page. + if (doc.readyState == 'complete') { + // Certain test frameworks load base.js multiple times, which tries + // to write deps.js each time. If that happens, just fail silently. + // These frameworks wipe the page between each load of base.js, so this + // is OK. + var isDeps = /\bdeps.js$/.test(src); + if (isDeps) { + return false; + } else { + throw Error('Cannot write "' + src + '" after document load'); + } + } + + doc.write( + ' + + - - From 4a8927f0e3a290828ae67155af02d3c28b286b40 Mon Sep 17 00:00:00 2001 From: wing328 Date: Thu, 4 Feb 2016 14:14:25 +0800 Subject: [PATCH 057/189] update pom to use swagger parser 1.0.17 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c9bee1d02a0..e1fa06befaa 100644 --- a/pom.xml +++ b/pom.xml @@ -533,7 +533,7 @@ - 1.0.17-SNAPSHOT + 1.0.17 2.11.1 2.3.4 1.5.6 From 47f25efb255d4b55c6f7a7cea3d3f28e230c9ad7 Mon Sep 17 00:00:00 2001 From: xhh Date: Thu, 4 Feb 2016 16:30:41 +0800 Subject: [PATCH 058/189] JavaScript client: support collectionFormat for parameters Closes #1953 --- .../resources/Javascript/ApiClient.mustache | 27 ++++++++++++++++ .../main/resources/Javascript/api.mustache | 4 +-- .../petstore/javascript/src/ApiClient.js | 27 ++++++++++++++++ .../petstore/javascript/src/api/PetApi.js | 4 +-- .../petstore/javascript/test/ApiClientTest.js | 32 +++++++++++++++++++ 5 files changed, 90 insertions(+), 4 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache index 222ade010a7..b301da5c301 100644 --- a/modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache +++ b/modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache @@ -31,6 +31,8 @@ if (param == null) { // return empty string for null and undefined return ''; + } else if (param instanceof Date) { + return param.toJSON(); } else { return param.toString(); } @@ -131,6 +133,31 @@ return newParams; }; + /** + * Build parameter value according to the given collection format. + * @param {String} collectionFormat one of 'csv', 'ssv', 'tsv', 'pipes' and 'multi' + */ + ApiClient.prototype.buildCollectionParam = function buildCollectionParam(param, collectionFormat) { + if (param == null) { + return null; + } + switch (collectionFormat) { + case 'csv': + return param.map(this.paramToString).join(','); + case 'ssv': + return param.map(this.paramToString).join(' '); + case 'tsv': + return param.map(this.paramToString).join('\t'); + case 'pipes': + return param.map(this.paramToString).join('|'); + case 'multi': + // return the array directly as Superagent will handle it as expected + return param.map(this.paramToString); + default: + throw new Error('Unknown collection format: ' + collectionFormat); + } + }; + ApiClient.prototype.deserialize = function deserialize(response, returnType) { if (response == null || returnType == null) { return null; diff --git a/modules/swagger-codegen/src/main/resources/Javascript/api.mustache b/modules/swagger-codegen/src/main/resources/Javascript/api.mustache index f60c421eda7..57c3192400f 100644 --- a/modules/swagger-codegen/src/main/resources/Javascript/api.mustache +++ b/modules/swagger-codegen/src/main/resources/Javascript/api.mustache @@ -42,13 +42,13 @@ '': <#hasMore>, }; var queryParams = {<#queryParams> - '': <#hasMore>, + '': <#collectionFormat>this.buildCollectionParam(, '')<^collectionFormat><#hasMore>, }; var headerParams = {<#headerParams> '': <#hasMore>, }; var formParams = {<#formParams> - '': <#hasMore>, + '': <#collectionFormat>this.buildCollectionParam(, '')<^collectionFormat><#hasMore>, }; var contentTypes = [<#consumes>''<#hasMore>, ]; diff --git a/samples/client/petstore/javascript/src/ApiClient.js b/samples/client/petstore/javascript/src/ApiClient.js index 17b271bc5ec..9968b2dfc88 100644 --- a/samples/client/petstore/javascript/src/ApiClient.js +++ b/samples/client/petstore/javascript/src/ApiClient.js @@ -31,6 +31,8 @@ if (param == null) { // return empty string for null and undefined return ''; + } else if (param instanceof Date) { + return param.toJSON(); } else { return param.toString(); } @@ -131,6 +133,31 @@ return newParams; }; + /** + * Build parameter value according to the given collection format. + * @param {String} collectionFormat one of 'csv', 'ssv', 'tsv', 'pipes' and 'multi' + */ + ApiClient.prototype.buildCollectionParam = function buildCollectionParam(param, collectionFormat) { + if (param == null) { + return null; + } + switch (collectionFormat) { + case 'csv': + return param.map(this.paramToString).join(','); + case 'ssv': + return param.map(this.paramToString).join(' '); + case 'tsv': + return param.map(this.paramToString).join('\t'); + case 'pipes': + return param.map(this.paramToString).join('|'); + case 'multi': + // return the array directly as Superagent will handle it as expected + return param.map(this.paramToString); + default: + throw new Error('Unknown collection format: ' + collectionFormat); + } + }; + ApiClient.prototype.deserialize = function deserialize(response, returnType) { if (response == null || returnType == null) { return null; diff --git a/samples/client/petstore/javascript/src/api/PetApi.js b/samples/client/petstore/javascript/src/api/PetApi.js index 227ab40acc9..91e330eab92 100644 --- a/samples/client/petstore/javascript/src/api/PetApi.js +++ b/samples/client/petstore/javascript/src/api/PetApi.js @@ -100,7 +100,7 @@ var pathParams = { }; var queryParams = { - 'status': status + 'status': this.buildCollectionParam(status, 'multi') }; var headerParams = { }; @@ -134,7 +134,7 @@ var pathParams = { }; var queryParams = { - 'tags': tags + 'tags': this.buildCollectionParam(tags, 'multi') }; var headerParams = { }; diff --git a/samples/client/petstore/javascript/test/ApiClientTest.js b/samples/client/petstore/javascript/test/ApiClientTest.js index daae849bcf1..a7714e6a593 100644 --- a/samples/client/petstore/javascript/test/ApiClientTest.js +++ b/samples/client/petstore/javascript/test/ApiClientTest.js @@ -36,6 +36,38 @@ describe('ApiClient', function() { }); }); + describe('#buildCollectionParam', function() { + var param; + + beforeEach(function() { + param = ['aa', 'bb', 123]; + }); + + it('works for csv', function() { + expect(apiClient.buildCollectionParam(param, 'csv')).to.be('aa,bb,123'); + }); + + it('works for ssv', function() { + expect(apiClient.buildCollectionParam(param, 'ssv')).to.be('aa bb 123'); + }); + + it('works for tsv', function() { + expect(apiClient.buildCollectionParam(param, 'tsv')).to.be('aa\tbb\t123'); + }); + + it('works for pipes', function() { + expect(apiClient.buildCollectionParam(param, 'pipes')).to.be('aa|bb|123'); + }); + + it('works for multi', function() { + expect(apiClient.buildCollectionParam(param, 'multi')).to.eql(['aa', 'bb', '123']); + }); + + it('fails for invalid collection format', function() { + expect(function() { apiClient.buildCollectionParam(param, 'INVALID'); }).to.throwError(); + }); + }); + describe('#buildUrl', function() { it('should work without path parameters in the path', function() { expect(apiClient.buildUrl('/abc', {})).to From 246369ccdd441f1fc1e4207891158a93b1fa8439 Mon Sep 17 00:00:00 2001 From: wing328 Date: Thu, 4 Feb 2016 15:35:05 +0800 Subject: [PATCH 059/189] update csharp help, fix default header --- .../src/main/java/io/swagger/codegen/CodegenConstants.java | 4 ++-- .../swagger-codegen/src/main/resources/csharp/api.mustache | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConstants.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConstants.java index ce0b9ea2d89..f0d3591ba3f 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConstants.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConstants.java @@ -60,7 +60,7 @@ public class CodegenConstants { public static final String OPTIONAL_METHOD_ARGUMENT_DESC = "Optional method argument, e.g. void square(int x=10) (.net 4.0+ only)."; public static final String OPTIONAL_ASSEMBLY_INFO = "optionalAssemblyInfo"; - public static final String OPTIONAL_ASSEMBLY_INFO_DESC = "Generate AssemblyInfo.cs (Default: true)."; + public static final String OPTIONAL_ASSEMBLY_INFO_DESC = "Generate AssemblyInfo.cs."; public static final String USE_COLLECTION = "useCollection"; public static final String USE_COLLECTION_DESC = "Deserialize array types to Collection instead of List."; @@ -69,7 +69,7 @@ public class CodegenConstants { public static final String RETURN_ICOLLECTION_DESC = "Return ICollection instead of the concrete type."; public static final String OPTIONAL_PROJECT_FILE = "optionalProjectFile"; - public static final String OPTIONAL_PROJECT_FILE_DESC = "Generate {PackageName}.csproj (Default: false)."; + public static final String OPTIONAL_PROJECT_FILE_DESC = "Generate {PackageName}.csproj."; public static final String OPTIONAL_PROJECT_GUID = "packageGuid"; public static final String OPTIONAL_PROJECT_GUID_DESC = "The GUID that will be associated with the C# project"; diff --git a/modules/swagger-codegen/src/main/resources/csharp/api.mustache b/modules/swagger-codegen/src/main/resources/csharp/api.mustache index e4e1ba7aa90..b1a6a321c56 100644 --- a/modules/swagger-codegen/src/main/resources/csharp/api.mustache +++ b/modules/swagger-codegen/src/main/resources/csharp/api.mustache @@ -273,7 +273,7 @@ namespace {{packageName}}.Api var pathParams = new Dictionary(); var queryParams = new Dictionary(); - var headerParams = new Dictionary(); + var headerParams = new Dictionary(Configuration.DefaultHeader); var formParams = new Dictionary(); var fileParams = new Dictionary(); Object postBody = null; From 5e1cb9349a2939b99fb5aa6e068260a9c2d8ffbd Mon Sep 17 00:00:00 2001 From: wing328 Date: Thu, 4 Feb 2016 16:39:51 +0800 Subject: [PATCH 060/189] update exmaple, add toExampleValue --- .../io/swagger/codegen/DefaultCodegen.java | 47 ++++++++++++++++++- .../languages/CSharpClientCodegen.java | 47 +++++++++++++++++++ .../src/main/csharp/IO/Swagger/Api/PetApi.cs | 20 ++++---- .../main/csharp/IO/Swagger/Api/StoreApi.cs | 8 ++-- .../src/main/csharp/IO/Swagger/Api/UserApi.cs | 16 +++---- 5 files changed, 115 insertions(+), 23 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java index a66ef6db810..45d10c5121f 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java @@ -585,6 +585,51 @@ public class DefaultCodegen { } } + /** + * Return the example value of the property + * + * @param p Swagger property object + * @return string presentation of the example value of the property + */ + @SuppressWarnings("static-method") + public String toExampleValue(Property p) { + if (p instanceof StringProperty) { + return "null"; + } else if (p instanceof BooleanProperty) { + return "null"; + } else if (p instanceof DateProperty) { + return "null"; + } else if (p instanceof DateTimeProperty) { + return "null"; + } else if (p instanceof DoubleProperty) { + DoubleProperty dp = (DoubleProperty) p; + if (dp.getExample() != null) { + return dp.getExample().toString(); + } + return "null"; + } else if (p instanceof FloatProperty) { + FloatProperty dp = (FloatProperty) p; + if (dp.getExample() != null) { + return dp.getExample().toString(); + } + return "null"; + } else if (p instanceof IntegerProperty) { + IntegerProperty dp = (IntegerProperty) p; + if (dp.getExample() != null) { + return dp.getExample().toString(); + } + return "null"; + } else if (p instanceof LongProperty) { + LongProperty dp = (LongProperty) p; + if (dp.getExample() != null) { + return dp.getExample().toString(); + } + return "null"; + } else { + return "null"; + } + } + /** * Return the default value of the property * @@ -927,7 +972,7 @@ public class DefaultCodegen { property.unescapedDescription = p.getDescription(); property.getter = "get" + getterAndSetterCapitalize(name); property.setter = "set" + getterAndSetterCapitalize(name); - property.example = p.getExample(); + property.example = toExampleValue(p); property.defaultValue = toDefaultValue(p); property.defaultValueWithParam = toDefaultValueWithParam(name, p); property.jsonSchema = Json.pretty(p); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java index 07252e685f0..318d44f908b 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java @@ -552,4 +552,51 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig return null; } + + /** + * Return the example value of the property + * + * @param p Swagger property object + * @return string presentation of the example value of the property + */ + @Override + public String toExampleValue(Property p) { + if (p instanceof StringProperty) { + StringProperty dp = (StringProperty) p; + if (dp.getExample() != null) { + return "\"" + dp.getExample().toString() + "\""; + } + } else if (p instanceof BooleanProperty) { + BooleanProperty dp = (BooleanProperty) p; + if (dp.getExample() != null) { + return dp.getExample().toString(); + } + } else if (p instanceof DateProperty) { + // TODO + } else if (p instanceof DateTimeProperty) { + // TODO + } else if (p instanceof DoubleProperty) { + DoubleProperty dp = (DoubleProperty) p; + if (dp.getExample() != null) { + return dp.getExample().toString(); + } + } else if (p instanceof FloatProperty) { + FloatProperty dp = (FloatProperty) p; + if (dp.getExample() != null) { + return dp.getExample().toString(); + } + } else if (p instanceof IntegerProperty) { + IntegerProperty dp = (IntegerProperty) p; + if (dp.getExample() != null) { + return dp.getExample().toString(); + } + } else if (p instanceof LongProperty) { + LongProperty dp = (LongProperty) p; + if (dp.getExample() != null) { + return dp.getExample().toString(); + } + } + + return null; + } } diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/PetApi.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/PetApi.cs index fa1479f5093..96f6b3a4d0f 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/PetApi.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/PetApi.cs @@ -623,7 +623,7 @@ namespace IO.Swagger.Api var pathParams = new Dictionary(); var queryParams = new Dictionary(); - var headerParams = new Dictionary(); + var headerParams = new Dictionary(Configuration.DefaultHeader); var formParams = new Dictionary(); var fileParams = new Dictionary(); Object postBody = null; @@ -789,7 +789,7 @@ namespace IO.Swagger.Api var pathParams = new Dictionary(); var queryParams = new Dictionary(); - var headerParams = new Dictionary(); + var headerParams = new Dictionary(Configuration.DefaultHeader); var formParams = new Dictionary(); var fileParams = new Dictionary(); Object postBody = null; @@ -951,7 +951,7 @@ namespace IO.Swagger.Api var pathParams = new Dictionary(); var queryParams = new Dictionary(); - var headerParams = new Dictionary(); + var headerParams = new Dictionary(Configuration.DefaultHeader); var formParams = new Dictionary(); var fileParams = new Dictionary(); Object postBody = null; @@ -1113,7 +1113,7 @@ namespace IO.Swagger.Api var pathParams = new Dictionary(); var queryParams = new Dictionary(); - var headerParams = new Dictionary(); + var headerParams = new Dictionary(Configuration.DefaultHeader); var formParams = new Dictionary(); var fileParams = new Dictionary(); Object postBody = null; @@ -1281,7 +1281,7 @@ namespace IO.Swagger.Api var pathParams = new Dictionary(); var queryParams = new Dictionary(); - var headerParams = new Dictionary(); + var headerParams = new Dictionary(Configuration.DefaultHeader); var formParams = new Dictionary(); var fileParams = new Dictionary(); Object postBody = null; @@ -1457,7 +1457,7 @@ namespace IO.Swagger.Api var pathParams = new Dictionary(); var queryParams = new Dictionary(); - var headerParams = new Dictionary(); + var headerParams = new Dictionary(Configuration.DefaultHeader); var formParams = new Dictionary(); var fileParams = new Dictionary(); Object postBody = null; @@ -1630,7 +1630,7 @@ namespace IO.Swagger.Api var pathParams = new Dictionary(); var queryParams = new Dictionary(); - var headerParams = new Dictionary(); + var headerParams = new Dictionary(Configuration.DefaultHeader); var formParams = new Dictionary(); var fileParams = new Dictionary(); Object postBody = null; @@ -1807,7 +1807,7 @@ namespace IO.Swagger.Api var pathParams = new Dictionary(); var queryParams = new Dictionary(); - var headerParams = new Dictionary(); + var headerParams = new Dictionary(Configuration.DefaultHeader); var formParams = new Dictionary(); var fileParams = new Dictionary(); Object postBody = null; @@ -1977,7 +1977,7 @@ namespace IO.Swagger.Api var pathParams = new Dictionary(); var queryParams = new Dictionary(); - var headerParams = new Dictionary(); + var headerParams = new Dictionary(Configuration.DefaultHeader); var formParams = new Dictionary(); var fileParams = new Dictionary(); Object postBody = null; @@ -2143,7 +2143,7 @@ namespace IO.Swagger.Api var pathParams = new Dictionary(); var queryParams = new Dictionary(); - var headerParams = new Dictionary(); + var headerParams = new Dictionary(Configuration.DefaultHeader); var formParams = new Dictionary(); var fileParams = new Dictionary(); Object postBody = null; diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/StoreApi.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/StoreApi.cs index 69499f4fd9b..ca876a043db 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/StoreApi.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/StoreApi.cs @@ -350,7 +350,7 @@ namespace IO.Swagger.Api var pathParams = new Dictionary(); var queryParams = new Dictionary(); - var headerParams = new Dictionary(); + var headerParams = new Dictionary(Configuration.DefaultHeader); var formParams = new Dictionary(); var fileParams = new Dictionary(); Object postBody = null; @@ -510,7 +510,7 @@ namespace IO.Swagger.Api var pathParams = new Dictionary(); var queryParams = new Dictionary(); - var headerParams = new Dictionary(); + var headerParams = new Dictionary(Configuration.DefaultHeader); var formParams = new Dictionary(); var fileParams = new Dictionary(); Object postBody = null; @@ -663,7 +663,7 @@ namespace IO.Swagger.Api var pathParams = new Dictionary(); var queryParams = new Dictionary(); - var headerParams = new Dictionary(); + var headerParams = new Dictionary(Configuration.DefaultHeader); var formParams = new Dictionary(); var fileParams = new Dictionary(); Object postBody = null; @@ -814,7 +814,7 @@ namespace IO.Swagger.Api var pathParams = new Dictionary(); var queryParams = new Dictionary(); - var headerParams = new Dictionary(); + var headerParams = new Dictionary(Configuration.DefaultHeader); var formParams = new Dictionary(); var fileParams = new Dictionary(); Object postBody = null; diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/UserApi.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/UserApi.cs index 0c178a5637d..168ce373ef9 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/UserApi.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/UserApi.cs @@ -520,7 +520,7 @@ namespace IO.Swagger.Api var pathParams = new Dictionary(); var queryParams = new Dictionary(); - var headerParams = new Dictionary(); + var headerParams = new Dictionary(Configuration.DefaultHeader); var formParams = new Dictionary(); var fileParams = new Dictionary(); Object postBody = null; @@ -671,7 +671,7 @@ namespace IO.Swagger.Api var pathParams = new Dictionary(); var queryParams = new Dictionary(); - var headerParams = new Dictionary(); + var headerParams = new Dictionary(Configuration.DefaultHeader); var formParams = new Dictionary(); var fileParams = new Dictionary(); Object postBody = null; @@ -822,7 +822,7 @@ namespace IO.Swagger.Api var pathParams = new Dictionary(); var queryParams = new Dictionary(); - var headerParams = new Dictionary(); + var headerParams = new Dictionary(Configuration.DefaultHeader); var formParams = new Dictionary(); var fileParams = new Dictionary(); Object postBody = null; @@ -974,7 +974,7 @@ namespace IO.Swagger.Api var pathParams = new Dictionary(); var queryParams = new Dictionary(); - var headerParams = new Dictionary(); + var headerParams = new Dictionary(Configuration.DefaultHeader); var formParams = new Dictionary(); var fileParams = new Dictionary(); Object postBody = null; @@ -1115,7 +1115,7 @@ namespace IO.Swagger.Api var pathParams = new Dictionary(); var queryParams = new Dictionary(); - var headerParams = new Dictionary(); + var headerParams = new Dictionary(Configuration.DefaultHeader); var formParams = new Dictionary(); var fileParams = new Dictionary(); Object postBody = null; @@ -1267,7 +1267,7 @@ namespace IO.Swagger.Api var pathParams = new Dictionary(); var queryParams = new Dictionary(); - var headerParams = new Dictionary(); + var headerParams = new Dictionary(Configuration.DefaultHeader); var formParams = new Dictionary(); var fileParams = new Dictionary(); Object postBody = null; @@ -1429,7 +1429,7 @@ namespace IO.Swagger.Api var pathParams = new Dictionary(); var queryParams = new Dictionary(); - var headerParams = new Dictionary(); + var headerParams = new Dictionary(Configuration.DefaultHeader); var formParams = new Dictionary(); var fileParams = new Dictionary(); Object postBody = null; @@ -1581,7 +1581,7 @@ namespace IO.Swagger.Api var pathParams = new Dictionary(); var queryParams = new Dictionary(); - var headerParams = new Dictionary(); + var headerParams = new Dictionary(Configuration.DefaultHeader); var formParams = new Dictionary(); var fileParams = new Dictionary(); Object postBody = null; From 87253d85338075ad09e5f9629c71269bf638a7ba Mon Sep 17 00:00:00 2001 From: wing328 Date: Thu, 4 Feb 2016 18:09:20 +0800 Subject: [PATCH 061/189] update sh permission, add aspnet5 bat --- bin/aspnet5-petstore-server.sh | 0 bin/go-petstore.sh | 0 bin/windows/aspnet5-petstore-server.bat | 2 +- bin/windows/go-petstore.bat | 0 4 files changed, 1 insertion(+), 1 deletion(-) mode change 100644 => 100755 bin/aspnet5-petstore-server.sh mode change 100644 => 100755 bin/go-petstore.sh mode change 100644 => 100755 bin/windows/aspnet5-petstore-server.bat mode change 100644 => 100755 bin/windows/go-petstore.bat diff --git a/bin/aspnet5-petstore-server.sh b/bin/aspnet5-petstore-server.sh old mode 100644 new mode 100755 diff --git a/bin/go-petstore.sh b/bin/go-petstore.sh old mode 100644 new mode 100755 diff --git a/bin/windows/aspnet5-petstore-server.bat b/bin/windows/aspnet5-petstore-server.bat old mode 100644 new mode 100755 index b71809f7006..e14731fb0ef --- a/bin/windows/aspnet5-petstore-server.bat +++ b/bin/windows/aspnet5-petstore-server.bat @@ -5,6 +5,6 @@ If Not Exist %executable% ( ) set JAVA_OPTS=%JAVA_OPTS% -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties -set ags=generate -t modules\swagger-codegen\src\main\resources\aspnet5 -i modules\swagger-codegen\src\test\resources\2_0\petstore.json -l aspnet5 -o samples\server\petstore\aspnet5 +set ags=generate -t modules\swagger-codegen\src\main\resources\aspnet5 -i modules\swagger-codegen\src\test\resources\2_0\petstore.json -l aspnet5 -o samples\client\petstore\aspnet5\ java %JAVA_OPTS% -jar %executable% %ags% diff --git a/bin/windows/go-petstore.bat b/bin/windows/go-petstore.bat old mode 100644 new mode 100755 From 8d40b7a890061e73d5fb08dbed8d1a9d992f37a4 Mon Sep 17 00:00:00 2001 From: wing328 Date: Thu, 4 Feb 2016 18:52:16 +0800 Subject: [PATCH 062/189] sanitize model name (C#) --- .../java/io/swagger/codegen/languages/AspNet5ServerCodegen.java | 2 ++ .../java/io/swagger/codegen/languages/CSharpClientCodegen.java | 2 ++ .../swagger/codegen/languages/CsharpDotNet2ClientCodegen.java | 2 ++ .../csharp/SwaggerClientTest/SwaggerClientTest.userprefs | 2 +- 4 files changed, 7 insertions(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AspNet5ServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AspNet5ServerCodegen.java index 25ed44826ea..b6339ee11c6 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AspNet5ServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AspNet5ServerCodegen.java @@ -311,6 +311,8 @@ public class AspNet5ServerCodegen extends DefaultCodegen implements CodegenConfi // TODO: Create a base C# abstract type to avoid duplication of language functionality @Override public String toModelName(String name) { + name = sanitizeName(name); + // model name cannot use reserved keyword, e.g. return if (reservedWords.contains(name)) { throw new RuntimeException(name + " (reserved word) cannot be used as a model name"); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java index 318d44f908b..1d6a40831b0 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java @@ -339,6 +339,8 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig @Override public String toModelName(String name) { + name = sanitizeName(name); + // model name cannot use reserved keyword, e.g. return if (reservedWords.contains(name)) { throw new RuntimeException(name + " (reserved word) cannot be used as a model name"); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CsharpDotNet2ClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CsharpDotNet2ClientCodegen.java index d3d249bfcd2..7b8dc68d1c3 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CsharpDotNet2ClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CsharpDotNet2ClientCodegen.java @@ -215,6 +215,8 @@ public class CsharpDotNet2ClientCodegen extends DefaultCodegen implements Codege @Override public String toModelName(String name) { + name = sanitizeName(name); + // model name cannot use reserved keyword, e.g. return if (reservedWords.contains(name)) { throw new RuntimeException(name + " (reserved word) cannot be used as a model name"); diff --git a/samples/client/petstore/csharp/SwaggerClientTest/SwaggerClientTest.userprefs b/samples/client/petstore/csharp/SwaggerClientTest/SwaggerClientTest.userprefs index 997fd368fab..a66bf7badfa 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/SwaggerClientTest.userprefs +++ b/samples/client/petstore/csharp/SwaggerClientTest/SwaggerClientTest.userprefs @@ -6,7 +6,7 @@ - + From 7b678454f1acad2181fd5bdab7915b85eaf171dc Mon Sep 17 00:00:00 2001 From: wing328 Date: Thu, 4 Feb 2016 19:30:30 +0800 Subject: [PATCH 063/189] fix aspnet5 batch file --- bin/windows/aspnet5-petstore-server.bat | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/windows/aspnet5-petstore-server.bat b/bin/windows/aspnet5-petstore-server.bat index e14731fb0ef..955ad6677b8 100755 --- a/bin/windows/aspnet5-petstore-server.bat +++ b/bin/windows/aspnet5-petstore-server.bat @@ -5,6 +5,6 @@ If Not Exist %executable% ( ) set JAVA_OPTS=%JAVA_OPTS% -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties -set ags=generate -t modules\swagger-codegen\src\main\resources\aspnet5 -i modules\swagger-codegen\src\test\resources\2_0\petstore.json -l aspnet5 -o samples\client\petstore\aspnet5\ +set ags=generate -t modules\swagger-codegen\src\main\resources\aspnet5 -i modules\swagger-codegen\src\test\resources\2_0\petstore.json -l aspnet5 -o samples\server\petstore\aspnet5\ java %JAVA_OPTS% -jar %executable% %ags% From 77f9bc3642ae202772e2c4682258b9e47113c3a3 Mon Sep 17 00:00:00 2001 From: Gael Lederrey Date: Thu, 4 Feb 2016 14:03:13 +0100 Subject: [PATCH 064/189] FIX: Fixed FLash Client library --- .../codegen/languages/FlashClientCodegen.java | 20 +++--- .../src/main/resources/flash/ApiInvoker.as | 27 +++++++- .../src/main/resources/flash/ApiUrlHelper.as | 2 +- .../src/main/resources/flash/README.txt | 65 +++++++++++++++++++ .../src/main/resources/flash/api.mustache | 2 +- 5 files changed, 101 insertions(+), 15 deletions(-) create mode 100644 modules/swagger-codegen/src/main/resources/flash/README.txt diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/FlashClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/FlashClientCodegen.java index 2184e4013fe..02bcbd02b50 100755 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/FlashClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/FlashClientCodegen.java @@ -29,7 +29,7 @@ public class FlashClientCodegen extends DefaultCodegen implements CodegenConfig protected String packageVersion; protected String invokerPackage = "io.swagger"; - protected String sourceFolder = "src/main/flex"; + protected String sourceFolder = "flash"; public FlashClientCodegen() { super(); @@ -83,7 +83,7 @@ public class FlashClientCodegen extends DefaultCodegen implements CodegenConfig .defaultValue("1.0.0")); cliOptions.add(new CliOption(CodegenConstants.INVOKER_PACKAGE, CodegenConstants.INVOKER_PACKAGE_DESC)); cliOptions.add(new CliOption(CodegenConstants.SOURCE_FOLDER, "source folder for generated " + - "code. e.g. src/main/flex")); + "code. e.g. flash")); } @@ -124,8 +124,7 @@ public class FlashClientCodegen extends DefaultCodegen implements CodegenConfig //modelPackage = invokerPackage + File.separatorChar + "client" + File.separatorChar + "model"; //apiPackage = invokerPackage + File.separatorChar + "client" + File.separatorChar + "api"; - final String invokerFolder = (sourceFolder + File.separator + invokerPackage + File.separator - + "swagger" + File.separator).replace(".", File.separator).replace('.', File.separatorChar); + final String invokerFolder = (sourceFolder + File.separator + "src/" + invokerPackage + File.separator).replace(".", File.separator).replace('.', File.separatorChar); supportingFiles.add(new SupportingFile("ApiInvoker.as", invokerFolder + "common", "ApiInvoker.as")); supportingFiles.add(new SupportingFile("ApiUrlHelper.as", invokerFolder + "common", "ApiUrlHelper.as")); @@ -133,14 +132,15 @@ public class FlashClientCodegen extends DefaultCodegen implements CodegenConfig supportingFiles.add(new SupportingFile("ListWrapper.as", invokerFolder + "common", "ListWrapper.as")); supportingFiles.add(new SupportingFile("SwaggerApi.as", invokerFolder + "common", "SwaggerApi.as")); supportingFiles.add(new SupportingFile("XMLWriter.as", invokerFolder + "common", "XMLWriter.as")); - supportingFiles.add(new SupportingFile("ApiError.as", invokerFolder + "exception", "ApiErrors.as")); + supportingFiles.add(new SupportingFile("ApiError.as", invokerFolder + "exception", "ApiError.as")); supportingFiles.add(new SupportingFile("ApiErrorCodes.as", invokerFolder + "exception", "ApiErrorCodes.as")); supportingFiles.add(new SupportingFile("ApiClientEvent.as", invokerFolder + "event", "ApiClientEvent.as")); supportingFiles.add(new SupportingFile("Response.as", invokerFolder + "event", "Response.as")); supportingFiles.add(new SupportingFile("build.properties", sourceFolder, "build.properties")); supportingFiles.add(new SupportingFile("build.xml", sourceFolder, "build.xml")); - supportingFiles.add(new SupportingFile("AirExecutorApp-app.xml", sourceFolder + File.separatorChar - + "bin", "AirExecutorApp-app.xml")); + supportingFiles.add(new SupportingFile("README.txt", sourceFolder, "README.txt")); + //supportingFiles.add(new SupportingFile("AirExecutorApp-app.xml", sourceFolder + File.separatorChar + // + "bin", "AirExecutorApp-app.xml")); supportingFiles.add(new SupportingFile("ASAXB-0.1.1.swc", sourceFolder + File.separatorChar + "lib", "ASAXB-0.1.1.swc")); supportingFiles.add(new SupportingFile("as3corelib.swc", sourceFolder + File.separatorChar @@ -181,13 +181,13 @@ public class FlashClientCodegen extends DefaultCodegen implements CodegenConfig @Override public String apiFileFolder() { - return (outputFolder + File.separatorChar + sourceFolder + File.separatorChar + return (outputFolder + File.separatorChar + sourceFolder + File.separatorChar + "src/" + apiPackage().replace('.', File.separatorChar)).replace('/', File.separatorChar); } @Override public String modelFileFolder() { - return (outputFolder + File.separatorChar + sourceFolder + File.separatorChar + return (outputFolder + File.separatorChar + sourceFolder + File.separatorChar + "src/" + modelPackage().replace('.', File.separatorChar)).replace('/', File.separatorChar); } @@ -253,7 +253,7 @@ public class FlashClientCodegen extends DefaultCodegen implements CodegenConfig } else if (p instanceof ArrayProperty) { return "new Array()"; } else { - return "null"; + return "NaN"; } } diff --git a/modules/swagger-codegen/src/main/resources/flash/ApiInvoker.as b/modules/swagger-codegen/src/main/resources/flash/ApiInvoker.as index 98d94052ec4..6d8466390a6 100644 --- a/modules/swagger-codegen/src/main/resources/flash/ApiInvoker.as +++ b/modules/swagger-codegen/src/main/resources/flash/ApiInvoker.as @@ -2,6 +2,19 @@ package io.swagger.common { import io.swagger.event.ApiClientEvent; import io.swagger.event.Response; +import flash.events.EventDispatcher; +import flash.utils.*; +import mx.rpc.AsyncToken; +import mx.rpc.events.ResultEvent; +import mx.rpc.events.FaultEvent; +import mx.utils.ObjectUtil; +import mx.rpc.http.HTTPService; +import mx.messaging.messages.HTTPRequestMessage; +import mx.messaging.ChannelSet; +import mx.messaging.channels.DirectHTTPChannel; +import asaxb.xml.bind.ASAXBContext; +import asaxb.xml.bind.Unmarshaller; + public class ApiInvoker extends EventDispatcher { private static const DELETE_DATA_DUMMY:String = "dummyDataRequiredForDeleteOverride"; @@ -99,7 +112,7 @@ public class ApiInvoker extends EventDispatcher { var qualifiedClassName:String = objDescriptor.@name; qualifiedClassName = qualifiedClassName.replace("::", "."); var className:String = qualifiedClassName.substring(qualifiedClassName.lastIndexOf(".") + 1); - className = className().toLowerCase() + className.substring(1); + className = className.toLowerCase() + className.substring(1); writer.xml.setName(className); for each(property in objDescriptor.elements("variable")) { @@ -178,7 +191,7 @@ public class ApiInvoker extends EventDispatcher { httpService.useProxy = true; var channelSet:ChannelSet = new ChannelSet(); - var httpChannel:HTTPChannel = new HTTPChannel(); + var httpChannel:DirectHTTPChannel = new DirectHTTPChannel(""); httpChannel.uri = ApiUrlHelper.getProxyUrl(_proxyHostName, _proxyPath); channelSet.addChannel(httpChannel); httpService.channelSet = channelSet; @@ -188,6 +201,11 @@ public class ApiInvoker extends EventDispatcher { } private function onApiRequestResult(event:ResultEvent):void { + + // I put this in comments. Here, it's trying to parse XML and it fails if it's not XML. + // Therefore, it's better to have the raw result that we can parse as we want. + // TODO: Create different parser (JSON, XML, etc.) + /* var completionListener:Function = event.token.completionListener; var result:Object = event.result; var resultType:Class = event.token.returnType; @@ -214,6 +232,9 @@ public class ApiInvoker extends EventDispatcher { } var response:Response = new Response(true, resultObject); + */ + + var response:Response = new Response(true, event.result); response.requestId = event.token.requestId; var successEventType:String = event.token.completionEventType != null ? event.token.completionEventType : ApiClientEvent.SUCCESS_EVENT; @@ -252,4 +273,4 @@ public class ApiInvoker extends EventDispatcher { } -} \ No newline at end of file +} diff --git a/modules/swagger-codegen/src/main/resources/flash/ApiUrlHelper.as b/modules/swagger-codegen/src/main/resources/flash/ApiUrlHelper.as index 4333c6c7e4c..8779610cd48 100644 --- a/modules/swagger-codegen/src/main/resources/flash/ApiUrlHelper.as +++ b/modules/swagger-codegen/src/main/resources/flash/ApiUrlHelper.as @@ -31,7 +31,7 @@ internal class ApiUrlHelper { } internal static function getProxyUrl(hostName: String, proxyPath: String): String{ - if (hostName(hostName.length - 1) == "/") //remove trailing slash + if (hostName..charAt(hostName.length) == "/") //remove trailing slash { hostName = hostName.substring(0, hostName.length - 1); } diff --git a/modules/swagger-codegen/src/main/resources/flash/README.txt b/modules/swagger-codegen/src/main/resources/flash/README.txt new file mode 100644 index 00000000000..c9a2a38d6a6 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/flash/README.txt @@ -0,0 +1,65 @@ +README for the Flash application. + +These instructions are given using the version 4.7 of Flash Builder. + +How to use the Flash client library: + +The code which is given to you is to be considered as a Library. Therefore, in Flash Builder, you have to: +1. Create an ActionScript Library Project. (Warning: If you are dealing with Files as parameter, you need to include the Adobe AIR libraries) +2. Copy the src folder from the flash library to the project. +3. Copy the lib folder. +4. Copy the build.properties and build.xml. (You can update the paths in build.properties) +5. Right+Click on the project folder and go to Properties. Then go to the tab 'ActionScript Library Build Path' and add these two SWC: 'as3corelib.swc' and 'ASAXB-0.1.1.swc'. (They are located in the folder lib) +6. Create the Flash Application + +How to use the Flash client library in an application: + +Using the Flash client library (especially getting the response message from the server) is a bit tricky. + +The response message is given through an EventDispatcher. Therefore, you have to create an EventDispatcher and listen to the endpoints that you're calling. Below, you will find a pseudo-code explaining how to do this. + +After creating an application in java, you will have a mxml file. In this mxml file, you need to declare a Script (given below) after the Declarations. + + + + diff --git a/modules/swagger-codegen/src/main/resources/flash/api.mustache b/modules/swagger-codegen/src/main/resources/flash/api.mustache index 7fa8cb03d0a..2f5ccfe0dbb 100644 --- a/modules/swagger-codegen/src/main/resources/flash/api.mustache +++ b/modules/swagger-codegen/src/main/resources/flash/api.mustache @@ -34,7 +34,7 @@ public class {{classname}} extends SwaggerApi { /* * Returns {{#returnType}}{{{returnType}}} {{/returnType}}{{^returnType}}void {{/returnType}} */ - public function {{nickname}} ({{#allParams}}{{paramName}}: {{{dataType}}}{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}}{{#hasMore}}, {{/hasMore}}{{/allParams}}): String { + public function {{nickname}} ({{#allParams}}{{paramName}}: {{{dataType}}}{{#hasMore}}, {{/hasMore}}{{/allParams}}): String { // create path and map variables var path: String = "{{path}}".replace(/{format}/g,"xml"){{#pathParams}}.replace("{" + "{{paramName}}" + "}", getApiInvoker().escapeString({{{paramName}}})){{/pathParams}}; From 5dc67c15e5587aa405d24c0e9cf3beb96ad5ec3c Mon Sep 17 00:00:00 2001 From: Gael Lederrey Date: Thu, 4 Feb 2016 14:33:46 +0100 Subject: [PATCH 065/189] ADD: Add Petstore sample for flash --- .../client/petstore/flash/flash/README.txt | 65 ++++ .../petstore/flash/flash/build.properties | 29 ++ samples/client/petstore/flash/flash/build.xml | 192 ++++++++++ .../petstore/flash/flash/lib/ASAXB-0.1.1.swc | Bin 0 -> 46948 bytes .../petstore/flash/flash/lib/as3corelib.swc | Bin 0 -> 255357 bytes ...flexunit-4.1.0_RC2-28-flex_3.5.0.12683.swc | Bin 0 -> 194680 bytes ...aircilistener-4.1.0_RC2-28-3.5.0.12683.swc | Bin 0 -> 2294 bytes ...it-cilistener-4.1.0_RC2-28-3.5.0.12683.swc | Bin 0 -> 11827 bytes ...xunit-core-flex-4.0.0.2-sdk3.5.0.12683.swc | Bin 0 -> 165338 bytes .../flash/src/io/swagger/client/api/PetApi.as | 336 ++++++++++++++++++ .../src/io/swagger/client/api/StoreApi.as | 150 ++++++++ .../src/io/swagger/client/api/UserApi.as | 274 ++++++++++++++ .../src/io/swagger/client/model/Category.as | 32 ++ .../io/swagger/client/model/CategoryList.as | 18 + .../src/io/swagger/client/model/Order.as | 65 ++++ .../src/io/swagger/client/model/OrderList.as | 18 + .../flash/src/io/swagger/client/model/Pet.as | 75 ++++ .../src/io/swagger/client/model/PetList.as | 20 ++ .../flash/src/io/swagger/client/model/Tag.as | 32 ++ .../src/io/swagger/client/model/TagList.as | 18 + .../flash/src/io/swagger/client/model/User.as | 81 +++++ .../src/io/swagger/client/model/UserList.as | 18 + .../flash/src/io/swagger/common/ApiInvoker.as | 276 ++++++++++++++ .../src/io/swagger/common/ApiUrlHelper.as | 41 +++ .../io/swagger/common/ApiUserCredentials.as | 63 ++++ .../src/io/swagger/common/ListWrapper.as | 9 + .../flash/src/io/swagger/common/SwaggerApi.as | 75 ++++ .../flash/src/io/swagger/common/XMLWriter.as | 28 ++ .../src/io/swagger/event/ApiClientEvent.as | 36 ++ .../flash/src/io/swagger/event/Response.as | 56 +++ .../src/io/swagger/exception/ApiError.as | 10 + .../src/io/swagger/exception/ApiErrorCodes.as | 34 ++ 32 files changed, 2051 insertions(+) create mode 100644 samples/client/petstore/flash/flash/README.txt create mode 100644 samples/client/petstore/flash/flash/build.properties create mode 100644 samples/client/petstore/flash/flash/build.xml create mode 100644 samples/client/petstore/flash/flash/lib/ASAXB-0.1.1.swc create mode 100644 samples/client/petstore/flash/flash/lib/as3corelib.swc create mode 100644 samples/client/petstore/flash/flash/lib/ext/flexunit-4.1.0_RC2-28-flex_3.5.0.12683.swc create mode 100644 samples/client/petstore/flash/flash/lib/ext/flexunit-aircilistener-4.1.0_RC2-28-3.5.0.12683.swc create mode 100644 samples/client/petstore/flash/flash/lib/ext/flexunit-cilistener-4.1.0_RC2-28-3.5.0.12683.swc create mode 100644 samples/client/petstore/flash/flash/lib/ext/flexunit-core-flex-4.0.0.2-sdk3.5.0.12683.swc create mode 100644 samples/client/petstore/flash/flash/src/io/swagger/client/api/PetApi.as create mode 100644 samples/client/petstore/flash/flash/src/io/swagger/client/api/StoreApi.as create mode 100644 samples/client/petstore/flash/flash/src/io/swagger/client/api/UserApi.as create mode 100644 samples/client/petstore/flash/flash/src/io/swagger/client/model/Category.as create mode 100644 samples/client/petstore/flash/flash/src/io/swagger/client/model/CategoryList.as create mode 100644 samples/client/petstore/flash/flash/src/io/swagger/client/model/Order.as create mode 100644 samples/client/petstore/flash/flash/src/io/swagger/client/model/OrderList.as create mode 100644 samples/client/petstore/flash/flash/src/io/swagger/client/model/Pet.as create mode 100644 samples/client/petstore/flash/flash/src/io/swagger/client/model/PetList.as create mode 100644 samples/client/petstore/flash/flash/src/io/swagger/client/model/Tag.as create mode 100644 samples/client/petstore/flash/flash/src/io/swagger/client/model/TagList.as create mode 100644 samples/client/petstore/flash/flash/src/io/swagger/client/model/User.as create mode 100644 samples/client/petstore/flash/flash/src/io/swagger/client/model/UserList.as create mode 100644 samples/client/petstore/flash/flash/src/io/swagger/common/ApiInvoker.as create mode 100644 samples/client/petstore/flash/flash/src/io/swagger/common/ApiUrlHelper.as create mode 100644 samples/client/petstore/flash/flash/src/io/swagger/common/ApiUserCredentials.as create mode 100644 samples/client/petstore/flash/flash/src/io/swagger/common/ListWrapper.as create mode 100644 samples/client/petstore/flash/flash/src/io/swagger/common/SwaggerApi.as create mode 100644 samples/client/petstore/flash/flash/src/io/swagger/common/XMLWriter.as create mode 100644 samples/client/petstore/flash/flash/src/io/swagger/event/ApiClientEvent.as create mode 100644 samples/client/petstore/flash/flash/src/io/swagger/event/Response.as create mode 100644 samples/client/petstore/flash/flash/src/io/swagger/exception/ApiError.as create mode 100644 samples/client/petstore/flash/flash/src/io/swagger/exception/ApiErrorCodes.as diff --git a/samples/client/petstore/flash/flash/README.txt b/samples/client/petstore/flash/flash/README.txt new file mode 100644 index 00000000000..c9a2a38d6a6 --- /dev/null +++ b/samples/client/petstore/flash/flash/README.txt @@ -0,0 +1,65 @@ +README for the Flash application. + +These instructions are given using the version 4.7 of Flash Builder. + +How to use the Flash client library: + +The code which is given to you is to be considered as a Library. Therefore, in Flash Builder, you have to: +1. Create an ActionScript Library Project. (Warning: If you are dealing with Files as parameter, you need to include the Adobe AIR libraries) +2. Copy the src folder from the flash library to the project. +3. Copy the lib folder. +4. Copy the build.properties and build.xml. (You can update the paths in build.properties) +5. Right+Click on the project folder and go to Properties. Then go to the tab 'ActionScript Library Build Path' and add these two SWC: 'as3corelib.swc' and 'ASAXB-0.1.1.swc'. (They are located in the folder lib) +6. Create the Flash Application + +How to use the Flash client library in an application: + +Using the Flash client library (especially getting the response message from the server) is a bit tricky. + +The response message is given through an EventDispatcher. Therefore, you have to create an EventDispatcher and listen to the endpoints that you're calling. Below, you will find a pseudo-code explaining how to do this. + +After creating an application in java, you will have a mxml file. In this mxml file, you need to declare a Script (given below) after the Declarations. + + + + diff --git a/samples/client/petstore/flash/flash/build.properties b/samples/client/petstore/flash/flash/build.properties new file mode 100644 index 00000000000..8e77d88c961 --- /dev/null +++ b/samples/client/petstore/flash/flash/build.properties @@ -0,0 +1,29 @@ +# Window and document title for the documentation +title=Sample app AS3 SDK API Documentation + +#Path to the source folder where the .as files are located +sourcepath = ./src/main/flex + +# Class-folders you want to search for classes to be included in the docs, seperated by spaces (for example ../com/ ../net/ ) +# to include every .as and .mxml file within your project, just state ../ +domainextensions = ./src/main/flex + +# The Location of deployment library on your Computer (PC/Mac) for compiled SWC file +liboutputfolder = bin +liboutputfile = as3-sample-sdk.swc +libpath = lib + +# The Location of the output folder for your generated documents +docsoutputfolder = asdoc + +# The location of the test sources +testsourcepath = ./src/test/flex + +# Home directory for flex sdk, change this to build for Mac or PC using # as comment +FLEX4_SDK_HOME = /usr/local/flex_sdk_4.1.0/ +#FLEX4_SDK_HOME = /Applications/Adobe Flash Builder 4/sdks/4.1.0/ + +# The location of your asdoc.exe, change this to build for Mac or PC using # as comment +#asdoc.exe = C:/Program Files/Adobe/Flash Builder 4/sdks/3.5.0/bin/asdoc.exe +#asdoc.exe = /Applications/Adobe Flash Builder 4/sdks/3.5.0/bin/asdoc + diff --git a/samples/client/petstore/flash/flash/build.xml b/samples/client/petstore/flash/flash/build.xml new file mode 100644 index 00000000000..4f021b0b8b2 --- /dev/null +++ b/samples/client/petstore/flash/flash/build.xml @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + docs created + + + + + + + + + + + + + + + + + + + + + + + + SWC created + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/client/petstore/flash/flash/lib/ASAXB-0.1.1.swc b/samples/client/petstore/flash/flash/lib/ASAXB-0.1.1.swc new file mode 100644 index 0000000000000000000000000000000000000000..c93590267846ce45564dfeff8275a0030e39b2fc GIT binary patch literal 46948 zcmV)VK(D`0O9KQH00;mG06b{ZJOBUy000000000001E&B0BmVua$$0LE^~Kg05U+$ zze87336ZD)0C?KWeF=CRN0o3_cXjvl+%vjt%g5LrTb3+Kb4#)v$MP|@9AD!z*Vvhn zW-Jk1(TwbbV-Y6KeUc?y0UQ#Jkb{J9vn1x)TtGY$*o1@yvXF4>qK3c*mRdv(66Ir=ikIX}U1vk14rGn?bMcUC+{IBxY&S9ayD4RPPq zeZBp;mGE{!U3We|xU#wV$dMyWN5V}5Lx-A!ZEbDMflzZOv;rVjD&gM*SrZ3Z<&ou{|f`F*2 zb7gj5s4taYlNucC?deP*y5_4_Jv`eV^f&MKw|4A^ZNBp2b?YJ*4G!$tdC~s2W>TRh z?xbt%m8QtLirLdY?&tG@XCoi=MP$?w%3F6H`j{QATU%j&) zD#??T<08j_hr^Of<-)+JzJdN+^H2uZ)R}MIbIo98eX6rN!@0R8j2Z9&WK$8cNrzln zgnVc7-dtuV*W8yH%J=jSG;bK_9M-A>E9UfYPj6RdC{mgncvtBD6-Lszp-w>2)8Cxx zM22XbS#@?gSDC2;X<{dO8fK!in75@ff_C<1QbY9cKu?!&W#$^GJqH=gS4@e9Wj#MN zbckivR|kM~zRpyC|3KacH8|5Zn7>BuPUZGwuFktk>GcOA)n}(*p;=j3$*1CW`1X?K38r~io$F;k?+>-<7$VLaQBIG9!Gh=dBr`r$0~8Q*-d(p@D<>frDL{ zY)^j=)}4dhnchK~?di?@J?m!kOl=46&=;i8mGlIi_9T&+=4=QDoV0Nu@bRDCRFBS zSx{u&UQ1-&EAthySS9nbWPZNPFOYe+%rBMsWisC&^Nq6Dq%`psj^m+~L#Mz?9Fb(t zh=o|>$`K3C%a%DKmTJyAk3$&Q$1hyG$j{s*%&lW?J#&{ccLj5siN|iU05V%UClQXU zvQ~jkY-D>(y;Z zk|l+#=zH+)%^XJ&co6{a(}4G>`%8f@(SZR{6a*@60LZiknI0$AB&~L8;5Bgtz`IK0 zX7FXSaW?yMh#?wHiE1~HDDff{Hvz8xlL6ncQ{$wT8yF{Z$)Gym=W;(#2mRb>jBvD* zx*Z&+r0LlFW2e-s3McSmhzg!xPfS>-MNo4EAWi0hX|*Q+K|epw)W)mw*KM1ZTdTTi^ceKt}eU7fL(83 zlX^4#hw|OFR9Bbr&FICk)2oDJK_$Ze0Y8H}k@5$;XQE*pxVLX=aL$f>EQqsfwgYEq zZlEut%Ldl%x0P4s&1Vw9#APM)a2Qyk+4uwU#oM+bXQ0))I1{L=%;2YmL=nWAe;y@m4RXZbYdjXkv{}kW^H$fHbqq zqC>WNK&I6ar4j-_uvN=+mNJ*fVy(>2lf^l*I9sM5>U=W4NVfSw+9`EJSw@r!qSO;v zYLM;AWqyUsH_3dnECysTD2t0_J|v4_S&YbHROVY{evM4mDr-R=g4h!j!AkfMphoa| zh;zZw*>h@1)uPzZ#T?hd1f$T#uUx(A0_I-G+;*}IgfK_p>(T@j2v?U7pqC~hS%z{B z1#MBz2{NTO66mR$d?Tcj`ngUKe$qHd#-?#15paNBwYiYxlR}baXx07(3l~<5nCV4kU}5HkkLLqL&o}qaWb20 z9EY+4rz1xf<2kJ>;I5f2D;N|g`r0KOhcIt3IhB(vbzlB~oOQ;ECCE(NmzZ$@|XUIMd$xwG9A-O)uJsUZm06@_fp9B1c552(g3|Wq3 z_DVX6sviRH_a|$!wK{ji_*_sKE_S;)?qpyza4FYtx*@QRGPFwa^(cp8?smFV#Dop+f@$c_ozxL7X1WXUJ+h1|TF#X})=l)%=#L1~IWw!^q;shX(q9 zNQ*HGQv=_3nkmHxhIC*#m&qeG*CZbLV`VEmw$$KYroU@_H;5IRo*E|M&XiDty}#I> z+mOlHfGGToA&MsFfosa1jTi4ZxP8Zljjlr)J-e~o0bW?Mx|ytzdvfbHwC`ybnai(k zb{P3W6(VQv=?5i7&yhXV*_p}Z28Ixgm3?7lBzNlNVRCuMs$&6~Dj?krrZ`>4^q^8b zqzb+#hEu&g*`7=n!-o)_lDVu611K&_H4QhL6v`AiE9*%wJa1hh9I$s$@Z9JIhk6bJ2`i^?RafrB0jN4dBIA*=df{b^yO#;cxScrsULMRq=f`%nm^VN;Ht>bmL{%RWj(g$Tyn z0S(ARlzEHHE3#mf1)D6`W$KivOBQCy!W@~@%7O7;t~{8stCtRBa~3?f)O`av}nV~8i6iav}nsneA5!1Qeo>zl^0Ym zZvTkaO{7Jaj$DkfESK?@A4nc#?iI{UF*nWJPUdzoH^ba4u{0?bj>wfb6~VFj3c@BQ zcz-)56M?KnT4*)SU5E>C?gErTVj&jP<78#hd<9R%IUq4TI72`=kLpDcTXBFCx`|qe za~8CUiZ6;NRN27aHzJ(&jnGcI@Mxz9FP$>JS^QkSQ}G?^wE9NGP8)o)`$nWrhi^pg zboxdtoi2oOgT}{Ij}s4>Jx;v*oN-bi)Q*!%I(M8@iSx%vwd7OhqdwSJgL4U4<#^-l zw}A#Hs*BU2uM!jybqQ#3a@O9+ zryOq31=M=&JuRjjsxRdAc)kiMoY&%E3ZRDDiMT-#F>s$&o0G1zG!}R9m}$^fZDU3{ z!L*39KJHxxxWi*vyRQOMjcUQyLqOaODpU)ouVUOo>fH~c_PbbKJx=_V3&zP3WsSNz zNw-iAIjCNc^k%);3gDx2edMmRBTjaLio^HK=yn2cfh@w9l=@y4dfh}4UKU<(oqdM+^O_kY!x zw8Lal4KnF-#R51zPUc#7jgx?Fx0;y5u3d$(>?}}4p-!l~A$~>LcC@q7eI>@NOjj(1 zdNNKz_PygI?ASL>BF_EeBbCR`bd%Tu_9vYVj)+TjdQqIb02P0x`d>)Ur zOWmJ##^-Zb$JC3{E{L)Kv*A`Rfo!;0Hg<<9D?GPASyx&r)E$_o^?Jc4)6!;~euF+` zHB|8wwt_WW3d)9bHu7rcu~TYSq4C1F57c94CC4?kt66+s2=Ce1#~arl2Z-)boRt$P z6)ylBeTXB@^^KEF1e_&&pE{tiy)edjo}`VNM~^pl9N$6-<9cSYy@LR_KnM5sAdHG) zc=R+jNQwN$FCO;Rc|A#d}wL;i0bVGsy{0rNxcIGRvJDiB|v#6al^R9 zeIMj!gaAHh%I_x0rP-xvc@FehOE`Bge7cq->#}uv5OH4uLB~jPS$3Ho#Jl4VbR9`9 z$}ZA_1a}yMt|!U*Y`q>t-98Aqfg~HU4SJA>Q-U*_>?3HU-eZ;f@8u2pjHvpPzQN zv;%boCboAR=`W6b+;7e_=oD%|KR9r%iN?v0&E^ENb?&`p)E?u9Dm6^(v_od}U zvzMm&|KA+gnM`L&SuhlionunjH6;qb212x&SfpwPPXy6eym2Z{&>pb*5kXs*L0!ng zD>kd0xh@D7K@s8Cf%bu41tOp}La@>b0@h%hY~tNe$$52FlKL*@x{ZN+&Bn9VY@9Z2 z){3>b03dSEQYR){BWpSCpM?cynQ2{F5=Gp&ZReg#ILPLPjTgh{ZqLE^j=kGAi2FBp z?AfU7Y~OHjYsa>ZJ#Twsg~bRht9c;gsuKFJh;sQM7+h||by;aw=FrBg2gS?US6rGT zhs3^AzO#GgaWH+$01W%`16v1`sMkzUq1Bq%lqGcdAe~X3|eG12+i@A=K|%y@9*x(Ypp~cOyyx%*WWr*L}O4k zm0F=U)32|jD7oQu?ySq-XJG5iWb@|AvNV|Lf{zl!-J0pA@RlP!89{cYx-3IIhq}?T zbjBip3JybWHiv{L0hdijvc5YtBz1z*o|m-AbI5mB7uJnI?Q4$oXj1^5$+g)Z44-ZF zL!YUsD<_|jzO1LRyi9n6wHq17mt`|WG=Lk+1!OFN+MP+|rSxz%d#0p1XBE&{M{(+h zVgs3x4SFjQ`chX5keHauL&qd!`n!y2nEEm?>={^ICghI(&Wsf#S!%d951*T6ZWs)- zBg;Cj8FQp}aK?m6!_4s82l6b64IBNQfpU{s2Vqyr`m?-b7$~35QB0|!oIYsJ0PZhY zULL5Pi-Em3TUA!?+?g8e$)|dusn1wFhx?1b;*o)&uAH?PFk>rV`_^#N3aAM)mblql zwP&HGV+Ma1Wa+_8mcZUr){#5t^EsmQMq7 zqz4==A%t(SnlLk0XGuC3 zw}^a36(w`kFsi89BTyc6$Dw{`|Jcu3vAlI1@xW!N6>mkYy1`$D5NYon>`pn1IG5)j zR%4m5m}==Xq6Sv9LENS?Yt7jPk(Y%usLY8feLVgEN++4h&jbA9$^~R5r7Vd6&+t6CqfA zd0@~DlLO1kgJpeu*%>cVJY%l~x?yfV^wVXC8lZrIDgc8kzk3G4GxtzBWU+BMdIvgF zy_xmem-@0XNSc@x593;w1@sO!aiU~wc~EJw(KUfrIzrZb0n`k7p? z02i2tLXY1q^!4;hnp`heU2f0YNLYh#^KH$P%7gCLrg+Yt77#nD`${|u{>-nQyRa%tkDm~5Ib3VSs2Ii`GG*W zNg4?S%TCD58YWn~r#s`@%_@Yi-Pma0!!N$e<|Tc7!@0aKb9JgS-+PS@gf9C6Z<(Q{ z=JTX5aJ~dux>MIcTk5=$^h^DjOjj>-Fxa$M{nJ;JXKal9`EFgIVJpn~>M}`LF(c~- zx}ZiyXP!yX^W0I=w^|GYf%AyIq32Lfo}~Gn6yK8;`rn#@Uz+bs@tx^ey~fm%re2$4 znfY3C&b4d3LPvit(~nIWx+@4ak}0hD(5sm#F^HbAGk8pub4!$EuhUaPrE@R z7;o(vV6!eW_7Nq1_tXkF?ez2CZ9=nohB;c?@7xj&x3q}CU?kM4n0kU3jRnIoYjIpJ zhJxW>m|{DmEul!nJ$0&$#)2&^G#G4cvlfTxVki`8iO{yzmZ%tOjm3gA7-)-%!DuiT z6k~zbNSm#sV-;g=|=L(a(~R58@j5{x=0k2%Ch zFc=EkOZ7Z48jeN+Vz?y`ZMByUHAF}t*y@<1X^WUp)I3fhM#7;$D-aZE3DHOk z2HLQ^TH0FMyl2h@h@rMnAPU)Q35D#FCNx6PXlskLsIrKVcqnEs)gr}cOKULdo~rwc z(O_#VYBBN-6`?HP>|D3k4bswS=LZTY@bSS?8%3g|L9FWa>=} zwuORGi=oDev2Ys$FqK9K3ABc+#Tq3-NdR+-(@|n591evl&N3DdqfqhMXe`tkGfsX1 zLn5)LYf6VC0xw&G_R;~V7>R~ku*I~6VijkZWDz0zP^%3E2=E4gvC)<`DE3$w7$-s{ z426`UCeacIwME@iCtSpEI1+5J7&B60C>D;jK>-EAZT8ZEwHSeJB_y;3!&Z@03l^ui zvU*j`Dz=Mgb?F{$@oJgyxPC=MnMk;Yh_}juLl#`J;MR{J3A1D}Pv)1%f_4CjZNTP( zG9Q+Oh%7{9p{+@PXTkp!2>%y&{ww@CWd135eVWMPv+(*H{6^vT1NglPzhA<)U&HTp z@c$Wp{|zYq0`J%IGJie%ZiV0N@VgU!cfs#&_&o-2ABN{g;rB84-4DM{!0%J=dk}sP z!|yZj`vUyF#IvJUUxmll;P)i_z7D@{!tY<<_cZ*z3%`@_8-?HZ;dcstKZM_p;P+$r z{RDoGK$1U)=d1Ah75x4ae&g`_9sFK{-yh-kI{f|&zyE>XU*R_*$o#wEcMN_v!S5FM z-3Grq;kR0OmhgKxPT+{uipRaI)~XQ;Z?#%yk65bVZ7vI2z}$uGi?n#evIw5;x)Fh2UGmeC=k~It=5%vvFiSezRIPkHi;kqUdvPM{frU-GN@DAu(dv ziF;rm^|{tP%-zS_iy1waG52!j9$@Z4=BBkAbU_aAnbn_%^k+9bSvpsaSbE-qAp;|p zUVP^C=V5pv#qNI^u^hQtaD(^VWW@5$5yFH2dhlLL__O)~NXd6JwU6yMy>Xs_QQ-zJP@-@$i$gMv7TexR_xo>uGk_2(&kA{{?M&uQj; zvFQB?dS7DRpK4y}wzgPXUm-UTBK(ZJO#Yqx9P$2!jQk3p|A|ke^MBCuTju?%?yay| zkMV$Hf^gh*c)C&G_T9kqH}ah~@i+5^?-tW{o9Vm5^u5RQ{j=$NujzZA>3hHF`+({D zpy~UN>AT1DeZ=$~H+}b-zWYqy$4%cSP2U5i@6)F5A=CGW>3h`lJ!bkoYx*8HeV;RZ zpErG9G<{z-eP1zs|6=-{FnuRX-#1L(w@lx+P2W?d?-|qgtm%8s^nJ(leb4kgZ~6+R zZ_M=l!1SFqeJ_~47fs(wrtjZO-%m~7&rILTrtjZP-!DwxE2i(4rtjCL?>DCJKTO|m zO`mG|esB8zVEX>c^!>^7{kQ4+i|PAc(>G!I-X$2mqo(g#(|4WeyWaHOVES$}eK(uF zTTS2Xrtc2Z_a4)Cmq5aY6`9+`aeFUJY`chXl?jK9khO_egz)W&>PjN4OIR(0u1{Db zA_{S#g%^mlAu+3($ex7VN-UAYhIK^YiTQJhXG@}P3GrT(2nR{U;>420q;hLw*-}!qEwN%bsotKbuOl_9 z5<9k$Sql;pCA0kr{~|JHX=16L)RH){3ec78NK|^syqyW(d@?_g@VLl=U5UgF;@h3r zx`iyqX3+9pKVxp>oG+vsRJBO^eEU|VCX}Ubo8Y9igM6j6z4kR|mN$_9-Xb8m;7j=;E z6^ZrjB$7%{o#t1At|1$G6VWi)=tw9s ziT5QoZ6ure6T1^+^FU&GJ?U7OsGUu=3?>#XAQxSg*tni-U7l!bA=?@gYgUu(^@-*c zWXDjVV-wk#ODyt{L_RUEmh6fqwrnQ5hZ7CU$R4trgmFvK-aUBOn+9+TCeJN6KpKT^ zGEOM*AK?8H-TXKa`T7Hb-`6dS6G><~K$ncH?WVY!nu2y2`JJq`Xy>h4)Yha}h>OHa zIZkaWY*tqlaA#kmtXU7G)67bwc zG(@)%^>$M5RYG+24&vLazK3We&RIuTB=%CPzu*>C5il$S44=?3e1fQ-BuR%BYd*`E z0|6xi@QXU&7m4~M6VO)#lyUoQ006(L1AY~_y@-63sQ*HA_91m&Bao>lNnzBW#Dej* zL%dUZyi*X*Pfii_w2`A9Vvb%UqkhhAf!CMV4$IBzPe>u_9CaYXPZ8_Oq~Pa9<1WOi zh>}1*LICYwb+ms4wDknt1|Hqz!gWvw8tL`CIspkih}@Tu`+n|`!;I7s9+1A9Pl{tm zyv%WpE7WWGW2e>Yct|+cN!9E5(KNjmPdeVnr$s-&UxEAZI~64Q0Un7)w}D4DBs>Q0 za{5^$U3{EZKh5hrdXNVmJu;ct&mggn@nagXpVg=q)yIKq5vZ2b&+}^_TfH z^%G=;R{>U}CET10-0%RvSNLQlQ19pBRU}?1Y*xPpk<+vi0M#e>u|m8WisVTaX2<>W zCwPEOOHdr_(>RGq-vFvxr@?%gNY6#|B{Wgz>Miuv5+@t)j zd|FN`X$$=5{n=TmS@1cnoPh5TB2~RKF`+&UAglqhWH`=7MS)%g9Q`S;75q;b57Ax2 zquVI_oL7Hl@a<*f+t2w?;LW|rrB{#z8cSY9mi!vtkqb`TF8muT)ln?Y&FX*h$=PW- z7N5=Q3ER!Gyk0n4Sza$79q2aj=!S&b1uV-u1T4!t1@#6&r|CukXu3t1RF=02P?om~ zdRg8f=w*4QV3g%uf?1aTECAu}6V6?h?-!DD%(9#VnfZ`lmgPM{VT_gKhXu1NKLTNT zVH#z5T)?utSHQBoPf(8wdRg8pl$7OtLP=TPFH9}V`-CZF`3a$*7pBHihf$VK2wGV_ z!FY)78Xnz7;TwYbq`|in$hU6@W?6nqFw64W$dadplCpe8Fk0hg^*Nzn6sDH2lZS+N zLc%Yxgx7N~VUh&h4g8NW)51@LMnU~Cmda09E~(p#x%{axHhP=|rYYo&rfH$-Rmj@Q z0`4w%Q7X{gfcGzgcD~>*0(O$1OrM6e=cg5r8WZcoqQPBx=AniR#Uw zh8Hh~sX_ri7rx)4f4@gmKMdcK^9u2K1b_gh+Q9Ls4)ds}J|-sT7vl37jvCAXsxeRN z-=7xo6vH#3`iz)dP>3%e$4;rwiW*xmGd`A?QOwLN#JvpS{!EYiGf{n61ZHAig3|Yx z8wyUx0`Rku-Y~$wuEW1Bs(%to#QvW};PPL@g4X5uxPqTxX+qRFM$}s+E$Xe3dYe=d z^>zuO-YMx(m6E8nA{74sM7>{+dcQPIt{|TRx0U}i)X7pbpFlL9k_v#KaRuw3PN|=U z9y52^JqzpXgVN|&a^dJ$c2;~LfzIjE(%6aI=`pCYRX>F)_%KwD70@w3vU5R=qld88 z>B&ALp&o~BCtr}%XG@cP4wLDkA-}j`S~>h_?s-@Z?c4+lGSgOBwW(W zS=!%5WKYRP#-Axk=UM#posx8X6g0*UV*mLnB!pKYBJe<|zT zijmQ&eaf$75JbPx^9O?HKk+mbq+Aif(^*^TZ)Nqjz}+-u{H^6tlB;rBWH2aje4EP7M1jFVn+t3|!dQrciF*kCNl#YsO<;O9rAwVXhcDU!HHG#T?(pI zr_^ilIePDyU%1!qz+-Coj&JwE#~YMUKXsrQb)$mS2ZEuD8sBytbT(zoFSGP+RUo~$ zv-IvzMiJ&Xps?3K_THx6sU(*|$+(Cfd#P}IGX&qI6pUo_4sHq7$4;0gga&%$2A9hypQm=+SKc8 zdaJ$OHo958$u_FJ-E4#Ad8;j14~?ashYtL9+ZbqsnCcxiO^Ce51}Z!gP%AK*uV7nw z(1!i@X_nN3T2lCE z2G#EOwqyfpMWgVGHy|AWoB;FTK-R9+gzN3<4ff=6ZO-STWF3hwN4TH?cU*@%ZddO$ z;qEozLI&KIbht0s)i0ZH_nB~E1FoRM73}J$3HNamE@Hs_T8I0!UHy#-_em2jYQPU9nS?g0}nX25+&hx?F2y~l)m(1dF-#snYL;XdlX;l@WD>Tw6K_im%;N3o$E zh6t^KEYKfeoqW>4bP5S$JqfWMAp{>6@#t<9(Dl=&9O?;&-V(m<02Sg}4rmEDDE~G) zED!qnQx1LL|BM4VbvstUXB}8S)$cmS(xMXszUN4b5KwU7n2pVtjXJcx{Ra-5l47Fn z6aqoe3lNPu=b>Km86y73q5jA*hGVoB0ThtDgWLiG}p2Q+>=?qJDhV34P1woW*&_3os=d z@;s%-dkW%hB~Llkr=6@S6e(ksVU3ZM7j^g-0sbQLqEmfIgD)YBMYzxqTfcScE%&!h z)^dOARL7lA>^RXQsH*eW57gJ3qsIFmoKWnqJCiHSHo5|_t;M>y2C&`d(y`s=V%Y9; zsrS1~Y#(<4wokcCY!A2q+k-CXP@Ayy+67QBIswaL49gRQdknBVNeDhp5FQ_2C&K69 z@eM-1;8H*98Z(ro$6Z(zPphAI=~d$x)RQl`3JAd7MD>d<&|*P{MO|hcwuNgTsjnGH zeN9UWAKxN8KE6$audx*A36`Sxb(i{tE7_cF#<{8hihw8CYZ`~r@gR>?^Msauh^6>- zS3&!Ruaf!=S6T!DBqU%xjusnnJZuo~G)tL0%~Ix{cB#*}lHqK)&?rC$AE6Lu1Jwuh z&l_=`cc~{`TF3BR()c~Hj&FRPXfZ zT<;zyrwPHw4+(z*JYFEejc)Y@x1Sq6t={McCJlE|w*|%8E$*>9A@F85^aV_SIax1; zQVvEie(ur39=s{;Ha8T*XYk?#9J?Tk&DoC*oT+;^_H-XJDEOF0!N)WT?$ao^->u%K zQE)#};3xMY5mqGPlkPOV3*OXEm}IyZ8IV+wjvoLW54f>sdlWw-A*h^|(y~R+o5oiR zQoaI-zeLDa-0D}|sP~czFA85b=;%MjM*45$I8)W1a0A~*HLhP|V0qra^1O!SdAEA9 z1WVxzEMsmcno+G_wo<6|cOzeZ<~Ah2&j|N3K=m>q`1p6im~u z{^#ydKXL8E&bd{5)vf-*4fz#yP5f22pWy9^bC7wzWM7JE`m1jJhDFgop$R65O#+XC zO7c9g@HcLzqHp8%s`WdT$zKufcW(9fZk%grBYxi_0J0rBnkaz$$pHBi(D@&P{MoJk zS%(}xrT#aN8hF%5Xw={K2nxU*)FIHvMTq@w58gY}DZ@{n5eH1~_KcI?5`vF$!e0vy zl?eFw9ihkI@p~fT<252(2ai7x86UqOmh0j1N21&SkN+apyFKc)9+ZKakUNHcyvGv7 z*bSbghdZt6%^qllS`T=O2YSTYJfp_@?H=e6@AlLk?zE}z_Y~qQp_5(7RpKD-0~pzc z^SbJXJlOq0%zHf82Om4-{vH9g-wSCqblQ>8c8eVuf1ign8_218zh{(HUC6OJ$fiX- zX}R%Fq!Nde4|vkz2^?i%SNf1fvicc_e4-(DT1W6n5B3&mIljtNPZ@#-4|^V+n82%1 z6!mdW+G61RoJT8khVzRajRRjnDo)^Rt450YSq-bD6stwU`UupFCyYc_<7Y2U5b5v` z;H}4TpC@@i0k!T?O%J$$XDm>V1%9pqHRltav;yi2E6xi zv!1lgyA49V1Mq1}#X20UFt2?UsxzLn70U{0J5CSyCvuzJ3ve!tf#7vM>PZ7+LIWYW z&FT*{3`or>kAGsbdRl|WfFFANFm`y+gG#&ll1CrFe$=zn)9}{`^(VkNsJlCPi$I^o z^_*X5byvdr%j)efw0et=|0Vn@tojPCvg%8J$ttY)D^_8pUwhP7Slv`#^=Q@ems(l7 zU&hk=ou{Bz5lQ_$6qKl!{2#PJkbviR8`plC#d5bkto6Xy;lD}%*_h>Zme)TO3sDRH zGt2RRdvH?Tj@Q)u#WSYQzW)!zfbq?Gocd$mo%nsi{669Zex7#Y)m88ErlrXRs+TV# z=%^P6Qgv=>wR@>&HdLwWyo{j>AHRUnAUsBR;Wl`@ zi>J54<0voQ0gqPcJzn)zFD^5kR&Vp_E3mhFq2Y?qjPLLw58va}Rv|LL+;Q@5UcSq# z-sLR-Bec5zUhgPWWDq42l^{ISyCFYm%W;Uw8u|OZW5CHZq#p2nfZ_YF7wQZMn0qU& zxC~}|hjh~N30$LquT^(J7C+|2<(*x4$Ej1#Al|_CaqlLM+ihI?Bdc?gN0NuLhXd%~ zwLduT?Piywj7@*-k8!`YapKpw_s3gzjw@}>h;ZGTaX-*hD)1tdD>K(<$HH36B>jxc z>zA2Kdo<#@H{)iWvt^fE%@b}7f)kCN<9;6Z89CH0(ttRjfXIw5IA;-_2(rvmnHSk* zJuaDdD|jIf$KyrNf;2)!b|rMleLW85dZ1P+6mJP!iyLpzD1yN5??F2U>{4i9(q)2z zW|&}^cA4O^alAVkYjgccyiTy;<+p=8mo4Dc)n%%;lTA2l_J2o!vt{x%|Ljcc!_cE0fweG=L1ro%1M*j;_4xc{Jcv zdfHGRa$hEwOC7>HSB6r3x%E>|>}U~I>Jgf!|Gcs*lO8_AE~M9M>bf_Euctpd@CH#F zNe%VC!CYnVl7TmfBMWuBcl-YVcQ^K@(!H53yb{c~Y-HOTXL1SFZEu|4CD^wAAF%%a z4jn6n5_C&vK&Li}L`9Zw8f*)M?WL87h62F|#S)`I zw2s5LO@l3MQF|%lX(-edwUty88VUwlZ6zfQ5P_h*l)E$(ZVOP1gC~(f)o16RtP_i8 zk=V6t71fQ<*}L&T3z22wkoiiPpCj{gnJpb=V1V}*&FKg$loiB*-7F!zc&z}gg}DlI zt<1GuD{unnkphhE1yFtjH~c)PLaqteV-(t!3^!<}P6FLgp@J?h@wKF}I$% z%bD9moSewnth60vi-;H55@{VL5njd%ZUqb8V@s8FoI*tFIu0^tTgO?5Y+uJ&iN%5U z+k#3-?8J#8$y&To&R)DxZeG%bH_AD6+48hyTG`UmH`v?Ujt7vS#!Qwo8ye1D6ipas z<&-!hVZaxMAbEy_*Dh3!F#F zMd3#~w#RogpGQ>IPWHF&+I~Kfu>FY}ckSA->wKtW4O@)2?`hw9KG9g)UUk0QIE%1a zd7f-3L9y~YnNt#V)%kMhZ;U%tz=*wA&8qZUi*^iVhStrbxj0VD!gjz5Xh)$N5!BC)evX~3T0-@Sz3cxv~KhlObLZ~$?i)0ov zE?2#vdaXbxk>=qTN04Ny;9c;%T^5||G^a-vDrBJwPjia%Wnr-__?0CD&vfD)@OS~d zEQHx<&Q^B)`)XNOBTMbFuuf^`o%+4*;te?FArkMn76cIQX0DgHmCUWaR_1Iq9A}#i zzd7)$h2LCGkQ}^o(a1cRnXGfv@yiemEeJKT@@SGRkLg2^|4DH@Og z4HB2tNI(s0kcti&LNj&-WQzvbf{-n0s|IP+A=>~_#wi&qK(09%P%m7H2M&yojSv#Y z5XA`D3L)Dt#A<}>hLAlNVlzT6g^2lMo3I=QYBUnIwF88jtH8KUBU?pZ?)ST%ylu> z%kF3vc!IqJ$D=lmQ$19>shKb8)wHNr3&u^&T1|YNPODcNdLyfhvYT3X1g=|fj`5)Z zuIZB;Qwy1zr>Sk47ACZB-AcFb*uHW2A2At%l3#^zG9h{A;z zUbt+gSor}>57*W48Q~4jv=w*wAE$wo@JmxWqIiW#q$Q%=V2ws*@ji_<3=Btb!ZXIM z*TAuFi^a%2=p5m;a|}7mA&EHw8fs+|phETHS%h=RJa5c^N;nCsS&iYLk+|4h4=_ev z2zr6cFA?$JHE&TA$B4~NtcqvEhP@_+S}Xagn(A51oz2`@=FVmAJm$`4?gHlen7fF% zONqm&P(Z>dQe0A?m56aPWk!6oU`oQI`jBLiT}fX`Coh;{n;vb<5fmFCHDRs!f=p4Q>6| z37YvE{Zs*uC-C_Fs{{Z-8bAn_f0RaEjc!&NsoDyzsICH6QrCbhtL>W=_qAw0rEp4( zboBxqqq^mXy%5@hA^fOr_yJd%R$_=Ss@r`CLdXReLPvG854ga$7DL2Q-RgsB;z494 z9z+XYd)vf>I5;tJcw*x16B9=#CT^IRfS^XVx*pG3YWC(>7EsCAr1yAC3|rOt87}F} zIs@pS7be)?kVx0FBmzhQaJys2r*% z=U6_Nhv=Dnb6HV!SR4W}z2dxL5DV`Tjt}><$|EMwHiUka9m(pK*7H~OOBzcgtu!j8RwI8X z@Pf6VB6`%&H?-;}IlWeQ%(Npft%ybn4b!Xj=ds{JyCG=fHeHX#V`v`)1&_I@`9wkXP zg2vqhjlGRjWGh*!V!R4)sn;=MPqyNazb;vuoRggsKnHb=+2-Q-lYBXg<8jR@xw+?q zd)q&Jja(_B6<$0vMv?sqVDJzmICBxiZcfm&90M;w>up!=6V1C?K%nV zrd=m`Zo5wNk|NF)P`wi4l>%om(7d<5?+g>oeYI2Un@$4S`+sAkxfJJgW}25xL(3%U z%QMxCPc#x-)J=-Uo2N6|Y%fhp01(}HbI~5NVZqt3)r+ZU=3-0iGSAiSS!Bj#bMb+p zJ>5My^DO(wQ8X`G+y1W z1?l#k^%q-DZs!nQ2HbNvqx1qQW{p_`(aX-mUMAO-=?pb{HABs%5sLGZ>~i5bXua4- z6>V3SFs&0!Uk_#amrPf2O?1Yh?{vnEo2SEMT%26O2F(b0sm5`w{)T{lqew9FTMHBQYywPg=2F-;9a zoY+~6Qwt6>PEFmiP%R5JGMOU_wX!%*78leK?_3^+H@G}W{Iak_CJi2$EXO5EqTM#z z!qz95g=%q?Ojauw0Q7~juvQjutx^`&%fbd(h|9ueW|f*Uo7KBz+e%s3uUrZ=^`NP0 zw_q(+E~PeBP6MsijPT}6>QDEwSdD40WIayP6Pv^DJ&Z&RWzbj;5ccEl>^1U z3L;iA>#w$>omK8z&^&Tgx>7T(JWH$@C$ptl>a3)FEbA!5?K~2s&W4x9xp60&CdQ-0 zwS}}iB5Hvy;wM@6VAg~5Guzh-3h)Jn9B4{=VOrA1M^<*WCtks^;SrvQSUfrggOVz| z5-RH+gK4~9TzYwu4YKrHC~70V8QJi1oc^k1;Fw#~LXM#!>=lKyG9sp}gV|ZgezhrW zE6s+@$Oc{s6c~kQmC4z~C_ut&%*-;(%oaT}5i>J$Ff(&VF*7ivTw#lilO}u1IB9mY zj+211ZJY#ME5}L5y-IDvY>8U7T0yGM;_gv+4e?8CNI&Fxb!E+qX~zj;+b zA-N>Gq~vXBc4^65UAC^|ZCQ3%$yaATk#2D}}W56Rs zeemoIc&LN{4;LBmh{=G@uzVvaj}ca4TlCUWKhH925kx9Jh34D8WE9UX?n{vBcJieu zIr|E6AHjzHBq=oRdk`?3AZ{5?8Ge%_mlonn5$U&x`ws~76iL?MEdvnrEOGw~gPtP= zc>4}C*!bp38Rn8L^tn zhFqEI>M{b^Qr|gNlq?1i9v=I<5YnB>8G*)tSsy?DU6R8CCVHSYL3G96BNe0QaG8W~`{4wTA06s-d8*q!Q3zG#a**6cetd;Tl?NtM^PScup@u zt4XzF!JS)nHfEG%!j{H}gY8|dk%if^Ajte&WiFA6)3GqZQAR98q;_1~azgWWvFTaS z%U4uYRx@`NbLTL(mbvqYl@md6k=TT-i~}xW!SNHX;6jyvt5L+dfn8>8PT@+WQ@A#q z!Zr3h0>%3B{gjWe#e{Be)TG#HQHD>!X^cACt4eu z%Ep~%VOfX6W*OC*B?xR@!4+#>#(5o_#PP~PrOa0=)kHg?%1+Ya30hnpQCJ(K4&Lc@ zd6-+l+$!eQKm!(WYJ#qVCdY}m?2BiewDl6u6tLk5=%*ALo>EbG|! z87ji^WiuR}F2=b2%{=&hR#ied*f&Y|tt>Y$XYxbe8#42{MYQZRN~I>7l8=-f^>0yU zjGZ?Om+H!M!#yaDvg+Ns2}+GJQdUaWOmbg0suGai&`4YuHX2Jo%~2IM#mx0HcL{Urn7fR*4aDPBEW|-XC+ZQL4d-Wx z3%fSnjWf1_Hi=7_YT>~iPLxY0Xa$~%%VF@dT$`X>4xSE9Z9IU+74W9WecT9-x3d&R z_->-EF!r>#jk6gzw2BLyF&{Ns+qr_ME>gGR$3mQvdUYFaZNWj{L1Pz-o7;uMzun`+ z%kNQlV>+kQJ?zrP1|0Y9O|p%#V_7*ak*uXq2}+i_Z`24wq+al&12c7+UM(Eu*pWBbV+O6%Qic&s?i6 zlNLkg)z(Bi%8OKlIA}oRGWiXYN(P1IhBtz)Luc&TH-ZE!z~(oKz+m?qq6C>@XtU?F zVfETKLwugmFKDu}EdT*q-Y|7r&STN+8!e1JR!~k`$Ek*%8 zY%8e*Gy=jI#_ZuB4ToFtuxk*2P>Qp4;&5vqAnQz~k!UR7KBGQHAhL6Ew$2pu#mjo4 zVToPVQ(;-buIpJK6UCSXup7rz+%oat=z|BbKMNO+@hD5J%r8*<1P`==h^I|5ACPHC zrZINPMU?3pnXc8Ahm~~zv%!IKUF1X&ln4hC|ENuHN)9FaL@;TBxy>~_vZTyt=V+0Aa2s70;CcJu1S1Hx#xpvDi-v2M!F zm+%7UU-f`(FDNwoa6!RWi5JE1KVV5JSq1mt#;v5=qF#dEv_mSQg!^aH5TR4w)k}@Q zUI^^dXPiYN@Gt}(!7Zt%e^3YvL*NL`Q@@MtU-ebuO!rZ8z|N8svO?04b!44!E8lHb zuVpaWwq8*}-R4%J9bdhbsJD>=mI6?BJC0c`2Ed&W57D+4--Q5*0q|ZO;Jrk> zn`kV09|BknfDh;ZA0X-n$pKrT+opa90c-}qhjoAt6ZIoNcmW9gsB!ZLUC8vS`N?_7 z`Pun_bp4^&-+bbzyx~;YlWKaSSTb$?jNNAz!!yIC@_)R- zW^h)YO%26F7BZv8LxZ8VkewY7a#g!)+!ha;*6_}$m{Td(ic=dlLY;U(h-deBpq>M- zRGZtNb7eYDnaiUdMCVgYogsLHRx#BXXe?Fu!jv7phMzTOb}e%k5XGwC?1P1EHDepr z*`6_IoG2*uW-CdO++^HQLGg|Xkt{;tz6gaoURgo$%8J717~YHDA+q}_cpeC?Gw!Q! zaP?|K;cncUq%KDRo)wS&KwZIZ0B5INa9_Mwr(c3-L+Khofg4C#vsUI{C!j40Ym(}v z>2LZ3CgWaV^M=pr1?Q+_Cg4B434MW)csbp{vKca9W_e0qaIV=?16-@DdQ&{Jl1{0` z(>A_;dJ`I72@Ca0d_ubLvN7SMu%qo(ZNsTzC)jxK9vnB5VwANN%Luj;CdfRzx3Z!N zR})P^CYXW@q@dO!L{YY2-LBJGL>;z>I&2Yj*dprGWm;qCplZD?+oTnG-4?OR2k^XA z0JYZuHU{Rf3O=t}Fl+exroTP{Pj)tM({!1=;5Tae(zZ@Ij)vnVnOHf^A^naF?SJj7c+MWvDrZ~3OKf0OF%?& zR=k*k2zcQHUVUZ53nv72*o!)~3n!M~InxwjrmrP5wnw!am_)pRNg{Z|5+4L%DTKy} zLL+LhaO|`i8qG5E8xid~^LaSa9vw>xX)!Jk+-*wZBHAC0Xg7hU#WbyYabiMk#SK=x z$P8G+s2S6#kNBK zuXmv8ybPy_VsLOe-u64=wA$sasi)QSGhNLkXHJYRX@tx>=#)It}+IQ~RxXTUS+jpaI)K7}A`0ac4?CMyz zch5#Uem0M6;irvTH*VXweUBAB=m%!(CBeIG#qeB3$%ljcceU@_xp9}L_zWnhAGHc3_B&=cI$3`0yS)14l*XY9_~bm7M(X=wT+i zaxOi@;78?@cXk%6e%jJ3tpVCeC;f85+%>s;rq9zpl`?Z7myLM33=dluM6Jkiu=KPN zuB#dsd}}l3ZPSxubg5^_KbtAH9V{OIn~lZW-=*m~x&1x)?rl0rig6Y%ryK_53@_}< zwVYSNMJ6i;jiYtZ^TJ>hg7e^{qj@X;CL}EC6z$FhvH{vt#$bT8KXXL)+KsYd_gwU8 z%Aj@*Pd~Yd$Ak18Be>o_v)H|`Ji5E^RAE&edk6<0 zmL>k)d)+-fl65&O$@jDMrn>sQSJl?G$9>j=6lyE2!l9RzG47FmkwUbgpsYrCZ?XMCIf|g_? zR$wTNR)FDgW~2}kib5KRq?`n$i9{%GpR7buafCBVh2=yrQE2uphf{GsA(NF=EO4bN z)~Z|Ptff)jMHM?ME=H^rdl5uiNw{TnCKTs%bjCxb!5*v7*&Nyjnu}XOtV-wAx>BRd zCdfBg5%R?r)HiF?*)p9k*Ljo9R_H9K%VC`*bTz4SNMe<)tBYUJpmq^mWOX2S__`6(^ims5P zz?C#+o%ga#3!igF8sZTr^U2&tE4k#N8%bck=r1jEv8Zr(^t)cFD_%s_Awh zidK)sF~nspiMLCBR_a~{V@g(5N%zYWh|*f&#e+6;jCE3x#406COKXe#3?}Spd65fe z_i4UJgCCY=ixftfa*GI0UoYdAZlQg zjVEksMJ=uYQO4?kK{StM$<&fg z@3eH5jW*S#%UQN!piC?eD{}ES&z*BAE}7tAWrZv1D$pLqM<|h^BHmfKPa3EciOk$g zWwtVxorml5>A7;FNZL_V`KT1Z)>=ANnmSgB)t&P}$9%B{1mA| z9Rb=}I@(Pg?P7grHRz}o8$h5sTa7x@tV#lDJE|%lwUMB1-DEjeBsODFEkH}DVl-=v zNSn{HC<7AXK;rU6;v#e~H+pNY9@vc~r}t=eC;;WEY!lnyrmIK6k~IR0@xIaHszY63 z2Ta#W$I8%(X;&^&gLAcX4NuqNajUT5DjtQhHC!%nQCQcC-whYKOQRW=uIP$-4~NWM zLhsSaT|-HKvwh1#ATVfEp^gJ-5GKDSk8KR-KFA+F?g}v_2NqSU7TIg zy;x*&O(k&mI9YIYjb$3l>ug23fpsqx-MOaqbQ`nVJ7!*GE1EVu)7>cgM{$)Zy^NJC zMq{r{@_w=3j9QLHKTViLF)-Gn*coURSC8VpD~hZ^k!{L>vuwM1P#iGh^Kz;fibG?W6+K$JlwQHQTf`AE`NApwW+;$N$aU2(fYs=6=_xel_ z?bb3y*`hmvi5yVfh_}%^%Z?Q{joSFcMWFB&+~&QFWy-Q;Hb^l>qv4;pi(xIck%}?; z4H$hd!-|P;#dh?YF#3Lmbq%6@b~NtdinlV{G=^xu9sMvyKf*9$5M5-?u#1E*)0#zl&;YlTKe`WWwC(A>@;_2$y=6lk| zpJqq9Y%>1Y?`hxu%I;}TQA*~nb|n0F-PNu!Hv?)!E$wPAys%yEoAjB$qR)pgOVm$| zeOv&?)ir40=HQgo#?X;&ctsJS&j&wqP{LNs<|$e(5Z}z48F%F|uL!=hWMZAEPfT%IU~&vP&CJG{ z3o4cK3fkI>@{fO?(>8cFyrMwj=Y!fs!ig{0XNFVRK>TUS~+S;i{;v5sfLX(h)Cnd*+Ok zOWt{SR7ZlVB_rkLedKgE@?}lSn~AO<+Cnr)G(~0(iFza_oyV&aXpocQfAg;!HzhFu%xXxwOXaI4!o0 zHWf7m(mIFmHWVB+1!Yt_2L$(^V7atM>?O6`hP^{0D+}TFRWPdT#yby@FW?@?SvzD* z^x4N9(E`5)7;gl|L#HynEk1Pnb?vE(rGX-d+$@RL;^YXYk%wMTX{=j&$7xIwF)cLq zMkelIr*a_kMi{`KIh8HK31y2pp-B5IdSJP6rU&^LU9*lHhkVUBX5b++?pE zQDA=ZMuxM?FIuz9H#3^`zyQA=QZ)}YYSP;w$p-c?9&ZGdImGKZ4TI*Yia7119kXsdzekn62J12+)humI> zvoOomNg)^uVFvB4cf~{q#zH1{zQ-MQuOFl@xqE0FBJ=+hNMm8D)9fEPYrif#XOs7g z#S;|PMnCF zZ?3aD%)YK;1rTfA33zKW=_zC{#5#N>py4LGbQ&$kk`Xx^NlXH@sDwhnq#Q|v0~1R? zPDN9QDMyRWA**Xqy%lQV=6ywJ#T>Z+9ZoH!Eqv%&a0_1z=t_z1fo`Q-_g3I~t~yU= z^AQ(LsnHcO+Ea>*0M`)Y8rO!4@o1aw;*zFUnnCh5ux?R3(Zxg?h%P0% zjOcQrO+=fST5PyLaS<*`a_>6HCowsION@$n(q46&U5Ui~*hygT!EyenG8N|rx<-9P zvDsJnI$4Hqu{#S{m6eNM&_t!_ZmAO8Edeq3ytB+LSBZHU8GDX9&WI}0tWF{9rujX} zLnRf^z%4kH8*Ml7oN9=nN9k6?!XDhoC!bS`L3ydEycCs}TAr!!;Cya$i@^t6)YPF* z4YdK7>!Dv*f~yh_l_2QQ(oT2AgU6D#c-VkjEVI@t6q~&n*jw;0fXN=}^k#g-?qdU9 z5wQ-%t9Dzf33sL>Q=BahBEhy+g*bD0gUrlg;}-1`~J_fM1^4FL*ZE^ zFz%{;HX^!}-2Z=m3MSSv)9MR4R&QYmDdBK5>@KJ_p+qR=8z-xTqS2^Y!75x89s*MF z5Ml$FP|0LJr4;MR99=>00!EdC+kk^keMHqH)tARlQKrC8na>PpT@_iQlf&ei7Eck| z&<#c&y1~RuDS&QRlyM_;gJF%i;*n|F0emp~^Zy>Nn&K6cf#1d3@sQAZX_65`VP*F9 z9vd2hcWIrh*|%f!dVS~a&HLK+Zm=ee<7dQEEH_M;6MBypyn!2Dg+>aC0J1sVmz^K` zo!`V*6J2xB#7)nI2k?d`TM_hR4-btWu;ou5HB9qkyZ(NO^ z)o1PMHP0&#%jg}}((d2gpY4ZN-P=#=fULia3dy=#Oa3}rYwZS8YHNn?5fcj$x`Y6es{@N@`q2E?yDtM)} zee_O2B=p(_>Q~q@YgMdnh8KhdGbelOz=0Fz&kbn}g%mn(3F06xCy_QZ}tt=+gJ3B^teEPhmeK2YUXMB8< z3sk~N`$`Jp<~!%Pb*l!hlzMPoNLd^(E*81`vUVVjpN{K zmi)sryg#ckoAEu{e8W?Fn*MHAk^tYN&2d=VE-C=%yz^O9*BRJ0j04`mD}iwQBIloF1_lS()miztyqD5*q3p^zF1rNSX49u6m5cDJS^!||XR3I`(z zC6P!(fF~G?s-a*q3gJjNoKg}=(3FaWlW-5>m1Hm+2Z>lDtWqzoBp@69@f8?E<53U@ zry@Zm6^bQ11{({HishC>|CqpXD{OhLV zEm#;Bgt@M1izasu*=IG3UORJM+r$D-_<9ZFV)U@rdhc{RT^Ytr)hQo4fAoD^a=4o2>FYPYNBA(^gLdT|_Q3<^ ztMV`#l#d)cTD04IJm93cZ;4g#>m3c~imKXj@`5MpCz%dq%~b<$;inWJZ!`r%4L?P+ z+3mQOF3swfzaVpmyp^uYZn0fQWNeFz(a!*&4^&)l}lX|G^{XsqFqfrvwbE zXm02)&KHs`?H^yNwKG*zf5G?&%F8nAETSBdMQ1-GFl-#LgP|E;>%`)-eT1Q#FE5Se zt+Fe!S2(Qeio$|zKe6p_AHJxe=Gmoa$@wXT{L3n~)5ynEj(?j@Ixf4XZkb(zc@;KT zmB+NRp_i(g;o?=q=-}tu;?H?{GxIj+mF7^kuIdL>3LX6eCo!*LBzXW1mG9~-CD>W2P zCSqzhlnOx~8&5?b97%tL!NLj5e~y(3L+qlP^g3qPSgrdMNvhCtH!l#PLUd~WUlMf)2#9|n+N}Y$Xq|e zRdcu3=PwE{mAT)^(ELPJ2!KOJXI9M66*oe1r~zFoCz#PnLK>~s^#wYwMFV8h{Djw| z?TM>V*Ou$Xe4V%GMu~2e>O8FL5rj5($I$%5lhPSFv(njWovqQ?TAi)anQ4U5th0?e z+oH2=I@_tUJvzTwXP4;ga-C&#c9pL7=sc_QqiBfYJ+AZXb$$ZPQPkJ!{AQic*VS9# z0d8ZuaxeTo2!Bt&A3oGm43F`kxy!Q<`Vjnm4F3KR{yqnPUxB|~UHul*eP@`iej6^o z!w`F&|B&hKA2Gf7rx5-*t76747=(TaO#jJ@|AMglxA6BH`1>`)|2M?{5q@8Uzdym> zpPBzdjQKwYf6v0-6O0-E1Al*kzn_Dw?|+%m3qOB_zn9?e9Egu_;}#CTw{qh)`1Re+ zb>AJ_cpZfKoe;j8>l`!l3%K`2Zrq3QZ-)2>xp5Ojy`38mqxd7-KcD%34GBGom+$1d z`Yw=sH!pe*_df+u-uH6<2k_Q&-2Z*Z+eb0{kHGdR?*B9@{S5d26KBTfG5!nO|3%LH z8zA^4t{4A;8A%gjHlp*>+z43&7gEV&&gywF>&_x*9ilOZo+5sW&E(m#dLnycxLcx6)x)ei~ zVdx4BU5TMi40S;$)(xRp-$<_%?}t!)Kg7icFf@pvt1)y9h7MrpAchWM=rD$kVCY&5 z4Pj^)L$8sf_>B@Biy8J58t_=sR7a?H4yzlo3hn%%=o=cI8<65znQ;}k37vwl(=zokbe;Q-VZlQ@Xp8i$cIST&B4#&jZdJ&vYW5`G9US8 zs4kN96;5VVyY688b?h#7Cwo212k&-*Z*YS5IKekM!TX%xo1EaAo#6dW@Bt_I7AN?S z6MU-^e47(|yAyoa3BJP#KH>x)b%KvM!N;B8NhkQE6MUBwe76&Pj}v^a6Z{7!__Pyz z#tFX93BKP6e!vNS&%wM-oic73$Dg6Z2c1T`U99|~{C03H? zkmj?}=5^9siIuf>NQ+qc`VPs>DmHXTOW2&1?NS}93=!|#bh|W%&D+=^1z6RZcBz`p z-_$PYth$llxfiq$SIy>jshrhzpfTgZ=sGDTu|-?jrD9gMgp#jsYnK|?;(EGRa#5Sq z#2U7?OUu~O4eiom*4WxEEo95qqXFac<&>?al^s$&YhFweD>k-EMXV*=Ayu;AwhpO` zh1PUP3s`tlhvZ_BCX$G5YnMt{Y*mM}l*PBVNy}McbB9#Hl3O~Y5|&y-np$^sNb}gr z2<3WJ1I4Xgu}<uN4G{LnJ2@*QuJ60H3()+ViB9oMxy&nhDJ;$K1eKD8&X8#(c=}fN;3+CsGuyR} z?Uq;@Tg~b4z>XT|{n*Ymc<@TyVV}&Xli*X?PA^9S>{vP&9hjF+WUfE>_F=>gWSFCK+lvr&@<&O^h~*1>>RBv^GcGb z&V*eb9pQ+JzMD+UM$;ZX;_X$$-X6vD+IBG-e)TA$X&(or;t~_3MOD2oaY(D{RPd5z zXW&t)cvnAzWDm;yEO(Igv(bb6ESoQNVGg>)Rs9fkfR9gHlO&A9^bc~=SJ^;68JcAk z)FcK2#pvej8Y_}fbxVhyz?_o&d<0@ zsVX^lj{owdbANs59E8LTphVupZ~QlC7fZ|F=kEV2K2h@r?^TpevV4365<+}>wu)xm* z&;avpGa71CHC3E@$$^@}>D--PJb>ndZ(#`CN=b_cS?7XG&6XOedjVP-Lc9sIuWAc{ z{hiD-lzk_|bI_Z~pWnh9d9-|w>A?sXF9pVDEXHS;cpvLrv`-pXB;LmX1ko@Jf& z5U3X)V4aI0uvmPMbuNLx67d}CY=A(6_z>${3W25KdDhvO8)y_Crjy+W9#{nWKactT z0(q<3l*hvLi?33$8>Fu?@ij~C>x6}C%Y75&zQr=jv&%Q-5pezDj3sx5iEp#c<+*|7 z;@=4Y*OvP!%KeOGnzBu3t7*&q+LHS<6Te}dO}T+4@mrMh*>ZnExj(Z^bG8|+Hf_0c zmfSfeMtEm)ZlGD*!a=Ucmb-_eZ79#I$gTjnfGzg`H{~AS;w`*$MQ&h)co5}^ZMl;u z_XN+hWLrS4#Fl%?l6#7a_wvq`+(3)?2b3$dgjOGTS;(t)C%9eYb z403nMnYwHp$j!Iq?v>5-?v=$G<<7bsRL=WkkgK-k-hpzD$eBgiMIg7pmV45Ydr}tf zlsgyYpmx6tYdA{+6|{6#(9I;sEw$xdub6VLSH#^) zXG0D?arCH}0+u7V%XxeP@ruu7xI z6Q)T1?sCKhAHafEuu)xo8vf2;NB2SKt4rB)KyTvDE8=;jUg}jcYqD!@?NzY@GSGOw z4w%J)`@st{g*3O&m|Drn`=gy{`JdjCS{t%LN|QF{ME z>3t69t&D$O5uY~`Y|FNdPjKBC@dYQrFG7OrPKz&@34VTDf?uTsoAInSowz>3r2kYp zcV%{O*)4VNg2G&3+J5`RZ?I&3t7LX%cY#C;Mq_~qjDCTl(|e>w@jHA2L0MPT$FLjv zvr;<}@5OAY2uE<1eUC|hhWvk@G5q-f<9}Af|0uca-ps|Bec65Ki&=JWSq5$If6U~+ z0Ly9pb`fO=agKJ(xYWBOJ5E> z#Y+(UEZpnSderhCK}ULvx@42MO~slNf^6!yVK!e>a7@#yKneVc$uBB6thw@_;tXs0 z+1Nq(Ec-Q+UWCm2hB5qsIsc1__!B)HcKWwM7HS|1{R~s9Lk&;>){sEXUbZfn&ag&o zL6oqj7Jm!gf#y=h>(q^s(kaPvr7nrbrG1ierF4}9L(H(|Q`FxpAaIvTy?L*JrRj$B z$Wi%OCYW@Wik&;sUo-xC6?^x)fxf_$2jJ&-OnnM|e$TY`!p|R={FDtG{2x_t>M1rMr2fctFkcWP5VyUN+JPh5Qy359)V_2h}l@fsVhQb*~iU#oN{#mR!$t1-R-<6FfO6n`{(6ylFr+$+VC1+iCSJaMlQ?}Yf{W(LQyo6^U5 z_XhDUHFF(C)l1pSve%ELuY;m`ii&Y8yKyvqg2OA)#Cuh!f>1ei@wAGS(-n9GYQ|Z1 z7k51aZ{qdbcvi*A?f!s@mD}^2DxOhk*sb-rvX_}d?_NW^PtDvg)?;MXG~JxOL2eZ9 zx2_XSN9p=m6)s+bwL*MA?Qvt09`T%Nx(cW7;X_dN?jA3E4>!X1@SK`=2JWHn;c2zU z1re?uSC3wPB}9Bw#X(yHN0OaT^*%*aFOI+=Q2RdxxxI%o{3+p|QpKm?E#RB;H{d6G zFPA@~iqEK-*N#%@+%%ScEvIkwpVUkYKFcjJzDfKuhPTA9WsRzuqF#kvyNaz3B=9BB zd_QMjq6CmWz~wK)&s(_i6;*s$&5W?zX!aJiWGp?x6w>__EAncHZm^?O@l_RZoXr+I zrVzr6U*zm`a%MXC^H$DB;pc5!9#h4rnz1~U>;{U&}6 zruMk%QPiJfJMtYWtiE2YcI0-3j;kN#(sw}jW1Qj7Z)30OcJDCKzXjdpT@k6yo&)mhb zcd_S7;C+Z6sc_Y!r|)7gPjP2n&$6#)BX_gx8yHjwEqf14QyX1w@gG>Bwe0o4iFNrW z2+ygf?`2S1zON$U%XJpw%g^8rJZ?hO74;|%NUf)Zs_`_JeoYM#(o+5#pwDpmx2pIJ zJ=huXTYN4xhfQQXJ{L8RAS(V#9UIGDYPKlWBaOl&t@|<%!B%qAY9$3#%cRSzs4rkq z|K2I;c&`pUa<7YC?C&Az_jC4pDrb&ACGzj7wEuunT>Yae{$Q8(A2C-3l(su?C+5oC zV_2nqFV|iK{+skasp3Vb&`>}(!TYA_tcyRXnbqcd7=t3GuQvNe^bTIax2#q%FXGSe zT`lYNj4O3dzSKS9f9z6sQK|n0OWkFb`XAM>+bBK^5AJpu;;&|@r&L2xKZ8#`qFKdm zc}c&IVTM1%r4bF^zzF4@-vU3+bNMz++@hJU;5H2&R)<&M3iRN^!UtbxzP%4~<#u5I z2v_gW#O<0n`-hi-FM_ygd9V zmG1@mNv_7Z1J_&iqybT}t?MNPGTi(XFnc2rR{HSx* zNByKWnt2Bs!zM-9@($p61bH6O5Z&oD7P`~B5DIJ+4*C4n)8KUcJs7(hu|ZO&f)Jm~ zJi)MQ4`y~|cM>6R5Cd-gQpr4N-2-wds~)Jq37A5*Gu!2f_R1DgWXt;Qqc%9MZ9P*} zeIBr6Ya!d;j%jOYU0I-YMfb3~D|>k8VE0kD@@(F-BN-2d@OVu{@8N?hdWH@kzGk@l zP~Xt8Vbd_WaoS84K9_m?z0_3R-aS0ni#PWU9_(K{y$;Kg)jT$1%b45l4bw~J?R%$% z>ooFge`f^9NnW;Xy&H)KKVsr2Zn6|pb=lBm zkKtp4lwYAMi0`19pi78_ExAX~sRX*(MhyJ`FD@-9BU(;$4$*ncWf&?`85)VnXef&- z>x{f?lT%;jvOu&8++X5~7y2@C!{o?=--_3=pdDbsXS$WZ>60vqa5&wK&qB4Ci9DQ*c{YB6F92^}f6uY~8xG+y zw?3tNX#ebwIP1p_4G#=vkE*0%216_r4P{O&okgxmn`iJ)_OP8R3^&X|68Su66lM!z zcs7E_=Otq`OH!qa+2ocOz1i-g-3M%0x|oeDF-B%vB$oO@!!J5Q)sT z7%otzu+U~i^S%C+2K}+WZWHn+7(^%^bfBC_1eHiQhPXempb`$oQc5I&J{wap^w}6n zqP=iZ35Qbk3Ol3b+rU>fK<2(w;;aW@Gt@gs-Y87a|qUVzAmrP`C4NQ z^OL6{Nmg8@6C3402eKG7m0v$Q4@72Dq^S5-C&%69~4F1 z1@~6sxLP}d$h0dFnRcaEbt=n`FFRfW{e0u8tbW{t{w(FI#p=<9;eu!SG-5;u@&#N6km*ri}H#uACw&psewD&hGD>*M_|g#n+)>O;yM0`Vsn~_;#{Zy z`XfUyf&upYNXE2`2wh<^p?P+;8!f~$wav9h2L^|09husL$A-zW8;>1N3cNX)J^sR} z%b{g(crU1;0hZk@TjRJq7=W+aasgrDe%R4?D%@+|vdzDzhf-{t^cii1Xi!gf^w#C! zEMD3vm^SZArg@Y@hmYFMDy&Y*1Ru~2)5W@}3%J`VLCnEW|Fy>khx+?glKDOsHyYC) zI(Fc|qUqD#4lHD<5}92>s1_a(C2AX3!{X^)l2s%-vX-kx82o}3(=mjD#o!$r-gB&n z%4tV7HTzt2*A81^n4xKNGMv}%7=#qUJ(LU%=gmjRs(eRw!z?n=cevlo%AhSwkOg^5 zliG&m(-qHz6ysB;h{lYlmrP?09Ub>Q6E*h%mrklB&Nqx=P6cWO6I=g0_6CnK~S z*_r2T>!;2(%?>B2QIdmWSTN%nV1cmGtSgZX*z|2`U^^D`Ai9IMt-wo zrfZ|kAK$pVO*`8-{)$2>=Q}r=Ys6#ms7fD)5(|bBo`O~xryC*Ns*p-79*JmH_Y;c5 zgMo>ku@a32Q@Y)O;^uUV#%4*|gbMqVon_Uare4&{{)@>uO5ptI;C}IRer7 zMLOT6bMgej$ryuQqVvmi`3mC-Yx)8sb~j;3tFo-S)N%~_i&QS_>O2frLcHWs7f`qg zE?h3P9xrNY%{z^BXE8c?Q=3dpTvpW(2AhE;;8J544x@01q^`n?L=rDt>RP&}f|2Gr zng)5>dB=wJX`-8mZXvpr=yswziS8!4m*_sCmlD04=#^}NZfFurR6M1-yly6y?J{)6 z%E>Wa#V$9@edZ8&YUM7M#?-lZ{8O8^%VRLT3Xg}n=I`=(m{Gk8UWps#Ity^F)QiQrhiGqZ$!P5}ForI6!5Dfp%W&@-_fwj5(QwCU(U{?*Ti^wY z{eVcN!C1|aK5;5^kh@@NyuNPoxiKh$&{?@1+D$4 zwMObc%W7FaYV8+UTno*Orrq4sy?+Ybbz;EQeYLIofH|L%l`BB^wPud5JvPF#a-anPz zpm+fFKFI7>_f|T_h-PAUGf?~poh8+Ar!Xu%!tfm;RXNg#{3sKTvi$Du25WbB0Sbu6 zSdW6QxdqaHoJ~?t@C7zS#YtwD)RW9Esz(`a|2}7J|GpcuF`YR*LuM)B8X^z31o*CO-6C_|Tt#Bo^L^&zz7xLC^dN zN(O0C{v;Ehbe?&=y#WR+`O~8f{NhsukNoMWvam*cCZC1R=CklgdgKpTkNi2zkk{OG zGxLM%Bwt;9Q+TDpx^y(LZQHhOYhv4WCbqd^Oft#DHdky-Y&%)Ogp-`?=Un{z{M{cf zx^KI>tKO<2iozMnW_k_t&b@D;X>;Fv89y-Yn*G66(^?cG(+a$~iSnRXdpy<0R~mF? zU|5dLjx0KUFgmx-<*DeQmT!!>dY1!}oqKjAS?2Kip{fH$AN!jRs{2L-Y&+)okDfD< zeo=ornXOxuK4|{(h+vJ;G+$kx+gz+R7u(p;K26&{w{>OP`3iLNQl$2W;xkw#qiN%6>FS82fYF+ESrW`bMkYpp&-<W_gPTvLFmQ+!3mC-N{RP%F^9D88pISJUZz--^`L6A=T``Swc7J@|Xmi*Q~6I zow);yv_wj2A6O+pFssI_#q!LM9zuCm0pI)~ppAAXF4~F51kccvsE<{iOeuzpXrqbw zOEk;^D~nah@x?x;<*=xc2D0&EsnGCg;Fox6pO;k0(N$>YeK@NL!?+=R28&gT{n3X| z6;T7e;$*T{N9h|}1dRfW25{xLxUnF~Jz=b=Om(`?XD8hlDs@*X%y^kOrWn1wI@;Qb0*x!Z@>=py z$|?qAEWccB?=*e%&^Oag=C|ACICRpyyhe!XLf>ToP7MTFFlSON6J>khaOZZka`_{* zf#@+=zKkdF;$wP4D!`~L;c;rU-=pBKv*bhGk>U#XnO=Ua<8lkP;nwf_tIo#7RRoZ~ z%hmU_D1@nZH^Z9+)0rUyev-MDqM5IK0r-}`u1=kl%+jlxAz%6Z0e_eB$qE4tZV4C} z)Ep6NC&EGy#o&Jb4&?0<>U$5;2XRaNk8Q}{8_N-G;jGOn+*G|-8kbFCC(Noi)W-5b zU~B>vg=ckpyYJ5s9D@5$Z??8BrwGAW)+JsyV3o!F&lU=}*!56#PsgGG)waDW{-t{J zpU9TpSYt+t@&2OA?NARg@eI=EhtX^*J?G5VUceeGVq&%>Ck>dacv+Hf{-g|VGTrLu zb}?nz#DtamEn<&c6mTeYOxnhAj7CY6Tawo%$4RU~2we$V6HeAIyBB%8`O3GC%C}B5 z&(JhJNf_NLaN8$PJBLs=-l5K}p(y+VZC{tbKve#&K;ABe@+}+9b32CM8Ppd&tinIw z%{SmJFz_pHSA=)q7oI*bC!%d4rIus=p8&cZhTW*j;2f;Ucu+!@JcJ@MuqBYHSJ{w( zt;K33&#k=Wnx4h-wcIcRYf39|@*lLy{j{RhHB*;-96-j1<{;yVe3SOpad;Z4uTdFJ zzPiFuM+y%i+#3t0Vc)SUHlX?^oHvsE$<3Yr_q9z!ORDN__$Pe&)`OWrLY!-1&FlWa zs15;F5i{Z{i%Hj>5QvKaDPm1##%y$~J{o(u@$BW*CNl-&QlqHjme z?D8FeK;?>+X_xPjaXOQ3IpKchmdRXtu&#S45V8lx&M6Bs*YGmXaxY2zfGL;asMaKr5>%27}Pw{lMrq$YToXwcsKa zw$IoZA4+4)G9nG>7XXY4ZB|8lHxZW^-Qk3d`KziVnVt9R-5YU355EX=uQx-tU(5!A z?Ga(Nm3)HTznNz8z#Gv7XXjfZ8qfsdx^0gLD-J)JQVS1Ow2r6!aRbX!V+-yvnKj;MN$%okk8 zrAH#Szh~3i=L)cuWV>*5N_|oEK!=J91;l^K%Cm|xt|W3PTO?D9;dx~38k#X369}lv zwDlqb%gF2--Dt4;PwsHZJr_=H$<|IPyaI_&tzHmBS=4*ShWZ-m^pjZnn~tT===QV% z(3Hk@U8T?cv_O{2=2oM|$jbb%L;45Yp>05@o9b18A}NybADqpwpAsC)G%?@ zKU(jcIb0(xbKK6THwRw130j1yF496+&Ue;MS7`(Jd@$!eY=W%LUhx7sMM_6s`7lJR z0mlZNcnn)CHA%-hGcxz~6G=D>V~&LB-KUz#TX%7{@C3-IM?P0#o~aXeh@Gk!fIOd8R@>MC|j%%MakF4R&qPj!vsFe7*o(pi_XvF z9App9Nm_%NiB}QET5~;lWZMpKy#Vt#Uy(V57yb73LhHc}kL(0V<+!$6KilVc+v9gq z5~9iUghWdmiLQ+v-0OruuV=(wKX&&ZhEeGz*~s+=f$EK<5HC)0NrcXI0Y49&hNeury1vI27)uc98gs50vBYV=wC1hf4^scKhgqG-W2PAYZ+nO>K~B*TqcR$xU+uQ^+tTIx`L$2vq40R&2QuJF`gLRl$EBxvnu0(M zcYnm{Y}A*a?b3d!bgs}u2>s06t-+uqY#!ZNx&ZGyZ$%O_8I8uhudy)$N?fsH#px%AUkpq`z>An6A|&L zRPT+_Gz?~Jk>R)Nn|o2jj$mF49#t$0&g2&~6xQ^Yq_uIdKcea|}GL1o^1a>cvlYbzVzzm({9tnt_ovRH$huyChYOEpp z!uda)RVy3acbi_J>!PlKgA0Brn|Mc$o3SP#Fl77s-A1kCKD%Dg&)ju7)v$c5h-f=U zkH4{si^Q6r!RuD4VY%uN$b%3$Oc=xws>7lS@BFf`ic8;2KnO<8x@fii5Yf*nMmMeG zh%if&N<~IaS$bIf-ZMR*x|6R|PVfD?lWow7d*Rzf2hN9|6G-8t(}@4+S>Yt;?*iX0 zD$Cq2^-zgP`b+C}TL=(2PVhdbuEV*?XuSx-@OLqIU1D*Y{5Cy_AdnXy#_R|vTDU-< z--TPuT73xUL6e`3KTN?(M=OyQ?_0DB2eDU~T97=P=2p(N1y6V*ndnB?*AuREe9w*y zV>eyAanIgLEZg%=A(}Ksk}(`*2{k>=g;b_k&{`&Lo2eg-`!6bh)vI^Vn%ea@wZh8=;Vs2=P?sXkdC9| zGi0l?^z=TheTyNy^X>~U;gxzTa}x|PGNJXCrzK1pOEHm$lOi|eBSc!1gW^k7Jktiz z7OT=SM`5V(VIob;>&hZWnV|v{CyFIE^>wR`bm{4Tm9X()!cWG?8YD*SOZVcBkDI6} zQ;VPYQ?1lgAJ^QL;uEP9=*&xNKf8OBqYriKTNCHMcoNTjhw~e<%IGvGYqD$ns*06K z_br{#ITft9|2eaA3eUvY)@1e;kTk^QF=Q9tPI*0?j3Taw7T#=zm|<3dc%!|$#fR!P z8KuMl_^-;Km{wFIG$f1!)CBYdv;+(#R3$V=s?O9?`jV=c zTB^>(Q$KBOrwVk2Cr?>o>X!|wgoYBY@!9sMey5`nF!Okhql22GhOvh%o+g& z1p&&i3^5sW6U+7qT_eG@$_g{w@98Etnz6r1SeIcMj!*?)qR6?8#P}p4NOXh-AQzjkQjDKQi4o(OrW+)De)obyjC8VYA`v|^#Tq(;Vhk4fYUMGs zCR(Esyc#(KI-6i@1a)|;uB?#|f+ zQu`3}8!5HC160g3?;WYRsDfD)U4xdx4W}Dq$l>RHb}Pa?AkwwKiQ|R8B$~E_Dsl;i*qYlvG%nK zCfo?rJJua4C1GwY|M=MwlCDrM>UaFf(X{Sf{eVg_vEQF5RIiyUcT{pX;qlTyuLP6~ zuE&pTZ#ix}Ic(Pl)>&K;Z=8A*NIbN}EahkNAupQ9osH->6x+~Y)&IUAaUU4KY zwubZcz$2N80RS~7m}m+mF|y+?&eCEhs`9+VhzxtGP^)HYxXYu1Vm6Fvcu#v(kN4jDsM{H1%2dNEyA zuea$BtkIY1fpBsz{@1cN)_BC23uNY>q<`UVNbusqcYSp4>QFtN@pH3mcWVW9Len*1 zw5bkpuOIiHR=2&|pUlMcw9gltBGZ$_C@6o+#g10s=&eR+YjLN^wNqJeSwAQ6I3Jcq1Gouy=-T z>Fwug4ZJ8kT9O;#qO0qjzP(opzx#w5p6ecvTkDQ61Hb!)BmcvceREFWH) z`%ys<>;sbjRCDzGAo^gGTW(oW$HNUtmaS#rMu8IXee27Q<3RW?HcG1vFJWMH^0&qw zLLG%R7ZBzYm)GkQpTS-e+HN$lMxgbrdMZcC%J4gt*WTJtI5TT5?S4t)cEIUr^?A+# z*GjGNX>(S-tU)_#Pia;PZRXXaY~qB_BYUH5Z+;e;ZI9d$RC+2$dwT%zny3Lm^>``p zku(!m0JqP?mfmjJdv9F*KA`zA^yn@lXdSdad6}nYbxlF!eHMe-WdIjpu119)E1dy5 zmC8VU!;X5wTryM|Q-mHDE>Zm*E`pR0{@1=dBkWfRCYts>NK!tgjNFw94dq*gEIWE3 zBDOXhjfpOvQn*(}anCzO=$k^aLgWvYOnP z?YG@E8WvGJ*q@~i3UH6k1~8d!aI7#-D^$Z6RO7F-<$2gSelBiwupG)9@^yI+s(CHZ zKb@WwRUuyS&EQ)<8a)YQAhM%6a-WamS{nL-`)}$CiLvILE)7i>xjlfTKYZ96gqFG%OF-fUq3wIxIs${RY8(%=wB zshAQj3o!Sdw~MWwYIn26iLP#xy2UK(M3P)Cl@--<-nVr4`R}YewS2*AduY)qXtZtU zIG#p_C15I@xx$qFg%B@nz)-Ha8mS6d z^@_I4h7;_T9UgcJSz$TCnx*EI)!g%74Vr)B1{9^3g=FM)SY18K+4X(Z4blL)3bSbo z?!^ws*=jHxS{)AobcVzAc?K0fzoiqhWe}oCB&O~`oRuC7AqrewC^lRS#VB$WJSggL zxJr~$>$|IWLz~;N9sg{fkN0DeX8K9XFEuu;)q!SZhgVF|=quFL0D;ujL9|(3_1osye10^(EeO4(ZiZRCT z@6fF+NITNieJDWbq76|~W<^1WMy4TO?T759V})i!nI2DrL&LPK!VWqcjQ>mn>c`t7tw7$KM0<1Pqbb$Ta)5lFN6yOxz9hM!6&nIL z^y^u8oq)lKqj#=bjg@B!z5fnOtio?;w)WXzMb!7#J#^(qvmLPEX(AL#4*=6YfvWZ(m<8LvFw`F=3ZHB&|7c`hStt#SqW2pFn;5$oqoHW_ z5>R=vsQ1RtaBLi-&N!Ioj`55W%5(%kf~jpC;9p$!fp?%m7!cNxXZ51-U&qCAW#Si* z(Cwuy|MA@VOv78#rXxL#wPVRqW@`0qg=s4c*!9+B%hqK}T}c*)b|e@E%tAyWz8bwa z20+y{@u@AW_7pn?t|VURv$$)Vrf%gvIc2krDsyj9io$2kGG@&FjEU&A8%Z7CxoEr@ zfZFI*`sHrmMfV=uW~8qwU>i=XJVGu{Ni0XZM~nCyIBzjE)(1z0jx2LomVQy&Ra>w6 z6_>H(LM)6AH&`Ty1=n#IzVu-786s?-XW&qGu2~m1GvWp>lJKP4>4~SI$a* zS2djlSfh2QgyZINhBpvrsCu}BxYnpCDYqAM=&r{n@mQGkQ;O?9-5f}Z?>KGbVJCZm!$OlT)WkAQzijEa|?;=r<7e*_dpjJgWSHe zf>@H33qv2yUFdt-W2AkqW42fVxFZDkQow8Mx}sb;r#}8vy5(f(FX`G5P_Z#7boy3OwS68}PKw8U72KOdRr>Qd}5QvXMg_1$A?S10HAV z6o&WZ!j{YA=_eRYG^c7Tuo(E<|ID4IBdBEWE@+Bo#mzH7u`FvztWEH8`? z^WS~UiAvuYu_q-J`3kC>eyJg}&uagS(4Ts)v^Tt2plirrQZtN1Gfx^FSK)(R-__NS z6z8!AjD_BrLi)-)G>3IZvUqrE{?~s+@ymNfnN#jd6{e@nMe?L+Xt}j|l%tHN%g67y zizRfrV5*GrFeq<{;^B6_Nqp+l;wv--t*rvx1E^F+10p41YT?w%6O3uo-{WSk)Xb9%4kJ=gmPAS^E%~M?iN%29{637gXb&(lWS7kVtWqe=cecxqQu3UGW0HC%Nn z^RKNN@`bh>ZHfuI?O~et%)!XiRyTZIRStfs+2(}#U+n^i>w^rk)#OG|9oXE0s?J6z z?{lBhhV=R0VT@w;htmCo&l&0Dr#_JAgQ%>AbVPKfo!W_-HMn$QUQdKZe9lf-^DmP2 z(ae;c(KbZ$ekE}++^B{l?^5j_CUcdBfh|{fA@WjO_sacsf*uS zlm?}$(1Q34t>Ojtt7z?T*ITWc#vMkeoA7d{tfJQ$W3Y~gddkvD1*%Mb338LBm5FZ$ znK2>aEc3;oS{+(NZ<-M?PHre&hK%*JKWf_Wqzr^B{ER>4)Hq+a$$uHl-8!Cjnl~@7 zz1Y$<5t(=1zQkEmP7G`Lx4a+Pg4#ohF@|Xw7b@#QwqEEwz@lN@g6jCOKK<+)q(@y# zkkdD_P_CJd;&o-e;RlKg)tdZ)(R|H!Q3Ot7vt4>L0*pe=W6ipz4OjE<6!6Ew8JISv zO<$`~)we%dPTAb8o@k=Vg%N2|$={2f5F_>!_mcG{IKdK`-|gf=8T- z_e@1-);Ks0WfA#GjvS$6s_7796;EF@7%euzFLzMXUSxl#b&||i&uBh(13n|KOXlkd zVQG#{Yztm5(K$q~1AObf)P4oP!}z--Bx`inY6wL@innVQe^1BpzM~GSuS}=m={RIVB4C<07ZRCj0f>`IXYw@|#=W+TYYH!=2`h2RzhDVagSfylAi(du-}HlkOm zAYg9&knp4S9@qObT!`8wQzZqxr72mn%&`T**3a4&8onbCgIzu7m3ma#Q|JPLM!;U{;1)MJ^_^@D{ z$2hxDkUR)%u=vS>hVU2>8n{)gOOJUDCnXLlxHf6*>Wb?vuI(Mzqk!pD@wnm(MKapP zblBOE`+Qs5k#U{ek*Tp)3BF;2&BKi%yFL?k*}e6oPJjC7TfE1lY^Oo+W|90F!Y3rJrtE`?F^pNO=Zy;e_oUH z-K7TZFIB=;<=VN*qAP{Xd`}o9b2ht*fbWG|Z7^oa7p7))8o8cv&eR7DA;3VdMfZ9? zyD(ylF3=w~xUiqI971IS>OnQX`%(W0Ed@WU&XMU&G|ti}vdVIe>PlxZ8QOH6pSc}g z{9;0?x-8d+%C2X(x^8b)ta}vX(6lZ%5%Gd@B)i2FD1oRKD`l{cc%&HhLq`0&d=7k& zY;m9y*q_ER>}etrel%KE95Hx7nIitacOGgfC4FpCGg%(YE>H(`!X{Mp&nnq-{Gs}< z%d!khhVq9|xBq=CAi_Z#(I%6}CEE=KA4pesJ7}Mb&y3!!^^Htb3`x~*9IxSOZ{56kKd_a4<$G9Bo_E=LHa08mNFn5hlJMW&jOb%79eJ*I@&5U}bj{C{oC}kqHcbg~Ve-vr-`N;@=;ZHX zK<};qK^>TK7V17qjZ zSqJG!o8xPN=U2Y8KhR}GXyrr*RWYLcwDkB9b<7sv{)|bzR*EmtGrr2|L`j5)n;=v= ze32{nQYGX@Lgz|r3$$S-;_Wy~?F?K{kP}f3MEpH324NTIh@%)jMhWEw4yT@J$M^fF z@^6JF>Rq+k+jl#XvcLCB!eT9pO9iER0K1dQf9x&B#pmc+#x0rcM>bh=48@Y;@(yzh z06MASgIIKh`xCeipX42wYc)&`NDRiwz^CFUEPPsv{yZbNaj-1}Tz^F48;MO6n`y8d z7;W*TW06{7{x9Q@XcaPSv?NmDglEEiwxNS)8Z;HM0K0twPio+z<+6&X=& zlEq}4dTFw4#Z7?Pms{~aFxY=YxqapvKb68$ZFN9BL(J(X-Unhb`$gh%)&$9=hUWc@ z9ygIfV3n?`kaLSD_?1+Socw=&!pwH zbDUL5eW(dn;6NdCs0h;JYl+dHHIFr2&fm}@u6yn}KnK-dsVZEYKm(dk0U`~jgzBMB z3mQ}94c~9rd2i|8y?$R>K>tP-K*BJHe$nCMG6IEt_y0=H0^y3~zGU1PI+(Z0hS zIogyvUM0LOZIMT}n#}6|_g&4hXF<(23jTh-9oj2nhV3o|5`aC*JScA{-4iV=_LC7w z-QN4UK2P(c(*^v-gIagpNa4s-739`Pgj=sGd*L; zH$PAj`*B?yh`F&z=)@mIQ>{yt zzdBNw#K6lwq~g>)4T&RqQ)6^C(%!-JXcJa?4f4=|mE`z_%OxN0Kncm8s*!a%$|>Sf}sMbLaPz&_rt^ zd*T|K5js{|`)!>}0p}hv2djEmG)+s_Y&i_8b)ffCXmE4V$D~TxUqAG-hsOil&Jbtr z=Q|#@&Xp;5=tQ9!9Yk_iQ{7MCkr{lg6f7_ASL&-r@JhFvv9FRW!atl~=6G{e1sGVw zQjA>hYA`UHuUl0C5(*Ox_NxopEDD1CS3~&vHaGP!b#S(3_HlGLGSGJ~ZAT9(G~T=O zM@(&(WwvhZcCSqPJw9`7@pRc;1~rCkUGEA$bF@PeLIzEsIJvvp^oF^SvZTJaqOzqJ zKCWAH{)ZR_}1^Wr3%Lx2F+=SbSYtz=Sh(7K& zaFMZ1y$Ewv7tN^uc>0d57P2%c1^A#|C;9ZW6X&F>MmoethJ~j7Jc?QCe`04ZWdf)v zTN#j-_K>9isyQ$J7QjcMa-b_Y?vgy#u_CcM#XewWx5?`1ClgCH8A)cG|2h6ARxQYP zNpj;>CuVDhJGdyvn(TaZo2~t0Ljb3qwLfd~xQ9$~_V`vrQjEqq2xL|_fjdUf} z-7LyFIJSh9f3N9Z(AziG!#ENeMZ$BGORBG%nl45i132DwH%`h$}#}>U3J_ZZrqx zV+zNJTDosss10rmdEjj8;jNCYYS_JMD_Nz?^JV(u@Xnl$p)Z11mcGlT#|+he?~JmIAncwnDUjgl5(iS1!C(nbs!-qwrl@lv9TJ8K;MC9 z-E6SlR4=mZ5d5hkKNqQTVEH;#R$9Zecg#%bWOUUc9v`|a`QAFHSiJnNW*d7v-^jtH z>^=L*0B24ejv3&`<^&Jh=R>zTfv1?8{&V{Nl*vGuB9G!CwY*!G%GG8-GTOU=e45w2 zR1oc1&4XbynS^t?zE$>=I6s%DTURlAP?;Ou=wF;F(J!e3x+~9`X~>eC!o-iYF^H{J z*b(RkOkGxaxgVPUEgM*lbn+!=i6bS zUU|u%aGCNr2f*D%cGco&!P?#g*qneFhz2KOl)L|^_2e82*mfJ|67wC1gJLPg?|S^jf*Kl zi^n2vs&+6Ywq6VCfMIgBgrpDk@i| zn}Tq3F7%2fdYfagk?{6>yNv4(vj-@#wlZ2U90l+t6buLGc)#sOr#JKN!Jn3qg+YA9 z)>zXkuBDy}V+a7Eu+sb)*bUpH+y~b+r{*VvNfJC-3z~PH$(NT0*^hTk zKU{9oAb*QCKOL^<;L+<#p@tx5j$NW%WNw35lR(iWjY@_fx4MJWu%xte{16Isw;yCg zs;&;M7Pe@-47?S0m;RZH+o3-ty(GB;d2B5xYbHx?uFP2zT8gq8IFSbJhKmH6H4oal zeV!_w5zs&XdCWSw)4E*8mesX5%n2D~IMT;&Gdv6N8`KG29}hWGlQ(!sWtnY5KPb3n zR9;LtX!~LyvBmk};dkHS!5fIZi{^IHvaCe;={Cn*XA1{!>B%1?_A zt_E6Xt|}~pPEyiO4&09ty-6d89X|eAg5^v(^?-x#a55d@?mJ3&DD4NzlO zE=9O~D}SW=0@EXRH1h3qfxIWJmd~VcLfQ_27DXq<_S-|QDE4ELt!ca+IHi~@P3Fvl zpNSPocQtCIP>RL)Sj^z9%v6?9bK-sT!SOXii$}BAC`zu{Gd$5xxX{U7Ek6Bk*x<{J zYpqV_(G9P$jIbYW_`8SGK3Qg|QVJBP5tNdn=_V$_L1nggjwWqA+lg(7c}cdPy!A7N zoSp(X2a6J0ppMYxi-@6=jlg-#y)i zOMevf^1QpLP5w)bUg>hMsY5G~*7I6ezv%J)9^~=v2kz9QUZ80)HCN@j$eCih5D9@U z>$J^N9W?S+)2AhuEDXVn{kNuCJ=G%2gg5fXc#rK-Gg}pST#NiVER&%b=7uJZZQ!&Z zrC5y+!B6ip!Q;>&7ldoEx<9OCygen_=K`y#zV6wrK`98()qc!?%~^+C6DV=+)RH;~ z>7{b=*et~&W}E1RGAY+l?D0#SU}B@=)AWj7*KU??J4V=ITO1reLoZtOv>r1RXYKx^ zabsT679Xkx;ZkSzW_>RrZ^P&OKpdFR=REdsChIBcm0>YYC>I&vK_kc_dM!ksXqTGDcmb-@hp-w4IDr{pj1= zsUa6Z%lKhW2X|z=v^~c7}JyU!f(*tg)b(`;8 zrXsLJQ5dDHye>5ImFeKZ9%054vac@+LsQVR=c@b1kJ`eS7LCV(KPInp{y6!j4tUyO zA>c-&gl|ijc74IH4V|g_9jWL*p>g1XQ(U1Na-cEP&LFGYj#(D7ug&HIbH>g>%~|n4 zAw&xGLaxhyeuGWy)_eB;DpJD~_=aBhZv5yWHM9{jSwGke+$NOZGA<_qCnXlD0=W@iA z0vKw3HAjTqaWmusY+e`)c`y01J_d$72JX)ccsC6y{(}`u*ZY3o!-0WO z===vOfy&}%3@ly3N9xA@d`ZMcK zc_|=ZWB~AgpLH@TJHY=KWdG*Yc18x)CUhpYdMZkEO6CTRCdP^;PIfMiMkY?Q_KtS; zCXUV)CQdbqGErOf@I6>xc%X|yP`9^=K*u@tL zUBR!75l}4olFM^1$e$pB`_4W8zAMU=t8X)gz~aIr_*9zS+Q8Gq- zFB$kdyH$$kssc{*G?NQKIv+hwIthV$y->YD>rJGHT}UxIDx3h(w=p&90dh8-<@E&t zj(C6VGwF@iBjX>GRw4RL@)$xwd!Py|o$6?n>CdK*Jn2L~yV@COCvLM@wydqnPM=bi z30$6OvPgZJOIF>MozUWa$npq6iNkfs5#k9mR)yMXg~zPE`%&U$H&S-bh1fEHFLg>}+N>2%d@Ux7 z?)6pgtlK+Cc>_q0fjurKsHKAXIki~KWx!f%JmeL0sSiFee;!FbXA2uxAjbt<_&i{xNR0#J zsHx~yZ>iRzu`N#@!6CIWhZMu+8|(Y)IBNQI8}3qR+kO$HNtZU}V(J!UH4>+JMr&L& zr!MheYA}iNrm6?(ch2GO$DuqOJZv~)P6I?N&(4c^1hpAP1b2*athvTjE4Ie; z8blK$dA7D@PVG^czE?jXCd&7(oQc{nMgxBz1vptHTqQaU9%wi2OONBHV09MMA0!Z> z*VTz8{SV0~6<7tT#iIm2n8L5Um?2fXZF5+9BZPSSMgyM<4$`y$*fgu~(7~8;zJUIN*fDBH3eq0{0L%Y{n96^}CxZV*%*MpY$-vCQ*6e>q zCUq@4qBay?w*6mzeY|V{EQ75uRPas^>!uru$oyX^_LzrK5ZYib94Ms03+zU^jLeRXWFaaOJBvwStVyfwCLuWkl@ zwwX>?yNXYp)RVuW@1Fkw_mvqH0koIEtXpx6WanBtx7G>?2=5n0?qrK ziPst(K;--&{8Q7jbe1X-HY7)%s*^>_vrX7owR4hxGaNPQ_O^QajjcF6x!63*Ue?rd zeky00dXrWuW^x!aeT?&l#7HCS*!q0l)?kpSdVK~iP(OyPNN`J9yy@7^L<4_qr^hI3 zTO6XNV~3iI@ZnGiaN;5kG!smQ ztG?R-F0nQ$a)Hp~c>wHX$U^zeg9ik`@_1e#K!liZsluxggGhbicE=Y-jO@x7u6QK7VL87-4b=-kQcrq+@9x?FfwBSj)iix zRBwyol)No-I10WEwhJ+sV>>mENQ-5tgzHLy+2Uok33_vg^ZXUU?^-N94^gKT4u{p% z?}xFn|xn;W1I@}K^?ic zVTIU$I{30ELHm^FFC0UjW8Cdu42&`AP-2rORdVV&DrmoJyP)kZg4(*H(7L8p)4a2) zdd}`xK!8Z%M)6v|9TB-cY#T{1);HKCO=f5v0wi|sV%Tk`<-SW6yQhzlD6!eu3%R?O zKAlLZd?-FLK86sxOQbJA3x2@q$c4kcdc4J>dGL%va@_%5NmBAXrrx5QJm9^CVSrLq z;%27YFx=M=l$kgsVUGslQ~TCbz?G{>)JfS+6#7=oBd%bfUN)JV?Z7HHg>4L}!AQ(B@h?@`Y;QM>?w(bH9z* z<3~-tV3pJq>N?>98-RHo$p2E(-5f!(;S8%pfvLJQt&WW~xw;yksDB>AjELla$dIBc zOCaK#!tOAlu&7}}DO?0Y&XMqEIhtoBF$mm=qEppSNgZO3_#7M#T@rTx*sPuO z4b!@H>qfc6yjrHa_23A?ij|p7wq=}BF7Fy%$cw5X^JSQ*c)rP#UY`fnp3$ltV4$v- zv`~%42TD??@IHLW^(AL!uGv?olR4zODuUtBAC4JiCvRN7U5znnv`)hDQoFcVO1m81D7rY~;cxGU=Gd{{{=y<`iC zGIpUsW@M$i)Lt)GV!|(A{|@4t^cmge$*pg4b)F_a)$=cG#Sk~|u|_+C3yjp+tl?8q z10`#ka~nE>LFeFk!Ijg(1baB4-Ys*06^R074c2l3nKc3YmuULR1J3{)T>=Y;BQ*vx4~ zyNtIk%|}rPp)AQ&psVN-Wq5^o>|f+=p=L|8zbqw<&U6^osUHh8LVA*hd;6dv#J(JU zP}f0DGEah*48mDB@LJ#L)})SJ_g8;0u!Vy>S6U`>K5bD}0Yh_9$%zlTYiq=oK@1t} zMYhp1`nC-U5tv{0X#-B+M6;pvmdHXMepEU!O2?8}+rOT9JfKiJk2eSR`o3gZS$kNY zMj!3V>QSD-4b$ciTpGlIl@;>LQJG?)WRP{gq4;ife;`wUKe!ldG-Cz8f4t>uTtEsp zet>wh4rV1rD}@Lba`u>>f(*slbTVzK>&&>|fG%z}`o7PBgCPY-btP!YRsQP5S8cZ8 zV9qFNOU5V`4bdFF`^yI7-$7dsGf0ivM;R%7sufAB-?;;9<~K+VTZ_$ju5zf%jn2OV z8j`rp3&Z7VZhp;B#izwhimecCFL_bYvBsE5KJAO!>G{x#sP{3YB5!mLm9}>qjY=ao z^SyW=ed^aLy*F{8E3p5f^CpAjqr<5!vWiC0e|Y&HRuBlj$U&nCi=-;FSwMltpIJ

R;wiBk&mJ!8*+aiC&QF0zXJaE|?z3j;MSiJ93@ZD`G@W2!J{3yUu9fsn{{d?0 z^v3JCxhL%ZEHLE&aiqd=H!OVo=zVlZ{F&M9O1?k{7tP<@*=P?Ex!7L>J#vvNi+OeX zHRrN0&iM2)I7B%5Jvw;`zzy>59P{yP8F=Xf{EvF^wD=LT0|x*A#`wPpWSsw2FD}j& z*8fWzCkR*$(Zh?p25cXsS!;?5krRXnqRC#1pvFYy$fPwg%LJg*Cby*7BLC7 zI>45K1V0T-l)?quC*sy9GdmW89$7T&XCloqW+xI>AkGgpr}0b3ZX&HOAh;9{m6S9| zi&ezMAN z_v_E_2v_Ls50@IP?~jLWm}Rb3Kp1$=gv+yM%lZ2ApRHDH7V*LVmy6K<6N~@nTmBJB-M(IL(58j1{ zjj#ge+xA~Qo%tt_(2QK7Y0InnMtTM9tPs{|gVvE`M8rHJ0)Z&g5DmLIcRm@iBJ+9? zjrF^FI)88I3t96R@Pbnw9W>2UjfY;ts7!PW)^=}tZ4W7tu9BvG?N}S%fgE%Hcm7=u@Ph1>%I^q7n*8a7%^GpNta(O~C z|5E)BiveM=LH|6dwTxIrL_pymScuHFx%C=iC(Y*j4>+c2tsB?>z!?PkpWtvx+j0D3 z<^La0|7J!8&IbQ@p>?;hzR}Te+hT9@&C^RrdW{Va!7oU9${v>O-qkQH#O2^cW;_ityY&?gtq%= zc5m65OIFooR+r0H+{PC&_xtm>r)%3cmm3jR+gg|FC$aQ-Vf^s@`HHsS?Ss^pUXzxz zCDQ!Oh>({lV$rO=C-e50_xp0aF=cpO^Cjv{6;>fWG?yn6xwlPwi1(?NfR@{xk`-pm z;P;#jDsVrLmUQV)XLm&Ivp#%sKGMc#W0rNy`)z@{XZL!9)`!IA)u%gB)%;zxWsG1a z#j#SLcS}b}yYaohAAF?==liJXll=SP(&K(7>gILp>>cblcg9u80c{E|X@^FZwyEy0%AHDh`lN+k7UaI@dfLxF^pLQS#4um|31Zg`cQSJ*0*b; znynuJdJbcYx9m1>Q){_t{gpY3T*Y%OE0Q9Ph=8m3B zyJO3JoC6MM(0NNHmb)gV+PnTC&GvKh&D*P|am!N1CD7*tND=dpe)!>D=EInc+5I;F zCDM_wi>`v^%$g*ROsgQ$OmF`%mG4Jd^$=K71S*NwN!eqqK_LOU^m%fET(~a^7nMRh zrNV7z!?Pn=)v4VVvDE729PRH2+Nl;_@-7OMWTvg^*%+6BLLLp`R7Vr1t2AoeeSz$E zHv$ndom#ry>piJYGSnk&t8QXs4=^X6^wz*FyrLc0dd#>6l2YFXDox_MN4E@8LFkCq zY$=i}fL7jC3Jk>yk-WG=ks->iNYvi2R8!9k(K%3^ztZLFaMzB|qMXKD0>w^Nh z-aSwZ;E7Un3Mldm#Zj^sI0j8QT1mBqQfdp-iowQH+aM@gRIJ^e`X;H6y6|eK=TRZjK^`^S2=T{N#z9^k*fpc7}spy8>z5zi7#`(+;ZL-%amrhjJc~?d`(~D!p z-dHOG(31O|quc9|=|^?(@Use|g5XF#@Q?ydOv+*uz}=i?G{wzkf*W*%teJ1?2cwR3 zZL+CP5$dN+4{j~0!~Wn;;rD9-81@lfGR`I;ad!e@=`BQ2_uW*<_{5NDI6=be?JDg% z32*FrZopfoG*rq`F>)0K9=>5qcqkleud^nS=>@zv9>PQxp(=!g;$BYuFbp#4yY{*k zwk_7}dMUQ700~~84j{!o7d~V09^(;FQrwcwZ4npS#{@5G6)-DTH>fM=!MxX%*R3Jo z+T6r5iB`d)nIa3lapDbpRVAZ3ZT>-n{&I|d{7)UybL;36wm6II8#AjB1EZSey B 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®@5dE~Z5k#<;(zR1rKh?7gYZz`w6Oek7LVGO(-tz-3vzwYWj zo>Pb^FqwJ`31rG)sJ=jYEe*;G7w(Vvi6vNBBLn(&aE?$r|D<6!>fZyTP5U0}=0Jn| z{q-4%^=e?;=0hQuIo8IM8c>13OJr!*xeH+iK6ewTQcvyE_c-&U4&l-AEL?m9JvA5x zc%=Xjk6h3){yIj&e+Byq)jt~4xi5!pmOE8F`eC&BEbk^#R&P4a*7LrAfK@!!Y_XPT zfw^@pP&T_U4rqffLa$j3L+Q$Z2r}Lh`4RE%>gf;34DbiiGJ_Q*jhUz-V6>xNg%t|sSufuxZ_}12r z)XpSH#?hsL?g#o+X`e1F<&>7D8twbNlB8S$+x^ul+fI-k7_i~(QB`wGs1&@rVIBN+ zx086Purkfa+ICR;O_D!qolF3M#!#v~1uD$0{1Q=u?XUesxy!@go|>CA=v}FeJ3)-t zB*y|5V4PEK=*P)$ZmGPe?aSr~%w20BcBh>(Dc*3Q9aNU`SKy%~$HF!Ci7u_o<1m|c z6aRRqP#XPl{NW6s8Jn}l3w&>8IomwFd0`HG?zM|C8LS_TdEmkGATGA29O%p@GqkDN zpN_1DPX5k$oQEPGR6SmW^k7vWhLUe0H8vMY^a;#51Nh<%aLJlX(pk1^-pAuJIf#Y$$eiHcX%Q zr$^LhO41@Cab&c8)ho$qiYE(j`~)oDJiP~*^kR@0P>H6ez4&OQj1LRno&IfHH~{91IHmq* zh_Lsc`rK4QBs14=EZk*wu5EXF`WxJpVMxypDhU+CCZHO`*%2sJ8&JO(r-G9GoI4Mq~~5J$}iag3wgwZ+4(w0CeK|DIUY#Wglthn_tsd9(Wv zni=PKURd}W_yByO*-gTNl@4y9g>spbWA(V@@3^jnZN1bLkOqvmAo~#avLkKF-JjD6 zZU)M}odnJe4ih_E)kl%-K#mXTp&?|$3`58U*Hq+KJ&L3KIBh$T-}g&GCbeO%X^QWC znFQjmv;+8x1iok8CrAd-tnv{dE?$uC#ztiEKsf|R1f%vMw+hhp{c-TRNgX$fg=9PsAAH6^vZm8;whR+c6=aV#!i=%%HzW)V!)-`I4`Ug&Q1+I zNToAbRteCY5F^5k7_kF-ehZXOCQ?f#Xa`CSB8oLraDLr57O-ZP=I07}fwguUy0yo! zkh?3>3r$d%OyQW^Qj`LBl0&{>uE;Ve$l1`~qV@5v)fE`V*^i?|f2%}g0t3O{3r{^- zu5(^4w|Yxo>cWdw)m7Q+jWlD1u;g)A>2EjjOFe)H3n8%d%~&mokfqzw`#9$hiLaET zVlL}*(w5KKD5Uts9DBNcz*j-^l26+=qRp01SOaxbK>$2t4{QhQP|O!{mAHEAH-}fz zU*vJUE~#|+{WgY zg=Y)|vi7$l(L&BvQ2(ZO*FFaKwwl}{=G(DqcKz3*X4VHLIrZU&l>)LH$c=ezrIqDn zkI(xt9Z1F4i)Vfd3`$EG*iTX_{wrT2mHQW!clp0s2pe-2*qOfUYGKq2BI4&xfz7vJ zydm*WoG?4E#IbgX5o{etF3@Vph6bw^XW}!;zQRSd8aW+Ore_%B?!uF=f};p4@?I{8 zP-`H$v&P37q*010*Ar`V3=9ZiY@`Ns=k2+kD-c#(mze-Ka6;E%xxHF}n-g6AA$oS& z2iMW89~#gXf7m*I#aB=xzVB#m&H4UF_Lxo#s3Ia-B*v$|2UzRoYqW{1wxBP0^Twph zuQy;+AwA0o8WqOUM94^D3~h(On>z~uOh^=T*vm7U+(3-* z_Q-}jY`wr+%W>(1;`c9E%2SiYl`VHOpt#J@uSOnF_a~72?-lj90_2X+iyf zINmRcd^Bi}w>k8M`z6nGU)co)V^??~DoD}`c-oReh@%e4VGYII-laO$AyK^MrTy(P z9A$;b|AOFLb-cbBb(#Z2Hod?^ z4X+V+=9P}G14WVfXc_qy1n1-fMWo1@3N7<@lP=k29_P>sJj+muga#RySlLW-=CoVN zb+u}SriYH~K5~*ga!@DQU$7T!`XGHZX|9-D3TFVC4g(yAE1%2Zw~-f<7_RsDHkPnC zQ%l$2FxNHuZaN=h8E;tCQV0+b58-I#2Vgp#&G5{(8Zcmq{?ZsaIWqfRm^xDS@dI&B zZ_pU`EGZl29bmBvPV*T{flVI;BBA1#TP!S$Kt08i5U#aMSh8I ztQsWo{k0WY78CuJc;p~D2dmO6E~=Uyl4Aic9le0Lw%dztXLr>O2G^V@U36#O#oKc-M~*gd-Qo|m0X(mEQdJp% z$}t3$AH(L-8*TI#MYE&iN3%6a+Z18^ayV=~SN3=1B>5)!&9gBBN&rjj=QiiEmTMVr z^|pB+vvd?2vkzZV+<2z^DKPt->l^rOr94w!H`Bgt%gvCWb2v}YU$2}(VWqb9e5)T< z)FT+jz(dNei>SLjtFYJiN5Ju{buO=Sqa+SoJ(38|wcvS>QBXZ%L3kD@iSE=zkgqcI){ zu1zLHtB9%u(j%11m3A_p{j(qr3Uq}NRwCD1I6{*%pTcEwwJgT~E16+dF=cgWfqK?^ zqwC5gAkk1JR31;HgLkbhK`67A;JElGYqdAlGgJeft^;(9RWLGhiU-ks4DWJXkPE zdmAjlF5aWxgVEE(35+$79P5E=cqB9toZ4$=yF)2yRlM#|e7zdDuMP2ljRqz7SwebiMB3rHRYPL1U+hmWtlWUDY56NzLorMW z@_tuiE9+6UnoJEVbruo z{#ADQGkICTeCbSK3^!xfS0Kfe=k-x6ACU25wjv=?xH2poS|w)-9bzcSJWC4D<1&v) zf4jZyMr;CsX8%lAm>qUa*txKMwJSkVssrOo@bjkAF4#)YyL#NF3E-2DsrU21G0*`! zMyn8K??<{8|6CSG5QjF?hhh5gU4rqg2)shPav+#tuZ$i(*N6a+_2BAwCzBef_Gnv6 zdD!Tx!ptvut4Jr=9rnsKQ9}1uRYCw9-=*jn$$sI$jEL?1t)XQSRXhMO{Y4cWri*%( zA%;@C>Ja9$ipwuFEZ`pQjeD-{=}4~7oCNQLHy=J0Egyly$cuZ_Ol+^bSpPl`T# zg&94Q!ZsxSf{hRtBK`>Kt%6n7706w%X4tQ|kw*l^70bn) zHWylFs6}HVhD+i>35EKOL^(h3?2*_bxi5qeUJ1g5hXNl;N3?k=hZHK0{&jB6^GbIV zXVus`!fEcrKNbioSt=NFH5o`w@aeD(g|IxI057kFVjehr4JY8SRtM7gjq?0w&>UCb zx%6x=qnpYTLEBsf;sgwE+S7#jv-;7PP9I8fsA-$$s8|`4MfQ8~#BSL=Mkwo$z(<$7 zFYlM~dEuTgDkbC7!%iSnO3R6l`;s2lkV{k!x?DANu9+vawuy)MtwVsEXeJMq6JKg$ zhz>t2q$dZzq_4;3072toLmu0p;2(ZNJ4l=r6=q!4_wQB0pXuLYvaD~Xbs-s$X2hLj z?QYHiJctJj`Z`k??g=o2-|%q;lmZ>3!cu5C>0MQMLs7_!)%Zv(BM~l!Uy%P1RPv#4^nG@1%7#b#GZ1Nu_`5e>dgA zZ`*eg3A^-`L@xyFP^Kr%APG)_eMkQ}eT}$35(6=NgV}Jqgf{?f{cyTdY;?|&zc*AF zJk9M4%`(xxcFScHiw*<>GqjftR(5|;IvD$Mpmi4!#%cY`f=aJv~3<%I@Ghf{D}6-F?Y-cWv9W&!x@`K)k%~23yE#eJ+n-Zx7;a*w-4J};6xqGJ~K7= zip5&zMwNPaR#qzyK%^?q(J2bW{&xPsDraqKZM(-W;RxExdy- z)OmpDhku7(I9c5onE$F0OYXLD;WF?hgCT*)@X{k5Gti10c|Irm@H~{VR|YNJ`+++M8o?j%BXAsZvUbhi6Z^V@rn4%29w9_m#X% z8f?pu*9&l0B*8 z4%N~vZ?uikC=aMxm4RYyC>varM^y-oDDNWwmH2rGw1UjKM901)0;-v;$3z4PgO*pr zewv4mU!Sd@I_EzQZ~ZzFbSbvzqCTBs+R$v0%Old-`biTpWR6^-H|8$NO>^Fp+P?c z1HukUhH6OhLQ<`#w`?A%^{NG=nv8rM_!55$H7xKWH0O(T)%T z$y7D{jZ7lzM@ObJeA4!P0quT+UQma>g-HJZPsHky@7J9albuzy5DH$tz&-&BbDfa4*0|3V#!iG$hrDCJ7rf^&(N#cXcXL?P);!&()0T%vm}wE|+ri z#?TdBkZ||KKL~3|an${pAmlJW*uWp)fvBb4n5_Xi_59w&o1?<74Dw)e1qY}*u%bKh zpiEItcp$tcsUm!kOFP&KODm1ASoki{_OPqw?%{Vu&ok^!DcaS&5Le@g)x&1%XqZBB zjJg6BtH9>ZT|`En-BXcR*0& zJ(3G1sEf>1wrO-_q$PM1lCv;GN?wNOwmEz^7?k>X?q%PdOVPwKu#(dRMyb-*q7s#o{c zAWI&t>b$h6MbB@%8%&j2X02TSdbYN`x{qsY=oXv!)tY$q5A-b@9hupX<#FjI5K*?0VH@8*eY+ibYk>T&>Ie_~zWY0wSBpHz?#)0$6z28_a+N*U@2v$?5jd zASq6kHP*5A^af+N*CYP8<>6tA$L2hNo1DXtHsJ&+HP%+wsM6-kmZBLCL298&l=fN|%2@;T-qY(WJmW&x>2(ouQB}zBVYWF6sZ%SQ&=1c}_etQA37y zm~0)cOL?OEQQvhWa;Cvvxk!$k)V*i6%07y0HHRW+cwR|=pL{uvWt$)tM8KvVKNR7> zo2{;EDB^WZsKfnDhd3TU=?;sh9DJe4dFgyPj+kuR#*MdNKbanhSL*k-eFVaA^f;}g zqWZvIRsn);(p{N$uc0VDCxOS34dK#h%yyQ%9FvxX3@h0hv98*@|3SZkC%L-RT3iWA zmksvM7}g9_h95XOu+Vt@8>EJ&x&8dyel+vTBbr!Hn%;HlbrMS-=JDvY3zA={KAjM% zR*Y>%H4`82pqiq1Q8!@d<7p3!dJbC_!IMmJ;qU=O37a?gnpf%ASS93Mv3oAhxOQxF zCC0%DdF>Wv*ph7v{+$B=lR+Gwut&$6VBrzI3qAK^W!ajTX3^9snGy8<*EQaM&VqPg zcVgE+!#FYM|MdR;cXuJyf1d?Md!zr^SEy!Vhs6f{gWLZbz|Y$bq*!;;2?L%AXmOYi z`T)9Rp$7elzcHQYZ$^F&K7Zh|SRGYcFw-ybu&5Y;J=sR+6F{rM(D|^G-tPF~e1-5gP?A6Q`9< z(A>UnjMRY^I!#qSK>&irF?b)fzFjD3h_amN@iC5xIB%knzCBGx|MM72B*4`SH{3r zHVI{)fy^i`37kOUEa|!+IZ1H=mfkWQDMC!|rI{H@^>&1&5iva(|FoyYbK($x)sa0> z#1}Sb=!Pc;=KbIfr+{&kluiL@TiS#cVbEW#MBAYsqW!NDNdS1t5u!A2>TS>>!xo33BQ^Arl3tMi(@Va;7gIK+$`Ok%%Mq8P>hU10)JQ~#)DwWYRF<$iOdbtJMDKT zG{v*eWL9x=gNOThlk;^ zEQ2?dW*}SZQ^lV+PgYG~{icQmBCu#hhXR-Dd_o!3-dDASenuSTaQL z2i~vIY2KlLAokYAo6R@1@9Go(4*+yPi@%oHsa0*8a_GOPpA8zA3B~Uz)&UE)Dm+H~ zC{_;vEbPb%05mwp8s&s@2hm{e*BQg zA_i$%X{X@1Y-FC!D$U#G<`SXu*I{yC5%;YIh9jCRJE1ZW*9;Ru8k1O$6V?mKvDEsf!=8R@p#3eeC3<88)i|lWLFS^4_Jdhq zw4n2C(u`aGFKxEa3kP)pI4;XDVPrDe#PPPq^LDz*9dJAbXfzX7fF?Empsw&gy`|ud9NHE_U6v8gJ-U; zVtiiAAb#=_V?^(IZ;YYwW99IOhHzyVUZF$z`eC>?X}*;r^@9dl)b5z*`^P#gH__|X z7!M2K`QRDivhJ)W^a0OcKT32vudnr{{eJaLk+wOwDS2P-q0-T)S9Cb9}kR)5LKEAhgrwcKU*d0e$ znH#k2dcA)ZmsS6uru%c}vCS+~zec>(3x7QhXKSgsdmF({o3W_9gxMuNZ^2;YFM>0~mGM6;Pm zSgO^CB3A2Osk^u@xNEglYpqMIT3aR&XsuRjH@nHR`)_Ue=iK*ZgNWe&koWF==bn4+ zx#ymH?!E7wduN*wPX<=#S z;9&o}%F3-7|P}fu+${WT2~m zu&b}vL(k#%zM;W|rKJ|tj!2Sd|Ik1;C)p9HjCMzRqP>H$N?(N!33Wu~>3st|;lV}W z{{HT+NSMe~ZkrqH?2DYeHM}J{SMLtTIu}%?5Gl`K*I;*aQA0;xd(;!`j&Ae#Jq@Y+ z9NR=8?l9UT>Yr20<58 z9wBWDf(^JxnBpFqP~t0D+F5e)ik4GOK5fnF?cG}|POj_e40ko3d`^Y1FZ+t`KK$`l z|8f4=`tpAbKJaqs%BAj)qy<8wc*!mIoneeXfhaeEJ zXIo`YG!_eQ?&{rKxr)c4>!Y#$zTS@LfZ!G?D4Sl~v#lbDHt#63=B9a@I-*-P`768? z+cxO~;hyN$zJar2n^5>?MN#;h2KpnLVgr%+J=-=V>C8WpPDMDT;B)UFGjXCU(i!gU zjdo`bL}PtJ1Ci*ea4&)fve#!mJCVHvO3bl2I@sJB8w~eGqAEg%x(8K!8XStLZJfH+ zW|7s}ta99K1JQGaqOrjZT|Lo`HA90H$E@#Ba&o4lJFV0PDytwp#fn8^TC;`28cj}0 zk6j*TyAtbFc5FPWUdMrHaYC5NmT>n_^f>Wj(Ls4jUss1KO<-slveE@OpzyncckYUz z!LII@okNMT zgv}k3$JB{=37yD_^bH`>+}JgDOl<7#LQzz3QWcr?v*}^vu(7WrK^*C2AEC)MY~hx{ z0Zb`Q?Dv;`Q0l7Vqn56|g#2H zb&ZcL>FYygdgZEmf3;i}sP)N#s_MGDF?ya{UFFB@-s&nj;IFBZtLuIBa($rIF9!m3 z^`6hu3Ar{btQ(`GZRoGFz|Qkc!lq$(x_n7x)s z^-P-2v>GNYVNxTLR3^zxTE(PwOgoKU09lTS!$pu)P&! zwhj=gc`ORE=h!p>@=BHn5(sRu;1mF6ED=Ny)y0Bc0Livkm??lfwLx%zqAeC20;r|y z1QnQTv5+l*RRIE2^wUNYY^<<9^W81 zAqN%gXkRyE$K8Vg$4XeTokwrV4tnz5+WR@!MZPC~jOfTCt0 z-QIm(qd%nT>T;Z$5zvLe3lMlAgqY3{Dibstp;rTfuZ57NYY0|EQBfx#_y!=>ii8`$ zxCvUdI2Lp>U=gZ}2ul&+VUAENJPgL8(CP|h$7g)R?ks^7*5cnm@=-4$}{ZapWI ztLFyu#4_V?4h-fCWyTXki&0?dylv5V8;pZ#G~P+0@os{~&mlBE9vqJ}J|G%4s?+I6wB7I_bl3_r++#fDBK0z4hP+nbLWBeI{lg029<1b0r zJmaq%<}v;Tag?eZM6(GFTTC9NVja{38bWu9Tq~RjtSdzm>q-%!SyaI}2)&s@7YjFw z#;szjZ6>z)ZK747+r`k-;8cw4p)4*53Hve2y_m(gU*uAshN%yTN3_axY?TMaR+k5x zY%gWaMir8$?(<^il2CbQu0GcrnxoI*x6_2;;?CKa;#@}a`+q=kevk8sXl3)N(^joC zO<-bHpD#3h?wFB;C1&qLY33J8P-ITVI01_%B-!o|fiXaI8{^ugW*C zVQ8=u+tONXAGOq5{Kb}fsY1qH;YrmVtvn%iDvzD~e_of_5e=ClB-XqVBhdk= zC$?FN^mMoy`+9nCdT8Zvh0{3c-8_5DcM-Vuui@_@uuD|p;v_oI8}7FC^+yLd``Ihk zENfofwq|Y9`i2e7YgS8GBI}ARjkXVMc4NG&*Ap9x;Osr74|OXY1kOz{IL~6xjcc?t zu|zv^5RMb9w7g9xCgjhUgY$lyvBt^EkgB=F%dyG|(%ON~fZgZ%zT(kw4Kair*mJJ; zE81Y6+3i1PWu$N!sAhF0c7|hXqrDx7X-y=9Nj?<5P*HImMys$$8UvFOHP5WFxxA9M zh6j4n7eWqmqRP3p4fOR5Him~{(X5WHSbumh(#hdpSe6+pjLc=`G0oTFFE-Inu}PLo z3Do)OsxsHZN}#r?szwRa)YSxBnYEgH>{=Z)0ng7^+*q^r@tL@JeEK;uzYZ-b6@dTCe8Dztvgd_CLR z683!FShn4-T5~-4IUeQD;`tN0KI1cUCNL3>`T~tVq=$G#`;e?T+?t9_;je zuFf4f<`*<~cSkpeyVoS<7JPt9ynCg1Y^p^E=LPK%gvX*WPtQKW|w3`7Tq26{b&+0V_1Cz0%7F>V4YrhcZaAT*Ni z+|R8a+MjNEu}0Y0ZJ95hOFu)C({U)@apBPm?lv5I#y0MlK$Jc^G4|Ps-N(w=O*zN4 z@uAS_x3QL?{{FrJY|Ol9Z@9fX+LE4FHa4MHCf3nk0zMOyIu>dr!;4-~YWPguIHq>R zntS!WDWy13EA>PYI%B1J!l=%6oY2W#h-5caV6ZD1n`%vfQYblLLv2m6WnQOgCof{*w(h+lIn*Ds!%FVSV4jels4-O1Pk4%Y?1hU+fLsl%{TM*)Yz;>x1r=>&@1;3#X67rjN!CM zaUg44vwC$?-$$IB)4R_I$J0*$c4p&>>*525un6PXpJkXJy=)P9vve&Mswatdp+ZvZQ ztX|eskfKI;tdb@jYshC^G%;JFt1Xb>eU2&Y?OU3HxAaFNU3yov<9NTyjBD=230YT1 z8Vzp9k637Ndp_;R9?I879!s}*CuN<{FtQrUZfHl_9F7cHy+6BY_0qL#npbaVTi(>L zv}t`FvUlW^etc@Kn)%{>!kFTr;%RX|fR=)iy`i~bWee%;`j)1In5KV5%?HzX92=*nzpIHGAU?gQ z{oLU%rH<*eSx;;;wU7TerU$(pjon!J=z!ID`LWKS!4B-MjcKOBnLcf2IHM-TD$dj^ ztIO~OJW5vK%BKxP&*GU1%vDmu;9#_;e=umx+_c0LuKaVB4Hoerr|oQs4qzT+NblO5 zsqqmG(-O1wEImror4AD{t0(P6PYlj-q^+JDy;0Ob6K`T>#kyji+~Z@s z#eBtL<3iaG-G&A;`Pw5p&92g?$il=D+md*NS?jC}83c~6+)P`2M8#5e4lCyU9D*ri zt1h0;B9_pA95i3i!3}+DlWXP5<1WLjq-ISUwyUP``@BkzIc$vcjA689l~q)I4zV$E zReVmCBZf8KaiXWjBX`dcCC)ic5;Pn!>=Q8@2;4_b;oM0Ir$lRvnR7 zT|Ly(9vvtMu53E3t#M^DTEMpErIz8#UA=MT$~H<$rqq7^3xV{R!kWZ8B!;u*#=idT z3SSSfjq6u##3_n~)c90|-s-HiRtnCQeKdNRomav+vmFzIL*3n&sh~3)+t^D3Y4;Yg zs~h^xj`qf~2BQ7l;fVF5C6*l77C1o|=1t91@`PRC!wN2PaOkW!=GynD_Y8&Wo7Qb? zYT3|6Q!1KTSOe=A-^!10rKvtt4K9*5-rmw3NnmrH9$rMA_%s|5;3L(+$ zEqU0IZw6X2b74z(qT4#dG}?4{5`}pBxO*Ee7Z`ok5}fLiD!ckKUen2S{y??j^Va%n6`wCqPkt5tD#hpbBEVlC z@M5B`wkn|bY6Dd@a(#6*B?fAIc(1CjQT(+&%3oFE^U5`~RrPXhZEdw&SMT>@QeAzm zD|7y$RMpn|tL&)>i&9nZt*u95KCf5t`vd;k@t@VV6@Oiw*QfZa>%BfXQ17jlF;;_& zRoDCF8ZYta^VQcCjy=1C#ht(I8-E52$kuS9h<5~`^U)Z`xhvJ9nD=S3E4 zs_Oh$Q>?0jM7;HKb#1j@rn!)Uu$o%A&KK~h=0skps;&xn<@);CI>m?5Lh4mqXtmy& zfIT&0DOLV}*DKe0Nvzd%D7AnOC5SbttMba#HC5iMjFqC|t3x5XGRIWK??aJb3HAQE z+@oLCA+f4j@6o<4wb*J{D{r7W=cr*?L9M9r$#sDMR=m2_hZXl$)nJ=?>*|ox8h^Df z{R63t*tK$vzrH^A=(!^Bs6iNDw94maNhx`KHTBqbTvz?o zfx7&$-ijiR{s76*@2yn=Ro=Q=&ZfGSkwua@g;Yis0ctV#9}ugPpXAX z8m#&e?mi07DEEeYqVnMO{%CRXWq8FHFT*`!e9o${8j2z^R3?_D`Zt>8V!$j7s| zGT#cw*w5;wDo|)IbQWe8idum-sc@P$b37;umBoe2$1g5CbDX_sanXfPv{Bmu+C@;f z3$#5@_#6~|2ekcAcn}Kz3Wc|dh2ItnzathtAgMOR>2l}f=H(YSL`8L&59448h~Rh* z5+AFxnCN1%n<)yD@|dDBHJ>SkOc}@I@l2V(*hHolGsVNCsZ5*BY%`c5Go_3vv&rR2 z@iN87lqzNqF#9~_Sj5DWn9{(Ujm#NjS<9Hx%$zHjOJmAP=32#^tC_NtIoB}fTBbBH zWj#|iGUZg}JdG)5u`g6oSn>d7ISqoS1)t+Gv^?4Ze`9dGx0p; z8it9$lna=0F|fi*fH|+g>uS8NNAPaEZp7;*ylw%;ZUfuxAlfblktuhBZHCCihk%WH z43i%Rragh-lXyLa*EjKc8n0*Y`W9Yo%=v9#A7gk3VFq5GV0?g0`U?hsLl*vy;s4?7gY|`x*?!oI0yza#7E)o!4_u%yaUJv567q3T< z=HnPXEwahainixPi79X6^8uv&4$}M(uV3Ty@9;W=*PrqFCtim!{X)dOSYlb1NX+$B zj9)D=^*W62#`sMbzYXJeNo>M>lFcRC7AeegzjPA0ugQWa$%<`QM!f{LG-Wsk@BZN& zN)v^-bJtxeI`QAqCed9ncf)YYQlat`LGYa}fZG=y4hhu}j8#W5Hn$7mXXDj_S07&I z5KatJDu*yuxrK1HVQlVpjQP%`)SW=U%K@>!hPUb~fv8=@q1RA+?zKFA9glyV;=XTC z+;;=U!M$QH4BrgkUi=yiKTP2d%~1R?49lWhlzxt(BDv>^bAJtHO@={!9|YfTIK|(> z@GzoJ{v8Z|gkkQVVYpRr|A*4rE)s`ZiAC{Ju-gw&>ZKe~bvXv&WKp_8MB0M;N|E@v zDv37v8gck)5!_e7_2Tfg7?ExihY|07!khdMB?`WWML}>sNszXuL@M)}1b9Z|E`{N0 zv8JxJp5N#5`vQLdmdJzW%-{tx_^uheD1J|b)|bqOm(Ac6GkDbuzHbJvnZXat;B_;2 z!wlXugCCl~TW0VhGx)I?>@$P78H||0s2S`xgM()96Epa!8T`x)-Zg{w%;4u{@V*&* zUV$H-mqe z!T*@Szs%s@X7H&Q{KpLbYX-v-4|bTrMP{(m40f5prDkxM8C-4#Uo(R%%-~8hxXKK! zF@tN(;Ok~^y%~JN3~n%k8_nQmGq}YJZZ(73&0voi++hZHn!(*>aE}?>YX%QWdnFJ? z;2}wTSb9WyNqkhYqRL~5So!0L*b~x|iRe=pjh zQGNz&F1QnvmM=F53qhH+Sg002?N}`M>~>(AmI#`t+2)y#_626>Si3~9gR^XjkPlh4 z4MHurE`%k5Thy|zz|aHkwT*%UavGNiIGX34Wai2nY7l&oe;YIkc~EdAGH?}u1cfDw zg-QX&1+ZjMg7IfJ2!5Dw7c>Z^P;@tvn*|fg8ifLw6mAgaLh(JAQUjAWHwa#sVnfmb zcuILN^$H|C6{dw23#|f7pKlghaxZ2mgBiDDFdt^#hZHA3X|zG8f?3z&!(=GC9|IT6 zE?*){f;kI0JLOv%ggTfzgG;I60n9rSD!nE}?}PX_1AG@@HYZfwh{1U9--bah1eSAF zs`tV=p#*AXFBawsPl9Snx0g<*;xO&#>qb zB$f>)O}*CQ8G;N&OqsTx+!;f${8X%GUi`YB|0I;^=2lNP|*>;_>RtotSwkOk|5 zX1lZuW7<5}uoIySHa?9{m2gTOXYAAl9-Jl!vN$CObC+PddV=B|;Bds)6keh{1PdKf5^Iu*^}0+%)?P!_Ji|E$J;S*XnRtAS^Z2^Mc-;|V#AT2H@%Uzvd?k{9%Oqcd zk$5mqFn*Ncdv7iig!0lIZV7`~JAy8$%!nr|IFiQ7+m2Aap6}Vad&}%C#B>=w@*)dh zOYQ_L<^abC<-~(Iz!M6^GWRM$I0SRVcaYI?>1Ph(9fyg4wJ_dwkpC_PR7&~W@(SbU zj!}JFaJ)hlG~Rc#%cJ25#s?gsT@Dr@A0LuPWDy&?h}x+^_|V=urF==}lta)6zq7Y` zJe?lIP$WrF2T*2P32Uja^$;|{R^!*uIyE#+pB9`hbWSxsh1QZ&gw7IU`@UwuIJb2M zNv-_k;7sV8VVu`mTH0A^e5G|($>Gjf#`*i=on^)at+PiuXB)%NI;XUAj&ULE8|f@J zc7o}?ehGIj7qR5YSn}oEPr6089FPIH9E>XvJ6vX5$=${iuIm?)d-FwNs6;PWE(lrz z{B;8F7DHa$i(s3AG{XqKMI;TVI&cU=!Yv~CP9s7*Z!t-^750e69x+sYLq#K8ig$_e-MMybw7bPnw%NemIdJyVYm{@&r3MEzaW`{dO!Nt)BI8}6 zQJA3d5z+X)6go*i32BT|6h(cGjM|?pad?IoA1o2bc!Y#MNyZ^5PN;d;nqv7xIs{)4 z|AF`OrGHAsCzgmVAe@AV{w%eg6z@FA_$x1DcP{brH>tJ3)7fDBQz{W+5!sDWwi*AD zLW@bO+hu)8a4}%P#=oV}P@~=$YS0^k*UlT|MPDH$w5O0@DQ2<2=xjaFz zr{qvj4V~nQ=h26#gefX>x+n2Sn*ZIaIEfBc&+`4nDFdeIy&dms`u@Xife=`8=d@ zlMvxQl<%+{TCOiA%d3**ZPuH&Ad#sFB0Ck6$WF!BrL-=OcP=+BRglOu8HdD+Xymv< zq4r;a?SJyYLvS+)cPPeP3Lhj^3b}b?2$awaeMb4M5GvEl;=xro5ZtT8_0_>O!j{}; zNk8rYxF6TgcY^q+V%$$@C4#;Li5d?mBjtAiHZ$S6k=TPu>skx6PUu`~>_voo5(xQ- z@Q~6v&jPIz%I}4}o%4)`5$V2kq(_w2`4-4Rnr}RcNcSTI>tQ^mj3RD{;F?Iotuk8v zfQ9-XHe#V z@v>67<$&>uVk&0rpz*3=>UJsV_G?N)v*Y;dcLDA4QI62+w@|Bpq_obN zi6h33m66@KOAss0NyLLKsOY0gXhUeDzEM9VuAds*fIZ{w1mv{1emaNjCkPIg`WbQk zOb+>}656D1%Jq;jP~wDb(%4s8N(nfM22aK5#`iJ(Jtb7Cm+q!^G~QQQOK0N1_MsA5 ztFJ}r)gbU!N^2<8N&ssERIAt-GJdUuLV76Frnl)|3WfDBFZMSa7;Hxk|AP`*udm0k zR4?=7ZzLW09>{-Ej6WsdBxU1crCre@yK{@N90TJs!x7^zN^8f=&JN?RN+=qP3T19m z!T-TTvN*aP+N^J;!rU~19JX+b9V)hC30e5RkWITa zzIUjhvyzQd8axX-#+?ZewT=n8i$ICyF+umLynV(Y#rxG%`<%9~G&o)go{sJQuxe^Z ziI6`Du^v^;S;b>!MymVcYUu3X*;x0dsO~dVtov@N`|~R4Fgrlg+~-x}1)c-VgF@y3 zP3#V`6^tIx*3v^xK0VlU+Yu?b^QhT!;6>GV5$Cuom_YN#@2Mkve%Kwh8!xG$o=|ao zWFOgw6~%I}2RVOPH8*d)s+yMn`^4T%8Hbx!iM_Xpy`417$imwy&BE!v55$jDT5}&^hh$igQ3R-d9I3 zSGd>sP)*Ep3z60@Rc^w5!cEu+&UE>7_BUAGKq#ii^g)7$mlz+Zp`rLla7Y}Ue9-uv z8rm`%+=6xbJyvv-*X|Egn^F}G#tt%`|1pJ424fh6|6omIp!@qEQt$ythgIXSx=(M2 zKeT%bvU(vSNt2*)W>D5HZ^?Bcdpj78UB3Vtt&EEqwbGFoI|<`M6Jr9*AVuDi+sb7oU(SrnnAsqgGpiA?<9&@`f8x`8Y{o0_As*gpT**c~d1RxnLV&)F zr*9ucsa(ydok!Z0jE26Jp(ti02BRAo4n{XInuC!}@xchEX*3v>B?hDW8Ffn()cwqO z(5%E>A~Ks0h{)3%;Uf^9X2!R$&^RyX+k`Vm60Hf#8yu-sc!L=~WT7tyzl?q0EfzYr zG|#zwBOx=!_gu52f%;XA^0bVhnewTh7+%ypznk@pLyw*0CHd)rVIzk z(Ata(wUJSMNojZ&Ab9k}*ul{e9H)MbPQ;zM%Xsz-`(gI1J(*&A3%F&E{=d!fXtS#_bxJjRVFW zjjZy%((((%@{eJJFD(xmcW9xn!f5cT#KB#}L4_(>mi2Ls6z>oSk88%0T0-HznNi=T z&H7#}ChPkxEk2gIJ*%1O_MDbfH`1K%YGwn!WJ!r4=FnigteLWk2gjT1-B*acO6nIq zG#}N>Zt+9S_>o2A$4MsRT6(V-F`2wXO!kVmE!up(cR&kW2EogaCF7tLFC|6(sg_XW zcc@S=Eunj{&<`~}VLCtsf2bM1(&GB%Q2r9+pKK2K@Egte4FbOgq|Lh!)A+46qDM;e zXJbLX(?-$;^|O$V-)kc@2l$g_&H+BwtnvL5D%D4&&ZLF0&3ubVjVKVdVTuq7u!sBcf&;?`($ zHH>)j&_a&vpf)EQ{TkSThW06b>oui2?bwC*>qw1;NRKA_Kf z@!-g4c$OwOL+2Vwf8oU2lo&k`|YhE4=z9sQkF$@ zBE-pjJAWkfEeKWU72eP@pg#jva2gaBcgnO5c7(odr9TV$vzR_vpUiKx?Z3FQm`*RS z^S$5il#H?W+j1v}Rj%#p?nXeyUhr>?vo?c&0wtMVwpOlrnYqRQaP0rO5j4B4-y~@{FFCAToK(;WY|+l*-f`p| z(=`z7a3_d1Q}UK@x7s%NMK)R_HyIE&N9`8zA5T*p(Vo_()BLvnuFadbw}&HVr>egC zxab}2a=P|tQt8`C%?+dfpTrYKj5U8zni(z5H!+&cH`Lopd%DTH&%$wXcTDTy|EWA= zf8}ve8q2?bZKh%o^OhqncS=+`qTS)`iL(<@yG)9XP{`GNy=(hoU4va)qQ|?_B&%Uy zGvBDpeg6OdYJlQcc*4Zecl)scv)vj_m`Zx9b4ujtR^szzoC-0av9C9V6;B);ka8*; z`-q4mj(spsv&bg-uNfL7qeGi+io0SKLmOk!j$q$F%TRmrgvS{7Ky;DuOl>$y9Rfjz zKBONzVV(cL562jDTYc%+`+kU}#O5E``(sa@vhbNFM`Z4LBFSb}HtA(oaFn4g@%if& zt~wAc7_+5vBbK0363#f0BYF0QEor>ysExAYYIg3^$!%-q_K5{2*rzixAKz&fsU2WP zoq|BegygksT+-6GzIjPgs<8_;t{wwAkzC!8v6k(+G2am-ROxEm&`5Z=5E{*-=Usu)pxGh zXdQ)P4~u+X?zjYQmo+-f?dd{5Y}{uI9$G(bAH=8eM`g6O1m~wubP_B~JjU#zkh>wz z4U-@8+?1Q~*hf7yo}lh?$8Re&;s3qj#JlHb8G*5OWj3EU`OmN;uJlGI@s?$3wY5iu z6dNN$(T>E>604Y%iAmdn35|{l;A4EQ+(A`b@g(fo^ODt z#bMu9=dJM~-J04eIS{Dw$$oE5mF%za*U2?rFVd>7^&-$;UoG=J3jQizAi1GKuC4VW ze^tmb-@_7+YwK&PU77YA+3{CZ$<@C4F?L1x>udb3OxYxk@A8c~Pnma&nN9k6WUEd% zcjd7tTazsF?4EH}@>+8vGObl<-&-u>I4xIyX05E<+n;kvR?g}*IH}-^b8FYxu}|;L zOKzE%mxS@1&kl<;tw@jPd7JwNGv=0Q`-2!pY4PjmA3(j@zIK2PVNTyP!K?$I(ht|l zJW?ySAws9DBeBgBkXUCw!-lEW-74xStk4)FiY`)XfEQ zYD05kFP?d#LGy_>@@E`}#;jA4)3*E;B&b@2n8%EnTc%UziKUKl9%pW|;pnUT29pPX z{GXW2JjuAKs>WZPbp))YzNY?&v%sqS{%SvB*ZOLXXSdCf`)sPvmIP#9Rlw`vhwDmO z)_9-;cD1>Mfx?=?lg2O6f=ctam4&AiuGIR9plC@^f6+PGpf;pD2imJJ{y8YZzt^DX z2T=GYP@Qxtt1FxDS1GiEq-0ZM+;~lL6;7BqsdzHvfa}W)#MFts;9#VRWQlNY}IsDuUyZhd30Q_ zw17zqX&;NUm^mBhNMC6w%W7iIWz4mlNh_FiGRt1Yvg?>_HOnqz_BAYfEz4fVoEwMye4}nem4PGCC?b{$T=^V!X0Jh}{oAO7POg}#$3fbA?%^eJiD&$NQAU9|7aIui% zp;!sV3TI%fu##Y2LCC2R#N0~X`WQl^s!X*@l^DQ zRP@PI^qZ;Z)2ZmUQqf9zF&TW+$HyrIHK~Pd&}12ry+0odXT5K^PCB z%{)hXZCG%C>F>i@rgGn13gls5YO6OKj78eVrU=?Q9*d_`^@)?VTGX?O( z!onn&Iv5rv!nD&l!gK*32&+K?VS)g~;_RgYh$S;lrL(L{W=b}jXq*?4bSWqcouYBlzW7M9Xf(7cGdmSyNvm4g zsTxZ|EXYi!>*iLCyskSnV@0biWG4^i5?EmuJ8j0v6L z)#Rsdo|}6vy#S$tV1ZC(yl6T_Ba0qn<#l55O@6kuCm*wv2t#f~5U8Xf#wS2$oR`lopF`(oPauDT zzd)#HWJM83#^3nK-ifA3xOtmRVyJOp*Zy&|!9uV~zlXr)_vBswyCvOYOg zC)6v7J24)GZZTA>7e9&3wwOK^id=rw;16T=nV6k>$UKe@p-K8ARDLShcmkih<$b{^ zz=iXqg=;)baEZg75kpzQENqi+i~A4=R8*4(b^SRL=VHWpk;oRWC>E$1#`h>eA$Ihs z;c3RpVraTPJy>FX4ShxAA1)h1GxeE-7AzHlv!pWP2V$r!G}}WU({pLI94vz};|ODi49g$~y=k$Q_mS`%m@gp%Rc7s%`p{9w;;AZhj@mX`} z^a)jhlq2{BrI=jcRW=wjM~evzQ|p|~&J6u?4%$(`X9MP)CL691dK>lc$F zT%GW5Y?pOF_tV7xh{k_J&v4B_xK-7^71y@&kI z?~_6cX7AS*ym%l!5?-K*8W{I;|9kAhq!H7uYAn=BISKavJ~!RO3NYkCt}*D#r~*7-t`OP!G*~70q)l?VfHf+p26d1fa%(WO%!D-w!DY}HpsS)@Bo8Vl*3HllhJYtn_%S^EKSL zy-v7BCe6P_Hm;LBw6#IP^kPiE(MrFOr{5?WH_JGxHmwj5sZf=f^G33Kcgtk?4j|@E zfV(Z5Cvuxd{qSzIjWV}yxv!F|t(<5@;_w04bb^9pGd?Vneb1#6WfJM>LC-3~o1XV@VzVTYcT6Lv_K72=ZPbGUaLiXsOX^vi$Ep7gu zY?&j;P5#{9&}W{JB}m3UoVhO<%}OJPpA=oiFd;bZ|;I-TQ4p_ie|_R+3^5&n}K zxju5P$RN1iBzReh;6b@nor%i(Q#rIMxC$A1m+!rx?&U;s9}>A=$upN*+bqltcSW?} zZaMXO#caoW6lzDhKMx`W-vQ|!#dua}J>7UtNz9#2H||rcJ$Uykt!K2$oo5&ikc<9A z*{-rXWhD3}chTQ;&@=3d$e!U)MDYx_M${4^!mtG4O(gv?z^97wmJ&LZoL_>cLTPxi z@na=!8q=SV1Dq1qzr-6cthdk1mk~6oEHm~aIO56sCUv_vKs<=F%A}tt#zBIUkKryX z*!YQpg=wQZA~yF|aJ+7}wQJLf8RH!#p$sR}%tHyCp`THX6B_csnTh7N!_ z!G6RcpP=3J)Xot8jRf4diJY@1sjA9eCA)ej-vzKvxKrgiakomc5bwp{J&^9h;O8LU zuNrr&85O+;8KHi6uNn`v>aDwmTMrudsiPj+S~aS7@8tU-rJdw=e!m*3)~k&N)REHi z_o4g)poUR~tFZ|mRLQ6M9AmFKg6&96^$60~o18z7>I3D!1Z)2Mm^v~uxE{8J6V>ArL-rtell+f0P*`gSjEv*R~% zfui3vk&UYq?%(t`$@Fic?_K=MSMns`SY=07WUz7-y`^dy90(6aH*Zh;)=BY9#JAjh zlK2&bKQ9x1dF94fbRb5)Q=OHufk?wKRs_k#PtIW3qB}PykKgn8y@1~f z`F$L}kLUMEz%-jI;Oc#`AYpG%8u=2t5f{v&LcgXZsY?VbN94(9@(`2J7IT#e0FrEN zE2qO#Xltux`Xg)Pp{f}++A?h47w-hav2UbPDoBZAF15d(_Pup)zjY{J#E#>rO`-V+Ao%_rbBxXsREJa9fh>) zMEn#fid5zwNrhC2od2w!7|rldslueaz_FZ-iTU9crZ*9on5h(WR0{)XIFQ}K(yB$9z<5#hX$iDTQX|rsgx;Z zew*X9q@?>1*O z_7Q{IOy!($EDN=^mrYeh! ztYRy)kF#rz@lXUsYT?wv>cW#`8#iGp8bcKg9|j+1l`*B!=9N@3*#Izp7>%yeGduwVR|$QFm=54vIy{q-m1F+A;wmTv8xth4xPc6J z)?&dWfFy{M*2y9W)gPK6I z(3*C+yfB|mY^a?{j1*z44q@XstiF_BC~IT>D8*=Xdy>f{RkCpe#}3p1Nv0hvFY>p+ z6NDFW`CJ4q;eDd`G8ivGT(|8!V7v??<;6ie#10y-z-YV(kzPwHE?K!(L5wfaY7P!y1K<*FFv2{; z&WMIjHiSm(baNbnnZlQ-VcHKtsTer~v!pIun8|k`d$X0h!HAS@IcP-V9=?v#JzL8L3%yUUlk06CXB3@z=gS$SHb;nzVWVxZ9fFH+J(qvooxr+ z>+L(i*xoL;Gd-7TX`I)t=|!BCiL@KYIN$wkS};LqQo9zM1SkY!2ZW08p%_RS#!eV% zw_#=!ig5|FJ3M*k)2lm-(Rd!bz|Z{V6wC&%E!5>&8~ z!?cAJ=X}O};695^4S*3(KKYo_xE|JXvDL8_cSBW{GiMX7sIxSu@g1(uN@{L3J~W-a-FWFn zbF0GS??vttGJh{J%@;8-r&7P@&qb!uLQ^j!e=so(egc~@q(Vtk1d)LZWMheKocm%_ zqX>u$YYJAaTFaBQ;=^yHIVO{{4m+i3eM|G2)hECm zBjMoxaUG_c-3DtS*t9LuJ%m#X9QR`}lu*X625C6OYU~^89dtLYY-nj|YhE2()7IF~ zxV-6${6r_O#r#w)Q05SZcBLcQKiHY}n;bnj^N8A)cJb*#cwl?_&XtK{NQ0JGl!YAK ztm&?~`$KIX(si7gnloYBlI??0J~eS{9q1ag=5<;>-;mJPYp365Fk$1zE~I}uKbuuv zii<6CMyB?fb6<0!$=c1yp4!KAO&W_zV)~cdro!jY)5b#WC8zYRh$Rnenw=d9ljmtH z+G}p3$e}4UPQ#+fiS_5t+q1fP4vX;AvC1|plqlNN6tOof_O>&e_|fj6DPv`$pJB5y zWzj4>)*p^U=@@SoHPy_WXyt_ZjVYwWA|>}o>=Lg^)BD~*85J`o_YQS;Cs#B%8H!cn z_j!|(TbP!Z(5I&ON+bQW6wE5X`m7rYck`b=;V{0AD5D83e zKv%lQGhdS6+^sjdwY#e~3TKKTkK|eCN$fm;ldLt7geBV|39_s!#??sd>X3;ToF$>) z%f}K)>YVjVi9j!OfgL>4kCn+{OIb%%b4G>+2FP!UdYuz{KKY392S(bxMsKjfCFu(V zr>WCz{q$g4ooHKErjll5=#7Tua>8m*@#YMhO9P(nNK+T3nY{UqSSdKV5oRH{ z+Y`Mvp_O6&qfBZ$5BN_t5L*fdD;zrKcqD0&bEUU;i8t|cQ{>|=_3>4ZX(yR=UcB2< zi46l`?24q4gVAk+Fq^M{($;f1OZmH`cE0#(3`aVn&W6n1&dJg3tizHuY-nj}Uft5Px}|wT^C?Yi^~P0A>zf;8WNgs- z-6OHTD=TpfngN(R7G5f3)Ct8YJU|SN6+gd zSJl;dm4LU3eAer|HPwzZ^;G-;f4v{?bu|I{S%VtPTwfiik@-x-UsqK{KQ~ZYhlIT~ zby9V;-=5-9s`u7qE1*e*IfZs@j|$Ud zPGA)}WF2e_vYF&&avqcOnKYis6PR4Y!mg zrY&dM=}aqT@|PHkGNvwy46a=Ou1gUk2)4^GdO1d~KrFZluWJ$OImIzW2HRew ze+^y_VbR(ncs+{O5YryR;32%M6Wz5Z@p=lcYw)5|-Je5Vz5~p)p1EGc=*xJG;&l+O z`AmKnYx@hZ{Q@LhlGz1`X&TGL%1X{G7iij~;R49kN`?zWmXlLD?97r_etz~`dL!h_ zDic{&RuuvBHJ7W#bcHSO2b6q`sV>(Um&u~!iq#RKcBT-3ZiuSnF{w3aYR_6| z&mfY*TrQ;hJeY(V zivBPaeJd6HQ7Zc5RCHe|8c#(>Qqi|l(fz6DfmHM-spwBr(RWhOpQWPjrJ_GiMc+?F zKS)JC1lR$Z%_igtLg81|DG~_cV$p@G&BAqd4aAA-vK%1Qt;=>GPS>3gvPq&`YP1 zRBPGIUNS(Ptg`h%Sexiu@^ASHx_yt1v5EMe>5R4ObBNDQ$unEJq14hS4JZOh9 zBZ}F>4nrRaI)!2Fps{(BzhpxadjV;jXVN(D5ER4t#`*E);I8Ez(_+CfUw|y% z2Bw^D0}|A2VC;dAJ05gH($CR7LQh25xC2Ur<;GnW1_#{@C9vGM7fdt`x(`YYFE<{5 z_=r>GZ;a^iA$)Yv z$zi9Hd#;uorV}Lj={W=j7aa!m4$>yfcM-%t@gdvS65EF?whwW(>0T-R3-4a(-{g8a z7TbU3Z2vXE_TM<$|46X?PtNwgklg}d=%Dd$WEUe?^nYNqUFHJ)FGm>`@tI5XLXjw3 zByx!|6_s%*a(10$D&uw7L;OJZfOwr`d_x-b@Ym5dO7t>)*mcmjMKXJmajO(6jF$+W zkJAM~Z@HXOBuwURsYvfvd-6KG~yC+T)1A)Ezy} zC|0y5E9LhZh0z|&+Afn%Y`fB<5PSC^V|76HdXesaiS7aU9?5tJk;y03V;+D#ZzsJx zC&2YPclI#%t0H!+CnN#{#|g`A<%^7G5>I=|7wy3g_dI{*eU85&ej$l%yl5tk*Tb-D2Y&*{lK36VccA(MyK6v0IOrIaXuz~RZp zucVMPJHmA7#fa9<+O;qa(;72=Yc+*wuzDQE?@WMLBJPRxh{hi!YV24~mirH6?mni9 zke8jxo$ov%m37F>f{N0erB6ovFbpc$!C#htlHhM8=j+ebBVJBwPJ;c##HOD4*97(| zN^$dJq!OUj9Ql8&$55g1uS6p`^~uDJRb$!sx5QnP3l*N@Ka%PC*RFD3WM(@5T_sy& z*AY@Nih`=zo%LcY3Uf%gyXms&(+e2d)@$X2RPG?DTqpB}uo*YWDJ@-M+)hu7E0UZ1 zs~;wcEW*&bKPt5|%lxlH&GQ(KB>>=F%*TUoCIF(lk`DmSCIAwhu2tS*+#p*3IW;6G zd`M6%|SK0W-$PY(|sK8zrEQu(#=M`h}?tP(+XIh`}G?+Y^pNp(6) z1xL0pOHdG6CfGG$wt#kWj*!KKazVr)e69eRP$Ae{LZzVQ3toZc3pTQkr=#82%biD0 z7xv1B;7p+VIPqb;Z;~F9jfds<&V$Ay@@RQz4@Mr7&BJ^7;fGHkwAF+r4(c5#_zjBq zDS4E;+~-O1<2Eee8JW&+jMz#e_R@$0Em6ctw=D8XbfHCxWYf)!C^=-OpOMK<(>*NG zy1f7} z<#x55<=-I*?l}?)YQG$+v5xc48Nqw7MkKTYvir-F{4-3BhjR3sT_gN%CBG}X&!psE z$f4ReefYv;x(91{@`ti}fkdCq&eDF1!Z_RZ3EsQyf0m8k%JgaOQ972M2FE-2*}Uy? zEEcgDpUCY>T%WupVmJPb(GiL|jK9k5_Jj=E9lK2#{*4Rm?{d2%nPj(;{=o(KPb-NZ zsA@M;{)Y?x-&D#>G*zEc85H?1@pO1^a_a<+i;tQ|JMK`hdf4qo@G`6B{yhlB#fmla zvZgpA<`X}q`4S~m$5VH4=q@DIt_158%KHfBy;Mog;jFy;DVL77zDx<#^VD4&x+_@E zi`GRUE@h4v7l}cznPu<0#R+000k@GR{)tJ|&+tTv#Ctl>WN@xL3-Nm81 zf(v+&GG_a_VxAOfp46WI2kye|*o~v^pz|AeAIiE9?^|4SUijAR2k^eh{h&h5ixcC) zi9lmk#A)1YQTbomz63t5qJDhlUGv^v*=+8lNz*31w@r38*(5!a9@`|n(}SyY}b(=RrYsFkK_ejjJTgkjxjp^lte@DFq9vjU& zIZtY)_Z*zqcc}oM3CkHwPxEedDCWVXtv$oMM;*4Fz2?1YRE=fCy!bhrV^%rlZwSl| zu1P%RikAUaz#hv40+AWZ#E_ipk00mX*dJ7JgneK2_Cv1Ty|@L0nbYnAB0HkQd=`D)EA>%fR*xW6hL zT#g$o1oMcuOx$_-I9OIEox3Mn?8|a^NG`qv_T+K&`D3Iql%XkLb|%zrVBG{8~p zavOLh2lg(+Sq5RKvzdplrtvk{F6Na2GBX|lGJyGf)(%+9103d6c0eNp_^+Txv6NS1 zc5=Mwd>@|9KCfZhwPRT3SBfJJN$mW`pWiw~OY(7hmPMFK^gt?f9 zHQoz8^E%ALeV9v>eFYnCgDn7t^^R>sPx9}i;6K;!uINvH>FGIu*c)v}&H)2=9>(|8V=P=q0@3)KhtKmJmk@x;aI=@}T zVU866h&$}8GR!;q_VRq+dSpisT_^!j*aKS&P3%WiSoneH+>3x2R@KyaNjU{X2-BmA zjU2WR{*;`jVUKa2z-9QS!$9zw_w$DG4I%deiZ}4Naj;$UUJ1D2Bm+%c0+Y^sz|JKL zbI9sNc}xuQ`ZnUW0b6nt#zr>L{d=;_A81i8yk_IE8Ryu;e0WC#eg^_I2P7Qkd~f>* zkKwQwgbG`KG7&HoFQ}=R-O%xxu9`m=)$rOpH&Jgiljje+1TQ^&J`RE>G+xo{qqeGW zo`8!i{9GdDQzH7K*~s29B=F&c#5NvIwDA^f<7cc`(ZZ2pf=%*ldXr!^pG%b7e+?$c zI%1c8c)||31&HY~D9ZEcxxXM@<@jbKa^~+7g;DWX_{X%uAgwfC5Qn{R5?e9ViN%rpPNn=R5n=9zD6 zULQZHDEy?N@{>xju6l0(T<=;9k?*}2d*y$klCTQ&f_$V46=flvC=Wvzwm=ClF;aOijVb<5AW&OqU ztiP0!wUnCm?9>EtMp89#fc5Ya!oE*F(vIDSxmDwYy1sm{d zcHTIsd6V%M*qHEl&I8 zboiUhrou=cfqLD~IOUbU>iWLxN3Iz&Z*f23{+WBm%o{!5_x#8+V`l!DBs-IwMVN=2 zO*}d|hrl^|C&}@UD9Oqua|lqDStN5gX(bXI?RF7OCm$lR?sByeBb&sC%J8VSoV1g? z0O=sP*>LE~XK>PUE+d^pVI+iPP&PnP0l6m4B}FBS=j|UoF8-h02h%T zGuUlXbZ@5;dLNU~{kVeeHuV?a-bl5_nfVI_dr!Xm#S0WT{X7n<9V`ZXTgc2OSafTQ z4UfQt}D-XJP@IfhYA@#f+XZti--W-Y@Km~133G4ubJfRoI>uyS%tEINw!3Cb58Wuy!X zV7|r#9rQOv&ZC@=Ddu0Tuy_v^%ltbZe?T|OiRVh7Nu&5Km1g6$m&vTvR5IUWi8cHm z%o=`*HQL^0*1D(Sy0@6x>mHVYng0^`v1A!^^WRojd=J*&{Ev;?!HpucV+O`SIH|OV zHB^r=#N{;qC(=3ncT*dg+dR&vNNLtAq*b~FkYmSt%!4>99M)xw2hWBqsI$ylVIjoZ zt552Q+a$4xahaE43Rh{?7H$~VXtsj-79r#Bb#A2I%#6J_*LsOdC;Nz!O+HLAJfx2}my>?NmXiTuEQ7f#FDJW*q?7%`olVXs z>N0WxPV$9#iL;2%W#mHQ$tD?+Q&v7D;T^AzHz@<{DzX5>kHJqLrQfCGHXRQK=zd&6 z_iifRuA8@8mI#pZ`3`-Uw9D&43ph_vkTA z2x{M}!<5&KAfBUoOuZUX;_X3M&ZD>&(??3P+7a`ERQtAWep|=eo{@v?4(|%w4m)B- z$sv?D&0!Dd=64Yl!%{Cv1RVZHFL z3s36!bwT6yC4QyjCk4&>O|0A9R2$aK5v-d&gz~H{mOQH^r(vF zAh34B=!}@Z);ZC{Q?h3M78=$%e?Je8jr=(LdmV38MsyTXy;TUQnlJP0hB3R6wCw(b z$RWGK{MzNuI-aCo=1G5TCH)&BCL|NN_wU2+AaC-)gCy8R-sBC1Zl3g(ZoY-ha?E_& zZWX*n_?O)(*dOm;s~q#<4(dPHD95~K^N}PE!u~}c;$Pg3>*CAXpdl^^D{yT-Xhg$9 zk&lpJ_~FIYG4m2*1geh0n}>`cydO{?g?)ht0XaX1A$5g;SBO3hR;gcN*{?Eq*?A{l zWnkISZIjTA$>`Q8=;o=PH_Xo)qLZ%y{2v{Tf0TFfVe5r=@|TQcCtqubPUbd%c4{{m z<_$bO^RB`Q++;vk-eh2FUqpwwYaTK9tw*vyZ#H;;Vx?}ud{A`v1~>;orC5wXK+gS8 zsjnNnN3u{LEdwfbHB<_`tf!j@O8X<RDvlsdM$(xR*?fdr@2e4pj4JK`ovbs$z1G#c>Qhp{Do$ zADP(Fspot!xcBt#@9&I^sl~Pr2KPW)ECp%H2Zofh>LE&GuHN{;poM1T5k_}E_d7c_ zeK3eS`r0nwF?CbGH*xUH$y2&g$H+;!&9MB*i>MGrC zRwYzd6#$4pl_NPSlu)oXtlJ%`gsN*RGslfbC0JV%cBZsI?!=`~0+rR(N-ovCxicjy zyBJkaz?eFjl*yz#CKaGin^eN2QYM!fWz@kb5tRv*s5YqLS%XlZfigr$E)4Yy!d@$b z3r*-gDJv&Cm%I7gE#z(ycZ<0@ox3x*TMp<|qB8}BjfvWTmVPy~qAe*aQ8NG`1 z!DH1xA!H3Rrw-&#VGE zOiQz7Fb3*0U29%$R%S631e)WGTSsmCdSt8 zy}Nrl2YUC~5;G-fl^$oqA=UE9+>^CWMGBz*q<~}Iv&OtPL1UeCYHmFBshKFu&hZV# zCuN|vvQ`Pyg@cyB1hQnpJglxBYZk^5Qc(g`p%CLtnvPsoF5}YrF3y3eG1*{>6P1Kg zmC2b*&1Z5EQ>Ph4R3QX*S29i(I9|ZBnlfSXxLc4iZHlSkFfj;+OL)V-c->x1}3Z|LU6rz_3P$aiv>pR`(9rKoIf z#j6d!8-+Dx*mjva5TKE(+EY|7q>8~5)6EW)T{)-QCU&V+hgZfllYj?c25i%<4^NY;?r-55W9b-Fv~_%vCLG(i3~Rg5i{u z?p51cwr*96Z~HzJk8nar!>(104I9_4aUfSPs@mP%sjflOMrtP( z+R2}HZQTZG9Xw>~0Hk!RIkRb-2sJt{>>l8ON@LUNHA+`^N2k)Xdi@%uyQ8Pm-Lw$^ z?ZUZmsw4`=qc*o}THCT_>sB7MxvzIO%!GaiMm068Z#sL8gU_zEp6-uyvZjqYAZ#`3 z-V3|3?hdwoQ^V?}jcZv?ZyQ?waBpr|lT7H|*Vma$>w!1~hq|oZw2?<*s?NUEu;^$l zYc_1!u}16b+|zqLzHNp^g|~gsk`D2hh6q`+x5H%xLIbpHbBf@ts90Iq+PLWq zrN6890`In#hK*Yzn_4zl4V*E6vJR;CTC{S8=#WI)c=qqJMOJu+Z*N&|rCjaU-`67& zb*Q`rR9=4@{KAgM(!SXAL4Uja4$&=Zq((1(jzRkKL)FJzoQ+=W)H69 z#S_eh$B`8VCgg)kQN&Sr8ha@)&733LgQVG}iz$>m%L^js#-XR=TNUCHDildG5JOQttV>o%<4$lXoc z-OSxB+->3RR_<=&?so3(;O-gRJ(IgLU#mAkvR`yuYOaW}@@cJ6j? zx0AbZ?(XJp7k9h4doFi-xVx8@mK&&sU{)KfGR34=ion*BQc@5pD5-{Z&K+@=6vIN7 z9my_PfZ7ToN{JJeBS*whl1HfuXY&#_>=|<+IVB4zWtox8l3A4Md6B%50HsDoB%@>o zr4A!vl;lwAEQ%DB)KTh!-YlsA^stbYz(VSAMw}%DlxFA=y#$W#-mFMg$vjFkwTM=d zL8;Fd@s-S>G|Lh>3R zxkqV<`(>%s_b zxz*>N)8!kbbA6A=ty%tgU0I`ae%1?eYqozuSN16NXa7TP&G9en${D4Laz3TB=K3qT zaz|-p?#)VTol^ zydtGGj?NBl|0PkL(mB$cMXAS=;t6ruu|?x!6Hg~y1y`N=Dv0^)Ol?JL4Xh5h(^~}A zyBb`|bi49OC{PtpLgDI~C)}S!UAmzX1qBG|B^`#jAymvnsD|eg2MU_VP84r}IYnKlOkCA8eoQG4BrhvT z@|Ltp+ew?mwb3ZD5`Kf3%?PBE=21BHgX54km>cj^G8C5wm1E|{k;BLVX>Q_S!)>y; zStu5hl^jTYwn%-pxzkF66IbSZ`ONGVk==lmo@bty!1|ooGkloq2H6{B{w%Y1=!if2 zNHe3d`QhRD$NV{Qd8C2ph)cnPkq2;{3xt5#cf1MR7|fg>b*EkNx*$vth1;~`4R3G9 ze%J$6G;QDyC<|*-hLxo8ecb8_d`nXB!4M4N-H?b`oDx$paqwa;WQ(REQ_(f!@9Y9D_CUeNDJ66)+JIU3+Rs`I&~_(w<^%Q26%1`$z|k zw|^g|t3I`KaH8RzXQ@|6Iq|OU-P6{+*VEq#C)MtO1L8G!>dj!CCHfBlG24^bFfN0w zX&F?XYI8x4_jgvEVx{+D!I;(ar=Q?BBPz@Gu;w#4g@qYUKKbGRVw(bghQbkX0@&Y=dfyFH%P2HI9-)sI9$c7#!zai z>OxAWuCh)E)`aS07*$Gj7>;IqSSr=QK%FKU9Zp`MN=LHl&eW>&=HhBL_?b5+aXwun zfOtGAf#8=D3LO4wST4R_Xp{G^p<6jP>_GIcgnZCPe@ z5mPIfTFBHYriPhX%d{oN5-DTMHMR^ZodQdT>?T}SCf>=ZUV>`SvxP*fFN;X|u$UA; z5~XOckdSHoj@vgwnps{pi@S5UJCC~yxVwEFby=Dz*_Hi8E6TFIPfBzIva>VC07G+P}z-_;)(|^%hikq;-Z=tugsYT zFVywSl|-k8ZzW;Wk<~z))Cm>v&}>+SHJ96y;mwrz?wE3|^ocw4NHhoU(6gf5u& zEmfl9Qt!`EY0}#?KV|f%!JNi^mNdWrB`~cFI5l7hqjs3Y-U@XY2%xO7u;syU%7~s^ zHIKDY&OA{QR3x%WogEg5w)75V1587Ie{Xwt+dyZBwMZ>I8OCwYCt2;X(^9YP>5aAZ z^n0xjMu{fLOoPJP_!Ac(ML|U({p=G$r@ft&7B;_sS~#xDfg1AL`~d272v&z{lwdF% zbf>}1nxOL+k81~q$OCm?)J!Qs#ki2%iMp&j;7AULNfuUd)S6iHQL3^nvEYnf`Q5@= zr`6*2VyUJWk(1kd`jhHiv<{w(Tb!kP7Ei6(6IJr0c4H^82b*jiuF$Ar%B2v2N_ACT zl~Pqz8-isqT%ERFk2OSBa$?+=zp@J`$h?!oRHUqZJ>7d^y-ur@F{EmewBtIA@8fpy zo|!vI+Hrg4`I96_-6Zc4n}x~hmfQksyZ8{BtWb%queOVC8zzHKYHuhd*|!yZ`<1u>%9fMG?ZcQyeu$R((EZEtDXc9sC=+s(2mj3s_Hq;Y2?IYrV9cREux ziOG)~+V+k3y=n5n*N=VEK9Hi4(Au)jo-`@nCA-_f>l3|DUYRAnVWqVLNs`ScnZiCbz*9bnZzGlF5i(N>LU~+COPCV>0kD^NnkjTQC)xZ6$Cdr_+L| zP*r=Z1%h?3z9A7*>S}^P``A}oQxk@`>dJspi|4!A%IYemHdIrKc9lalN)2p=?4zC< zsH&@jpa9xd4hKSY@K_r%67xq51Zry0EOQ_bRO$kukWw42t<4zI&1k&2y2_P0U?3#AyN!NIS8RpF}O^od#| zg=#FAB)%f$8O>PNpxQ1};RSp6n(9eN72kIFQU;mT^r0yvs~GdH?!tq%e<~^MOE_`+ zHuWUXfD5MroY*i_Oa(e+x3Fj`@X4*hlnRsBC`<`Du}xSo6=-YGpAxJ!BOHD95bl^e z)!HtYT0J=hoj;{=a|*wFO2xL;lJSF74Tge&fEujk2Hb-+RdwKoLP2or_?P$qOf;^w zE*Pv1hVTP=s2YMpp(@mjR~c6Edpv}MfT93QRV5$@)FCqbPysNN0YFxX*4;z3;jj{} zfw8C9R8`A<^Kpq4^@hb}7)SB5v!hYy*)?EC_%Qh7iBq59N)J=^u&ljI>1E13mi1w#^f9HMWeqT8KU2V)@Q!b+{`wH+s4ZqL8^Jl^T9Q>|<-xuMB>hQiK)Zxir zfZuiSd?RI9N5H=Yez(EzZuor*e&2=PgYaWqP2IE_Htm<-Jq5qtQX@lQ%AcrFrWpCE zF;_J{q8dxpAR#KjPauPgGCgZBljsG6kV1mtgv=%oT6ZuLAeId>4olQE@RZp|$ed0p2~UWK7o zV?f>Y^xzjLZCvpcI*5MV4Z?4`$$GyTeNn8RQzFXZ{S_UoA^OvZKp&=qLzK)Jfk^fY zICGvw=Q(taVZvYYe18M^V)34*$@0B`rFape*Zt1UWm%Clt)zH5cT2fDgS#`iyPUf# zxLeQNuTt*aD!i`=?{?vRU3hm0?@r+z72aLKyGMBU3hx`j`=;>j6W;y8`?m1DBfJNM z_dVf#Uw97*?+3zrSa?4a-Xp?$RCqrU-cN-0nDBloyk7|Kap657yx$A&55oJS@Lm$$ z%fkCV;k_cfKMU_K!h2PCuL{w}=Ng*PfZQ+RI(?@i(TLwIjd)uS6aQHXP< zkwG-s)j)KrWYiO#P}PmR$eMSikxv{Y+t5%mi>)M?RBvBNJk&T7jW#<9RuUI=&aNkO z91iNrTS?s1y}W@GQ%|^_)DW7{ffl2^v+79`p_xk>ND=jw*OLu|W_6;;=V zuOt~XcdkH_7jGbiG=FykDWC=OL|9=%1DQsP)}n#wX=l_EKb2{5*Gl4}B{?gJlTL4G zAk%4SSv?Nx8Qm+1m(H9ol9p{k>(S*+x=}=C$O}Z;S$Xw@5js1ETalhKW2R9|_m+8~ zYIEsasM;br52`ks&hO!ku>fi|hx(y1e!8%C6`4gBL6PUt3MkM*T6tarsic8(>xq}p zAe3qW4fU=h<+N&#C_*(9Xg&=?K`LksQD}s!3Z=xwzZ6UOZCG;i@5CxGNGX{~Xh5B@ z8USmZs|lrb-ql2+i#^CLv!rP?k?GPP|A6dCcrzBa)dqXo9VGJXS%*v<~k;qU) zrj6ETVT@ji(V1kaxx$LpsNm?3m3a^ydAibUl})* z_$Y0PBCUg7A=8>EWLkYF)5_&iGs!j7JdC;-vbc(kEP7~0g zWExR3Nik8pqy#_FOh<78U6xgC6ExGesOZ;kK?~H-`>A<9#o7+VORZWxXMTqcALbf| z9zflQ&0dOu4+^m1wo>yU8l5rRJOlgNNOqJ%l2mOv{ z273{~exCw1KR!PRmWhR}0I*jP?5`6Q)@c=XLBEje??+)j#GV1k(Acy29=BPI(sHt@ zYOhP!v|L+a1-U{VrDsrd&y)^>dzSoV+5C)*RYIj0=9ThV^D4P@?(D9)=GAg*d1+U< z`2}v1*nf6pAxs2r`sNydIxI&QalWlZba2rz^UHFyqPc<$Rti9BvDkH_5|76B!yMLbW{c5O=FA+eb$L4lQ8D zD*^bca%(tR(_BNk!se|qTAqy8nzzZ(x_DiDadb(1No1)s&-|JlbGwLH7F`}+&SSoA z$J`-DSHxGu>!S_v1|D;#9dlHUu8gmYuZpgYujVm#*)ey^(KYck@kk=(ULG?NQzC2O z?Hg!tIU6_DKSB!hZEkQ`e-=$fL!Tvk61w$#-&&NKJV3rDo8Obm$#WQZ@R+v<=FrG+ z38wmi+&XJ0+7xfPtZSC}u*}Wid`}L_Qs(n8;bmPiAGP}ECjvjBL~V}Pov5+sXL7VT zx(?Oo#Md{kqmgDh&-?{6Unw-*pqrnNTj$T|nr}WSx6Yf>HP8H|+&X(s*KG4C ztV)gy18Y0fhe$e3k3pd=`f2C6v4>n}6kvdcJQusu;1F{(Rp- z)Fonfgqhmmo1y97uw&j#?Qo3whaK})YKLRY+jh)9Q#%}E{$y@8e1l1LQsh ztyXiIrEr_oYt09g6jG9fp$|gn_aUEXQ*#r6ydL5yhT8JXA1HzhJq)?dhFpILxz2`M zAF*=%QL^OQ?UMgE8CGwH{UjN-!w!24OI#qq0$2hCejFR;NhJy+Fn$I%7=H#g`uQ2Y$bto(CI^vuYa1dUmvF=@sMNzbO;yPB0a*bRG8XKt*O~Lwue24~5tFEUsGh zZ0?@ZyiUeE&9}H=@p96((|p^0Twwl_Kl;B++oI;bpvCyc1e@v|=%D{9X@eZe-f^C- zIjD+h63+o@eo#%6kfxOIkSaRxGIe~1U9PT`0&CXi7mUz9)7N1LORa>~p<;)1WSU}a zP_E?s#n4Jus-yHeO0QDQt5m4v=Tyrm<6c(gaE!&XfZ_mRXKW^i*NgRf!+C73}gZaC}= zZWkFGRn0rp*4eXR@E*mC?h+ZDm6p-n>M-w{d$_;AycetSA?THFByzbAbD56wtr2p0 zz|Q3X)qF@5bL3$)F@8i5A5pET|08w$Z1^$aD@__LoPk@oOx(92qxOp`?$~~ZFf)^T zyD|;3{|rv|Yq|038geac#54rGL3?_r>s<3DZAkPrS_z+1PG(1zs`JbvR%m@%=*?E> zjV6T+uNXDK$*-Zv}jMfrxDd0LRkwTc!(Euh>{`A9MM{P zhPrypXE5PxOo%mp5flDii=G=lH(r3(DR#uG81YvTkp~fT?TEKA;$I@79U|u05f?Lv zxP1d|M_h>!SBZ#jh*)4pT#FIci-<0W@MF1)aUd~4QEzAF9Xxs{(gFQ;CxfCd z#LdQ~NMr8hdV&21vhR=2I+% zKtpNGr`ZUHiou{CN<1$xhXLUTNAnCDH)gpWn%|1H80I^#7qBrF;r1C1n}5Wne3@66 z*Y{7NzHzAUD^TA#P~X2`f(l$9KLH8;jtNEu6t22&@W5#?p!wInoQIn7Ju4FxwX!DKN1pSYq4|UTG;GcITO|*Yl1|Am&q33 zs|nR=Tv|fS&EVpDjEnCXOz|=~)9_Lz`($w)Ea~EsT5?EEx68xbELdv{m9vi02$k^O z3MIYqE(*=+;ssEew6(Z}Qng$dg5}~ap&TA(KRwh$%{g2)!IB%&%$%qi)#6$uN?mh@ z%MHm8Bls?tN)zZVNXqB)?>zQ+%{)Cd0%Nd3yKhJn;U5!Uak9w8cFfBC`1z@yf57BM zrTizwIp%%Z$$&G)d55&8lGf!Z|13K?Sn(}Z^9a5#uMH?&+gUUMQVv&5L} zF+5bU`I5!A2}mn8!BhYZ5Zvk?tO#NNJQWuN@OGT~z)P>_&Iv1Olf;DiOeFwsnd8ds8=ra%ZLAC1w9&_DqhZlT znOVleZ{R#K$_RYs&xOxU|1#gvpuDCQhN zG3UVJJWes^3yP^~J_xFTjZa-v;&wA6nks{-nfXyBHUgZWg2QR4nxLisuxKfcPCia6 zu!B%tK-)ln#rf@ReH|4I9UaK*V^4(QG61#)bqeqz4!qa~UQ@BXAGLGA;OnY@PONC_ z4dNW@K{L z$K7o1=5RNcyZPLmhMWd4kTqH_<^=apYY|XknZL*i_Y}rGl~ZjUCxE7qRDSev(q&^bew>=z-R9FNsbD@zFRLegD!Q^qM2a-%vE+v?^zFE~aL2_6LoyKhoPLOnk3At&ZTsGIBa7VETxH^lv>)G%FMB zpRC=6)5JMu7}&s=$!YZotYl+`*csgeU3SQt(=4@EdK~-OkRrkktN(NnikaU0fnedZ z@^lL%?ABZ6>sOv8vZlRUK4aBsqS+2Ol>OkG?tHKa>gv-(BXm}9mkAQp?@ZFD{?i)2 zTt{FJH**dfpfN+af6>WNj}0h3DY$Putv~6OaMK5Ks7}|yS6f#Ta3s4%UkURU`Teza zp*bxWstyDax-!&Yb!D*DktA)%q#g>EoSYJ?fy!{8Hgg=+Q3IjMV91%WH$VaDkS0d1 z8VtbB6*8y_29$7ZILxe}h^(~XaOSwROsNZp1D^Ehh)nL`y1Ww*Q8f?@R)@1EDm|1r z5Dps&nxh7)tHL!#0=o(u>Y6~w$%hLxSFkdeJ<+PJ)P(|-B`2qrXev7xG!j%n4b;`u zRF2a&sZ<3*K`oc&x^pvg^Ykhix4Gq(@V4YZyVO*uB*|h*KBIFPozJMB(F(&unOcpu zrqvZpZD8surmkV?TGWE28cf~5)J;s?!qlxy-OkiAn0gjd&tYnmsk@lk#*}uW9R;>i z#k>{HIqbSzb~=$;6D?&+lA>l`PMuEOppu?Dm;(Vy(O^L#98aeW77(cz)iU8JcKTp} zq$^4(#GyZPuyBS<6h$e!oVr|vGYa5Qp~@`52wFI!yg;T9GTVxk4S1Pjzc}D!p8ev4 zmj(8V3NH)o7ZdwvaG!U7Rj0Tb= zQOVnY+O6eGlulQC$UdoZnR6{0@2*%*1M&>%xyWQ`WTSYxBd>w@B0Bo*;29hCB zcOijI0@=Mh)k(((c7bG34^ z1dq9RaH`}_no!<~Qz>P|_@EQ0Z_p$A_woz&#Ma+BwVdqs^Q22h%Lk~x)v6?}9%?XL z9SEZeK@@NZhfq~uI1maKoUmPd;~T-cPY6ujmSc`-6N@Pd8MnM-_w7pUv2miCCl`ZG zNNg6S;2R^NCd2?!GfW*XO{ZL~iW7tj5k7ZcYOFgAb`rt96zSfi7+<>N=ay41ZMqQ5 zxCZAZ{cRrz+A-~(5W4+f3Y{k27px7|1i%f~)T+Un+CXjI2{4^hu)XwTI+?MQr=xPN zdn$^bZJ~TyBip#WgCRCw8`}0|q|=)Is!8!q5a!yIvYD%#6vIhwo2-kWQ^V2UIWYbv zX`&+n-Anh-Zmp+t@9u#v>zad}dvbjVC*8}Z+>to@Q^8gi=M)W*BIof-BdiQco_j&1eO-VHuvE=)h`zX5DmfN3PUyISd zKh`hwV~slu&~hiv@O_DnYXHUe@_ROR>s|QX}i@j zrFJn(McGT|c;;|zhN8E*Dnn0t5tuc4ox75~IsTZ@JZT@L41klLCv8nMf(+T3K~A90 zO5=L4I}>Ug$19t`3sr}8bJf$f02M&$zuW#gSH7LwD<~c4<LNqNDTVRh{Tmz2bePN;$9# zjodziYu%DsNqD)J_F z(7dU@@?|csfB(LHy?p~4d-q1{gBYyd{gYe}O-|$Njc#(d(Dve_5rGaExMT86x!g zsalVfU{zI>5~!=HQL3tH!b(**7#ef$IPM-bP*+`7r-W+if=Z|s($reFi}r0|ZCz#U z1Q)_;AW$6)E1_!C;t{S3)J%HS8b;mxf$DHgwQqb))L>PxGMIX+Sz8qf0eBGHV6d*T zDslN*Sr@27H3oGxDYw7Ds&G}xePpn*sN0j>+B zx~499n;WPK)TCTNqoRZ0#FwV1GNmRsk@Xs=SY1sZU2Sth{iQE;U%yD`bP7}lP>n)u zWndcTVbF73YHmJN3v!F}>A5xe1!|qXB+r#!S6ElrQkbuA&E1iEw%(y1&_9~{X{sNl zx%X1lkPH{9bo6C8Bt;dExu|ye3d)%wROE+{4JJ8|9|E-_4j+Ui4`-0+k9d( zm^72IGN#XA(p)CZW72#kEnt$LNeh`&!K47H)pXP{_hRN+#*`JzRnJ@v%(aS1YnZf_ zNt=o&%ihkUGcwL(Ip?t4c2s{L#hG+2lg?vO50myV<--|$8U0KeVAAaJx(Wa^mh(CApx##liZ4)BxS17hW6GBS z7L+v(M&yF|Wo2g#HZ`wDgLceG&E!goTI@l)d2#2qugPXTOT=*;aKnub*fKLjJP{{QbN@!X5RtP}IJLurH z+o(*!;qYA)Z@b}bvjT5r;cr@c6(Hnpx>+uR!0#kLsX*Y77^cf;!slCLfB z`bhG15xhQ{e1&3!f5OWFW&9-+uYf#F2c6hh3q4Xsrq{>aEbeA=H;20+?pATPn!7`k zdn3YoMtIK(?>YKwO381;%WsAEyzpKS-iyNfz3~1hyqARcvhe;SyjO(x7va4oyuS+X zZ^C(>~Ea zW=gK&LE1n{Bv;AIdQwK{^m5diP8L-|1nDwSNbE&+dr zX3LxfZ0;etnn?1z`3s6rxq*L98b_F- zsI_m%<{%gUQOKZ%YVpz4q(RNRluIpr5~Y@?d71X~aF=9Wu01`{C7V~EaFCRgdXiD< zDF&z>w@^Kto86Wc6^31dO^MC@+}?4C62Z`#=Z zVPk(Qf%I*S>tz6>K|uN+3+aD2(swoUJ;28?7B-`zgXhfuB~l*8lniO~psh29 zx@MX;(P(+3oXj(i;3qJb>QuEiDS$o$plC=M%?yKYjM66Z3>~G-6y0?ay6fc^z}=v{ z2<}Gp57c~t4xjJS2^o&hvIY3jjPHwdga?nL2CL>DC^yIJ-OnveZ`NJ{G+Wr8sQD5d zj%o4PhtQlchta+D9A=yTXKMbLj>L3~HOyBjT2UFC8=W`5-60<1^I{J3H98byF{44A zr#k>eOn(G$#Ppb&^T6@rkZ(+b04=7)l$=W-;O|&u^=f^Bkz6jMsGJZSwKp8VZMxYcZCeoiVKT-2_cS4(J=xPtm}(4M&zT{L7~BSA)OMjQlze_-2UYEwvuVdz@1f329#^ipk`Gzzy47BS_ zj%ozS1=oP^PiUrL-YV~4k-V~`X)CZGhj3(GCP(XqgnxWxbX9y+WVJNUyqpI{)<89` zl%tV&B)T@fHrg0(j5I;)XHgkJrlx87udrzzlTcQ>U4;SuDXKgsp|G|hRK*mbs+iKj z<~;^_>K+G|;O?ZuD9b&9%4K589%YnXL>`mSraZb$61taD`7z0STte~e_&Tm#W<5o; z<}V@4{FM|fLVYmJMHDkJM|C zb;65o{wE3hF7Ii~9<_w%mI@k%V9mPRHru=u>JV)%C(X?it7#sB_j)f@6_8&AFFgi$ zqIu!PVSY~L$TtA;t9f)}Bee1t@KI|dj!i^YNh47Q35gH~DSe3|HBF}fZe7KTKhYYXfYD+F6*UF=GExi_~vkX(@8j8J->P-}}M&8W9 z+Q`i^QlndBq(-;O<}LD2d>f3#TfyIc=oqR5DUFv7$7df#jW4Je1YfrksP-Lp)W{IL z-O06hz;RDo2H5ZA*f*1V5idpeS}J`@HowKw48>;;8pq80GOxJfwJ06!|h` zIL6{T??**2=H(FE2-(LJSZx((;+&7cV*6>O6slPS$53rO?o_x!jcw!$3a=M>njB_$dig4T-4gF9fY{4!uUj5`VQS|!>VZ*4TMhmiO#F&?KWOw~RHIB&6V-Xd_K zcQ=*L+bpBorrZv0M7>Kfzs@s=DIy2eyhDkpq8aama+-H3(J(XxW)KO(`mCAvD6p47 zg+KQy(GSHx6w^i`Z4yR&6WRp|QLGxO_7L{pgH|aX6s35O*X%)Fvmapg%8$VP7FB-& z-g@n);BI6;Q_P3ctNcS=Wh~GmSfC%-^@Tx&+CQLlP%!^}G!mnOWl)TtLNTD*p>uww zh^br0kXw~5vQHN)E9iHKJ zIL7Pnf@1zUy}-Xo^wDpXXh*!G(R?Ab%)e8jolxdZ6vmp4*+e0mSFCJa5!t-Lvw4MQ z^D58gbp_Riq-OJ1o(&GOzd=14&DT>iF_mZ>GKpg*rFJIoSed*dGI@t*@($1BzdVyc z)qFQSllKyt{EufcsHS9cP>t?}Om<@?Gcc2O$mCP1$mCNh&jh{A61r_ND)@*fpI6P# zs%e>ArP@9GIdx8>`T5j5u2HQXj&u?K59v|JY9?m26SDe>mDN{7R$t*+eT8Rr6VK{a z)jX1()y;{lzN*4tx-~Vcuc|6(TcyS53PmQAff^*>=P?qC_zX#{V_f)aH{xKkXjMATj z*DO5&?mGEN)bfGa1Nh$e2kKh$VYT(V*{S+)q^0FBac3IR9Dm zr|OXZ7ZmoQhk4SULG;g|Iv8mFLbZ3K&zVoC!|}a?Wyj1X;h`61jAH&ujqWp_Qio8@ z)jk;xwQB1*BVFg1!>AQxmJHG*}mcOv`)&)&iz$fD>1S z`>d7Wk64n~cvRoP&wqjFC#jI#niikN9j^1>5Ek=oHF_BxC)o8vEqeLbB&b252;yE- zh0*Qtg1=4c#lyC?zTKS()7vx2y7w)OyCfauqPG4ONg33|>5&yDj9DD#;;H>(d2UV% zmo3$`?EN6=={&!)$2KQ%8W^Au8Ul3oy)Ptf9Ubd=YDW@=HHo15_k&P;2@we9o)|&; zYrzQtjYI)Y%I&%C{R=^l8(+e*StuNGrPf8Ms;LaAyv>zRO(4juQJ@5?YHA>)HULkR zm7a8Ta&=uuK|XaoQ=*bH#k`n@v!~luoTXBulp5o$hfzs(460O8T!T(A4CBEB^X$zz#rMi%ttb0@`q;hvtPIe@8w z+mz7N(b+%Hy_fUfHKe|*bXvXA)Y0FN^1RZEUs~-~S(#={kdwtG?iO5dR_X<0M(Uy!{$YtQj4WDOp<(U z;2e4V<9epN(vbvmBqx(@J@#|vFTHbb$G%?ZM5Ap0sutTn(3#MN;Aro+X`G`Y@kqNl zrw~2Y-JTfGI1D@bxA%4TYwg^VyF22U1rykM&p+}qP( zJ@y+Smkn+E9LZ3q-Uaqh$$;RLZtTazcAN*`QsSJ+Ec#cSQmahd5*caau)I=mO&f`6 zkZnzG3jmqNnmV$qiE9OlNt?!6z4E|VxgzGA6QE<7YTB)iG1>9*{45c;{sDjg3O*nUAf}sXN+{jR%vKnm#)gZ2LI2cr_ z;K1fiTYQz;x)7A7E*K0cRduzsN+?tvR6^l8k=8(kMIoO`bLHF&y(D)=?wmY7H*~a6U6Sk9m+Gr>*W_N5 z`x&ZgR6Eum zzCw*70C6*fxo;8NdeZ&El9BWS@E?O8a^?MkGS`#Tc#KYyt90{6_-hVPf;W?{gaDn7% z^zHu?b-CgjXqN91dhkLBab80QFQtbl^*Fyo2ZO}(WlE^icLN1X1y0{>5EdZhYj`x5 z$+X+4^mTeCy@MX5iO0K=k9Q{@?@2!1n|%Cc^6^{A$NQ3x-%dV$C;9k5^6|ms1KTkeBo_u_Q{*qEspLqWjrTcao zI>{oWP^*^>LdnW4UJs>GMDl4AjmWqhsC!G>NvP7jg{f3+*y46lO|54T#LnHKYg8|4 zQ6y@dx5eY4j{GgzKI&Y$#pk82oGlq{>Rw#01E{BG3(UieC0jBxsJCdVD$`6yz2YR) zC)cYGpG70or%;-mwq)Xw1u2ej2AW)QgqmLk*dYMAm5LIYw^30(^J`R; z&b%FqrpT(SoDFHe$I}*&??Gh?DY`{4FGuM#`C)4QfJWUz5jP$595Ww==VAVgU&*++ z7QDgtO64RAKQcc;qnZBl=1eM^k75phUsgU(A&aMwwP`Tx*eIPxo&wbKDY^@!VQM~u zwqR;e*F7DIs&Vyxv`Aw9n&R_NJiF0+fktzNA~_V2n=gvsk+y8}cXXuDTLqvmLpmj{ zh;)CV_{`J2nv(7{5sc~n3h4;ZWLY%zyHx1HeizCUr2nJl|7bLCD3V79ozI!aX*7R$ zD3UKh3a07`dkib{X~|Z;Uqe65**OZ4U!(L8GHh@S`~mW5$-EN6_$TS2c+pwYEOl!+7#_tmNQDRtplo-)v%*nh; z;@b2}NICH!1IyL?JwCnB{37y$l*UW__5KF)Fb2~dG%`bml9^wUqBGI7Q1eVG6S)j# z38a?_$t)uKh^`n4dr5}M-Oej_3@X|vt*I(kmz zV?mGFttvCofWIRv#tiT@sETZcAWx)Xi(;rhF`A<9`)*hPPzb#&6!h_ z`23tFj~_R`i*04+i}f)duybSP_bv1e?=6V_2cj!g?8^9pxF0%Gvpch0@h-yN)M9E` zJBzXT?YiBY8gjJ6vybAZS?E$V#;{X$odq>D^9krwO@}d{E7*SK!=i$EIf-XuOPW8F zELIvLz7PXZ>0o3LjZ_d`H!Nb0L)6WIkC-9UZ4=b(M|Rs{lQ7<>M;pz@q&bbmQArdJ z2@t)I1c@5LG2kOr#1SIZ#Bh=@VIERLWDlt&nupXO$F+e(W&w?fq~!Gatu!o*B`q0_EP+1Y z>{!oB(WQ~4&<)5%DeJQG2F|&cB_tr8=gP@3oKx`F&cErwj{zYeFH7btR*|4YneIf1 zmSLIB_k9id#aiiKpcuQPSHW$OUz5zgNJH`EfYp3e8jjEJ2Rb1M#*KZPapObE-;m2t z{X4kZwAUr`Z&I{iIHtt2BLy_R0?T0jU5crYv|Te_=V_U@3`dM9MeDJ{0kodR8~6v{ zH*iS5F2&d*{Wwr!TF$f3SFcG)W{oT0{cY?e;!@lSJE}s>-%Cu$PU$^KOfy+{ikN$< z@H7#~gr|!@L%gL;$T)cq+zs?S$vkdN$fXi7FUG+lm1dP8Z;8y?lG`Bpq};j~R*l8T z^#*|mG#lvXr;)P@m!#b*DHaLMKCQIOjmeRf(mdqrg8Aa_#sGhJJR1^yo-^rSz*(#C z+wFGB&7bkFw@@GR8ktWt#wXe;m}YunnrYtoIL-7JD{D7m#{71NJq)5Dmt{WXG;7K+^Li{E&RXTHY51x5i^4h^ zV8G((<_)5F2F|KDl5|I+c)BQ_BW9GfJ7doI?Jm1`x?MayX2hIWJeTeaIt*SsC}|AJ zh&^TADEQrY@$hT@&HTNboSQw*yhXP8>LROQ@?S6Gr|UNH>Dr4sgs=0)#-ek8&vQPf zoBt=iX5TF;D#sV#a53*eWU5#|RzliuU{`X|X0?RF{3e1p#AL$hjc+``QEpVrywA=~ z<=OpQUP~Nn2yDJ0L@Oj~32h`zggHqwQ47gBVic0~Kxka94aDIj8;R~Dn~3ZrZYZ7c zOYH(>^Hujk^1N*RUQVvM7ODPV)?L~B zgUp9Ewn8>C^1dV|R@(#S%W}$UE1CZ%N4MZiY2HGSdrdUI)w+uL7ZISKI$1%|p=Rc* zR_IuA5A`))ldUS7f5%)~c+0oY=;rw5%diQ|*F|F8Hu$$v;?Se^xKScoDH^r%E*@j_ z$NWdK8iUk)i;s;&J>E{K2O8h`7suB~k4ivFrES~w9YpoP(g8g`3s;ge&_>{yL@p#} z5tc>HCi-S_4(>HPvRhVujXnJyH)6K)82pfs??iSxC$iglEY^2;GthC2(n~2p-Z?m^ zq4!BD9hc4HI7yvD2islV{Xjlqu9&j~(2df|{vT~`0v}a%JpjM^mbtTMX0kv6m_S0< zhGa6CY~aF>WDF4jS=?vhOvsQZ5KIC}`)@mcEsB} zGE7~rM!IJt&)AKv1AM1|)tz+jUgNtRsb5Yk*8=s0^ahn}GEn)2?actgg!v2-iA$JV z58f!p8+I7{B6MLl=vT;&=OfUS#JW{wTUFlCUPT7B`!|y9@V%OB$6mMH#b2^(*N zH>uIt&{bKX>a-+VE&^BVgm1{YZw9l2yAK@j9D__=Lu|LIsKVU9Q7npjE|l**{L)uYx(D)L6CwAi_;%qwe(CFe%ogEyow zBj#=uZ*h8XIkOsiWgPAFpHzRaH8^JMl;tILS9retAjErYjyCV z%3fCge_9>Yb#E-6bTz8L7h#eh$R3D+eu zqysgKL6h7+3EJp-Y@LNT(F#iMLPk~*{I>Gzf>V|E;d>KNzgF3YYPuxvIEd$CRiDG{ zXa7_Ol2b*8iT6K0RoSPi-rL+v*r3`kx*BM4OpQ)RSa5m5K36BLfg+fSxAWEL%ru`J z?q~mo+EScMCYOn!%OXjJUQWPfUqk!8g+w}u|2DEcp>D^UwckQrK_T4_@f+ITs|aIl zYJp{mWgWjzSP1#qS}0@s*!h}3z==A$01Q-miO;nhkR$IwjtG(7d4@=D7psV#9X&mH zdH_Fo^J^8jiK`vQcrsTz_-RPxk~vLy#%^5YINM_!w$IRg{y&Iz@`UFuXbHD9wuBe9 zHO_BpUgTQcwX~^=A5+A8*4j-l`+!E8{lDKT;{j*t9OEuDM5J+PKBSABsiIsLJAU*> z>ijfBJwD#oY3YftT-v=tOD^y3?#WyPfCM%<5!VmJ-CPJ-cul;E%SY3Y za4$(%QT*3z@H*lkA{Y_+@YLHf5NR(s2(_yhAmg5a#%=l`kK9=$cLq@yKu@@jOvfkn zO)G%XUYL#4WeUBITPT@B~6%!IlUcy*>+QkNlwX{fIFyJ02tD+PRqY zQ3qw2$R?$;<6LoyA0}}!n>3OpvXnHF2uY4VC`k616&B6tgD`aSu%|+^|M$ChJd)G1 zS|L9Rs%ofl4XJu+s3BCZ)>Z{;)nG$?jU%g8sCB`HDm)Xau18rF7Lj_jK2%esR@K$k zQk}S36$;e5x&9Grfo)ViKQ1Y-78V?3Jz8rl$X6`{g|}Mqqy$Zy(?wiI;W-J>D6ycD z64gspAL=Pl^TrUWj-s~F)Ha6N#!?%XXP_2STM4y|r)n8hCsK7XRi;vPI#nyEEr_Qj zY7JFusoFr*8Pt9xbvRI-fqfRWhp9T-Rwh%mz}6(&#>lo~W$J37@*G<$I38!4E2E?W z^?0hz<6>!NQf&d%Dyh~))kRcYO4UxPE~l<;Tekx9IQa8Skcg*XN~)BM^7vB@QsAkB zuc!Qkbu&qwCz@I)NihjA?QQZIiFiBzcJObKf0yxZ7yq8gzi0993jSTmzpKd1a+^hh zvD~K2QdAfw>QS>g8O^n zBrj3amLY1^ao4&gCYJ@us>*_8)n%cwnzGumy0ZGRhO%(k?6StPrn2U;$cY}@)wamt zm=aaXTUD5%;hwd{rl?z$&+P2PJpp~g1@B*16ltJQ>Pa7m|<@7<4qjnDxk9H0_ zIjWVFwQ3}#?PaIH{AnMH!FNC38DnRp`=>tHyASs~a8ZMs-S~@8smyar#7dI3xXnsg zY~ab>{R3sz{Fh)_)y{*Tj=?+3;APX}HnvR6&jRSzrTfA3_RyrQY?(1Wze5PcT#YHUZ@ep)yOh#hPug?_9%m1aBez z1FNTQ?AwpiTg-5)h22Qfk$jx>v#r^_m_Z3`A|rQ|sdr+=ux%M{y*feRfSUr#YA8Ic+^gz?D=S6_dr?rzBPPL@fipRJoRtv+t*)Kmfr;_ex8)K zuonsLBB}~i)Ymbc`*4NA<-gO z`4$m~mc2^`pa9w5z>Npt&KCA}(hr5H-kz}BJ@Ej!D>4R_TW@gG0VoH)IrIM zNglqUI=~lDE$lqLI~pxc7Vq{g!FPCgWKhf>+ZK}~4|V}RdlCC&4zW)rL!H5GvSQpj z#Sr5o<0ZtsNX`UCw0Mc1 z!$*BpcGMf?Okh3gcZkHU712QZ*v$_mH)re@wXmCnr7T&-`O;&+7o`MZ@B;eH`jHGQ zC2gtl6@={&L13}E+xHS6>_is$!Zk9EU@@?JMGz%23D{EEeHcLXH}5nyQn)p;lSjwy z=Z89x$x;j3WrUj|VF|Ja`N0l~YS_J*r}kltYHD(7WST&D#5fSrB7WnrMDsh6w&?Wa z^t>Vn@u(mPjy#v9?vLAG35}Wcc*ZAb13R{L|6KMoPuxR3JfnDq!^w&kzk@xO<^Fr& zUfIH4Kz?8?$?ZsmztvtYZ}#Da>&w|?^JiJ#vyJ+58t30kPS*4$%gxIugIR_ zVY;!|YkGM=jsac7dW*-|BL7DFz4k{fP_;+?RQnQ4EhuS6NYxT4mqL;nZmlCN9+=s%_vQ3H|6)90DT1zRqU3oDvU3UhNVgLY^sW9A**|r=?AZqPN$eBd zu6Qm7`$=q2x2v9?fqfcdx?S_E0Q<@8bKP$7M8SRv`$D%<+)4AF%D&X?R?ksjpU1w^ z?KaPJu%E{MqucE`ru$E4|JCgdR1G`{d)XWs)!0O^vq{k-qvgr+0Df>2VJ5hVO@wEghbzQe z+0j?IWZ@jXi=fF0dS0e@O&x6DKLh+-@LRFEx39UkJ-(_#l1nCf!6gC9eiVe{PZ;^ro;v1QKOCaw8|CE>Z21>uFw^A_9qW1Zz| zI(n*qwEjZKvY8MatO;Rx+`-FbX-+b3)CAoA=v4q=+(A{QvctqM)S2l7d`ml^ggO8z zv*Is4IJ^;`ppf7xB<FB(c`4tOopYeVVbqR@j|jjD6R!N`V}`Rpj0`r!gB>*%waTQqoG z9x`HedmkX>9~=yRR!D9yRvb$kzdug9dQU`i^5JvIB#Uiec^osDwuyeg-j-?Iwl?en z@and$4LgE!x_g#tZP>!$i+hf3y!dQwM!WR1>FqGy)85(D9$$Xg(lS#j6n#!P9C9a6 zU4&Set3MKxXJ>CX0lB-nufqX3+?8A#UcRa`Zp$E%(=ELn$Sz*D$8lH`1GGd51(W+<3^yZSGlnx z`51XWqNkDFD%PcOBVjak^>lDK>LnxjW>>TkA`sOXD}hab&@I?kqW)AaXZO${pn{Fi z{bpJPQgmi)K=iQ4Kx~8-Z?r3<TswdQ!?5mr({@0rj$ViN<|}hL%T*Q6ak>% z$m+Qdg?Fw+P7lW0wAI!ySsCSO*{_62oLKqCO>oZbBz)5%0L-Ek{40zaRy8ZF#vG*JKHI^*GtkI-=fH|_c&#MW_cA5NoS zB^696O zWw6MAz5p^AR%4E=)~HleRE{*ni&gyMZm=BcD6{%UYoFJ*Fbsuop@y282DP@jzFw`V zuB+EVb@jE?;2Nq4sda(cdNov29n`9WfreVOran-s)>Xl$HW&=yW43y&x*-?>pN0@V zNUH-%wKYJgDg7GU_B(cx~5(WR#n&4sCBh%e8Jja~;Lt*WI-pnuIS0h519f#;Ree1$4XgJ08nvM&5CjsOw-CM& ztgEYmT&P9W09Bz{D63EaQd|vX3>gdM0eE##nnB13WUiqBzd?v06llO44mQ+RJF}~s zR#(l-uco#NUm)UZ$A(ZK%?tWc|ssH^p7 zfHI}B4aM}!E-L3xg`aaPc~r@#N&!_yaq%>TTtdwlE~I80mwI1}68x3%ROZLs@+1`B zuL+U;K`K|H;C{J*YDZIf7L^;RrHRUOsM<>DT>d<7K0f@DPoVVRSAVBadMc%-QF=O+ zSZKoQS>aVS&S~ouG)7DV=r(9&ed=32YJ>G5byB&Ua=o0o(y8Z)X416Di-)=%R ze5v;v@mh~Q0p_#tdk%iT=d$$q%RLR{=kFm@NrSl;ey;!woc|NNP+UGfp85iQ|AJqT zY8OBTu9vBHA^a|aeB1!$wcxf1%p1YnCUYeP&w=qG{9c9M+wl84{Qe8S@8Nf`Vw)(> z#s_+&sHi+u3g4-z$#PMVtu9qM4Q%z?ZANOcQd(40dJKxfpLyg_q_8lO3X}3lEvaLr zNykZ~yl5WEn-7!HqJ^ojR2~JV(zaAgDm_DzN|#CCehvmGJU4|nKTEBZN`DSMzkpu~ z#pbWW&-w5vx_}_Li%4ock%~5O%OxarF<36;mdi=%GO%31Emx7$m0;P(E!UFN)nM7g zE!UCMX0Tk(EjN(V7O>pNEn9_U8@Jp{Qa6ERJGb0IQagyHyomq13pu!$TunBUE#xKw zT;EMnw-U&WT_m-W$bj}s1nwtN%WpAw%i|<m&%vPq_prVIdz3Bmll?8mNCE;G7nL7GuU1u#B-gDWr51EOmL?O-fM#Qnc)2<_<#xSGQkH;@RugI+XNpn!C#r+!zTEM z3I5sye`A8bHNoGR;G-t^mlP36-2|jIt&zRt|Cir_3eBK0KFu^~V;7ca> zvI+jt1pj1$e>TBACYUzCeiIxp!M~W`UK8ABg8NPI6%%~T1YbA7H%#zN6MV}A|7wEo znBco6_%{=L&jkNrg72H)2PXKT34UaPADiGmP4E*F{L};oO^})3XD0Z$34URM|1!ZZ zP4Fud{I?1I#{|DN!Ea3PTNC`w1P_>CO38rdnczATJl_N_Fv0aEc%cbiWP%$^@DdZe zR3U{eHY(Y}?TykTQrtXSDj_A!jna5BetB4$NhVa!l8O}Q5f{#urjoLTM#)7ct_Vw& zr2LeyR8J-~HA-X1=~N2V{CEgeBBI>VBmR7M)5 zi6n4rqcnw7g=b3>NbtC@R7I*+hNYuP=!~#*B&nG`ODeV7Np0h7X*8*;5ggQahoxgk zLqOPOENPUA$;?_|J91T6swPKG4ND$!^x{To966>8wP?($LzNlfhS`#v%&ru;jqS6g za?%u;EtQexkZ_AMHcEx$*a~55IWsKPkU6J^r3TV^>}+W=IWF8Nm6Ewlv!x<({0XQ; zW8Q+W6e9B%&z8oL1!sq)S>%ME2)*!BRMxSm9#v;7?g>k^WXZxtX&N~(8J3PBC;3rh z$I0=q6eOn{9hP#)scm6t205)tgg$*ySej0v(?kx$dc#r$X_Jc2TIjG5$rH)3NrYG< zRxsp~@vfV4)*`!=sQHn+7*U9(M${sSSjOY^IO>cz0MA+w$&bkjvE@YEV6~G7DN+e> z%*P9JPFKVUjxHslKsdKI;sIL@jnE5idCA z+aoqG3g+QOyHQ$110ti{5f``>$`KiCMW^AL^D&l)1uSFpBDpa|A>(o*zL=_zBS@GO z;+?!RP&%NZJ|~Myd5g_Uc_+nWeDveDY!~mzPmL+uZr$Fg3=*5t7UPeC{Pyjgc;`-C z8q>JlxxG^xBrdHhX5n`C_D;(n$+0YtQNO2?4iYczjaj2Myb;xEBc0Ykl4m_9W{+Bv z)=v8%$+!J9=HM2`AStl_BIe{4=O7v7IG@B^+~yi2qn#I#m>cLQNd@V+2T7spQWDDn zCpD>}Q_dhMa$iYe9&pl<8ajCf$(Wo?B<96ur=8wGGS;(&#C(8YNm>xWH%P{Lw~<(G znbes(NRIH`L}Gbmq%&`j6zASdV)CX{yU1pDd*zXG+Ol%J$Ldm~>=U|v zKl_XdeH!>)lzliYBx*zL_W|obs!LM{tz?(uA5UE+Z(P z-5+9KQ~qW__1Ca(b&!1rK%_)MFl8M;M~u=?rIAh+=U;@E1FZx6t`{V~3evORCh};% z4Y((-+SseMG$i{q8)lZsF%RSzIK6JeoX{}era-_Cc)-ch2R6*Kk8JEC9`IvZbbNng zJZ9ZLc>oLEo|_2)u6AO8nbOrzjgBPvJxadX$u>C$Cgu4cxz{<rv8=WHPHC?^q?9)-ZO$>UD;xO2~JDOI?SJ>l$6N6N?)_LMU^DmkizKZ$&n z!~Kzoq=micL}sk`IJpog^>a$cO8rju7iVl#IzEc+#Y+@6)ZCK;2>Sqmy}}9b7s|4# z)q(RPL~!s3L2!=5enZkFd3YV_wz@d{8_?& zPoh)Pk*P$8;(ngQrcLUc#{NK}{)k_~H@&EPW+jB#gW?_fb^iepn?9*?I@?QP6(|y- zvx4m-u}Z(vS;_X3SO5TEo5ZRBsA8{@SP+09dyT}Z0jOrLlUN9V5PO5fY5=HVZ;@Cn z0JZFGu4Dx{{V!JZ_c*ID={;2FlJ=bgOnzjbenL-Ar`GpRtpCn>I;!Z9_mYg%K`2J_-iA9-xvw})=1!YMgqS# z5}1-jbnE29vv|I2Mz&t&k+F+}!V<{$Jjj3z&>yo)fyo1ZWVIDtZ$uml5c>#vA!{3eJQ9yzuc`P5e-hN6Ap>&Qto!qyd0|+p~nJk?M|@q;+r6W?QVrL6*&rfyPe2P znGAUT-n=95LZYI#mIuKHGo?)4!Flxr@d_gN_JilImDsfC(UGI2sqNOzY52N(5`Rbk z8%59LM-|Z{c<>tH(-1$6QNT0a5#D!TnREs1e5G7M1%3k-;?_`3>)tnnYy3-4f8Y)U#R{ABI<{D-d9BH z!&`>zV|3JWtdji`V;;bA6P zG>{A!#r!P~Ivp#S601TV#6&Y$963gY-r)d}1iL|!zs+5zioOGr%`Q~+9_1q4m0hlK z_VhRa6hQ00u279Qu2N$`gB#J2VH`oWQ59So3FdKZQuTblLHEV_QpvWdBbW6}s$SOH zRipR!Vn5sm4fRe{j2L&S>~3{WI$05~z&Eq$WM#aP?L;6D53qX?sESvy`w$4mgY13; zs^it{0R%$v5Zi@7O}vIZh(K+;mhDDhT6`LN2!ZMG>FihdHrIzL>rTMoR^^?_ z$Nq%iyVx%I39bWUR&tjA|7MfatbO?IRgBzEtLc7`anEAL@eb}ewY-HruTC-^N4jxH zQ*lUB_avu*Yo56AIDx&6u5W_t^v$Te#z1}_oj*ipa4k^4H3+W%Mb~dsV+i31qvMmXl2y+oYw%G-a~}odN{w=d&d{%$A^mUWY>aiwxpBkoc{FI93Nve2fZZ zd=&WJ&WT@4q}w%im!{|CJsMOUzy~1BcJiP}C(^ED4`_SJ;|**VMlsfi;wg;c84(54 zc@f1pjG_X3pW{(nMx^I7_PhqoA~U;lAk6@KQP6w|X&zzF>_?h^5j3lkRf1+Q(hT7g ziPOB2Nc%MQiUv&(xqSt=eN{6lSFtw)sX^fjYNg0$6Zmf98UZ&GX`6-JY}sQb z-3<&v3)x}WBgRsGo&Pq=9=`&O>@G{Jp}ez!-Hkc|%Z!-zU`+iYrcg2@Vw#9CO#gxG6HtlX%He?wyLS&$G=nS@Qg2=m6E^1g+A2vpJ#@FNU3 z+2Gv06dOm-Hd2T6Q_zGYJag3JMhcGF7!RAWZ~tyOP7o2*c(X>9ow$k{rawcTdLcP%Zb zA_UiPgJdU>ZiB_|y@cFh~O{ga7 ze(OLw4;8EIvi1)oTXEg>pf#bk06vOr+ABmhv4^eEBEQmFgc)0@K-U@uPF@h4?B^`J zz#}Cua8BeGt?XqZ?)@wck@Uw~*?={A+(6_wSW*1N3TY204pnUL7vhefB7F#yA0p%R$S`(u2~^It3Kv|`^_ z`~ANb!Elvow5dE0D!@vqkh zF1lbn=Gnc_S=ca_$jvs)C3(Az*9$bD_U-`VcSO4dj7N#(RvYlN!-j0!ZbO+Q>2>Wk z&qmA?h!544-D&HG`f`^o-7l)iJ&+{+cnAXSw4uu`TXg2pZ2@P@h()UrYKv{9I29Kk72+MZCU(jatc0hLE zqrvBFu~0&T-sSf;s8T`f60kXa0hz+SwCyR$vv3Z-vbC`P*rE$2MHXNku0}jB;9X(| zyvyv-1?9pcgq3@P3O<|c*dU)K(k461UC4FteTK-_+kx11_VxR~xZVyay}=$mA##E= zDeoAZ1ljx3xD?)#Y+UDo(HsZib*RkoW;@L65!jx=SST={zd{U;A7-_8*u?@V4_}eo zYu6WJQtkwtiQ5gz>kZ25A^HdG{R2Q5N&nKGS)B4^fgM*^i~P@%$Rfhu^Rb73i(W+i zwOvdxf%Yl5>^EpH7PP?+Y5xvrBlcr<95^$aJYirj5!m2|*iT{-2RJ9s0Js`~=MB^* zfeQQ~>I*vIm+aBzWHTp>VqsoJ3h2U#q>Zp)5f;Wo4BM}VebtUbPKK%14eW@(20z4p z14ynCOucPKm6e$Q?-&7&6#-xf!T|3=0J{kAo*j2vYOtns*bYb9|0fbT5$CJ7IB=qm z`#85d(#E20FT39nJ*hl$60YxdIr{wypJqPjz*m%x=*j)*Ns*HcX(_*Qz&!U62hMZr zWKGp};ehi3=RjX(4?s^3asP#o7ahou{1S4ayzF2vI-;jUPQkh4pLi_zp6$;L95x~_ zY_K#q3Pzzv*yrHO*sPbblKuj2zZv3H2W}`Hh26;;jQ{zUWuZ$hGpz7iauS2V;)tsgYA9PVF-@`Y#+<^liwpNrC{=C<2m9C5(U2|4J(_1pW-LGlhEXuM10 zkHGjFQ9cIa??l}K81E771~C3XEW5yXpU?-v_<&fS0pmkrL*pZ2e-@07i35!a=W{Oh zkrQWRdm^WiRN;R1u~STx(FQs9iE{vYM6;rxg+Dy}isL17p<4%(6U45PE}BYMedl2@ znV!CkXF10$!gr_Na{uz7{umhJNV$wS*1HChjWB#Q=A!$B8TSp~z7X6Oa`%ff?w1KD zzlB{hB;>UjjLqQQ1ny1T{kn|%7I1IIVeSSO_%`F9xXlIQppu7pH@OBPr%UL4vkL}L z(aN?1CU>>4TU|Iza+0@YNZ#R!o;;8Y1G#WNv~`}eJ2MRKf(XN?X!${m5Fjht?MhHs zaAtDdDlEQHm}3v2r;_cd=-Ks1hUW8}fS4`W*b6SCAZ&K_qAOub7ANeAPUo zW#`LWoL4y6A6*G2pC%y5{!AkF170Kw@xSiE0|=MrXx#C66Nn{T7|_AqLP{<{#l_BNuZE$VZ2;f_uqwQUW?~m+!4xf=tK@bz&LCf4jt@6SHh9u z@Y4+4F945o`0s2E|C`0(*I68Xdk}};WhnjI6tf00{9m86-9Rn?xv zdEgCheyXF-{=(7?Zr)nafY!Rz&0Fg>Fc?wq0^>8H?FQp>V%hCxTiw}>aGQHbBfQx? z5UG>+q{1rNh;GA8T(;e9wmQl9stdNm!V@5(Y7)ucB3n_k3N4*<5!yGWZgXG^t zdK)tEKZKz1Un0K)#@9r7*NuIkdT9>!ff^bg5X)sb*auQHz9H7j!T6Tg(D;tnuK?qF z;y~j7ab5{VN_JfZMumGLe9x0}uJ^Ea-D#Xm|J~j1!^zTnZev3MUEjw%6C?XaZWzP= z>BceD*dQH`0uI*6p3mLvb2rRiV8Y1f+g|oBcXUd^8<_$F!dE;9j;*V3u<)NRvv1t` zsaz^2T8J{kc;#4^gS8=3{O9NB#m}W=UYHXt8{mgn7v%sSm*-4c({6*Gon3*T1Ab0+ zC4w$?O%9H*xT~GRyC4hOoFk_HZhn>q7NgssT-oQAoao%vxf0shjX4QR26Zb~3{)#e zy(xogW!rNS6j2{A&K(jI*K54r!o}GwIpx3^yA{wP2}sfH+4vrg&mFM+X9C@cfo$w9 z41|q-XHLR8G!pBONbW;?C%YfecqF^B@p&Xx?l2^hUt%CT+l_%Rl818=PG1Sm*mL#_ z@JZ!k2(-uB+2aV{B=kwl_osF0I}NcO1IY-didE+Y1N9Gx`ch89mNh==Dd(E&|70Yt z--u+9&1gT0)ay&+2at(=4#nsgot+Wjl{hB;e@ zJcYfJgWwJb%ihJby7*%I?}+{-$yF;GE5HhU$(qKgSR< z()3Km1$>S;R6z96DA&@H75`P9O#Ih+Fn&l%A_w|j_+nP%R~$HiD?QKpb`QJBldxm8 z=SM59HCQq`JkcbObHLb?R1oJj&z^(_%H<9Zo>d*CSXAv{oQwY2gWJ$3rREY@`n6|} zTq+YZE|X<6HWTHyU{t8T^FVaJ^kuGwgrf^}x#FeNVKowUD1`f8fziwg2hqkH(?*g^pMp z8-9YA%o8o^=l-AbEIWpJRqbmHBE8Zp=AtToup_4M!!Fn+=A*#Qm0mu?p>d@wZ}ehM zt6b~Fo>oO;qpWT6;-u5E*^84-ipF`e6^+frcAXb@LhRRjaUajI#fuZt8{m7j?7Gp5 zW#iro#x-)z_g=QqtEXr`yV^S-QnblybTSrpotJlJc6L1g?Ks+R@#5kV+Wd`PXaq3C zqLIUH@{0P1Ik3YE4e&PafMLJW3pujW8(ox6Ho~fXQbw{jyBCNxrISstwC9))BId8W zeC2{vf9K7NpO1MHcB3;?+2da5C=9E{p7a{k!04vbOgDv1{weV1{nInqh`fJN#ePdcI~9vb_X zgnjSDmVCe~W^wr#`FTE=EqEf!AbSsZGm|q2mH!Sjvi0bziq6o&Hu#`VuuMwi@Gil| zF7ff%qlCv~II3RZL)UA3(N4dD|4~ME!WrqbK!x&Q6PQJz*Vuwh;Bg;c!Qw<@ka(oW zeS_pWnV@mKEI$cGSb5#Yp7y0VeN4-uSU|s`YyzRp^5I>+mHs8_Nd>7gLhc8+NsMw<3_eIZ)oCzKu zKu&lX2ux=(0fmezH@1e4xuf2l{Q|oZbZ9balxQ-aawJ$3Lv<>|al(w|b0eBBAR6{% zCh$(PRq&%X+?5!MV+a%$C#D$xd2xLW+@wsZVb$gN>c2@g(JmBd@=!EBsXJfRQ+07}CRLZ@>Z!Uk7gDt` zH(J;a1q7vNl*qNYX119L)w7LLyUwI`y+LgYQrng*3hbs_+#CuUl3XURmS`V}Neaz7DR}6~=b&3kr(GGCzTGP=OU%tH85jJ6q2v|OHmJQEi+9q;h;vvxS4dFtL zfe#h+_s4l{_-snRy_kV00k+~06h=VhZ>n`sA0+X=1TtJipB+QX4LmR27s`B^$E4W1URY8OoEl|yjk zGJWFk$c)H zOwVwB0zV=RA`-#JaMiXv8HUzVPSLueSCogwbIZ=Z+<_k7yl7GQ*k&g$OFc~f5PEvL zdR^_^J;n>&IZJIqZDaS+j{L^uT|lWKyt=OwOkEVN7D0c9cp54MD08@}qc7gI+}6|G z-Pagj-P>W0WO%9k5$WbM^kjQ=c1;QuKY{|ZmU$h0D=-b#F797eZHJbi6Vr7Ncg$IO z#E7{tV~&nU<4c!fb8*Ho=N5LHy}F~f&z7m2t|2Al%;wu7qIC%FIO8KJCw3oiIOw8= zGs240bK*TKeP-`AV~*&=6i9m!w9S=}x7{mOLR(+lovr0{>Hn@x*(sQeK$&$c&Eb`# zNw2OQJwgVu+!4$_xce@vs`_DBOk=aVf*Cv~OzJkC4U0R@?XwzrKIKQ0ugF~gkHE|{ zWHr&fbZzbkJ!C$Aycu846_Pg^dSkQYn>$2^1wGy8uFXgs5B#Xev-%EKTXrQ9ZBe)U zm<}yFFpdUFPsiE+b2w-M{~tw2XDJp%@ZdVZMMzf%8mb*xjZm$tstH-dh@w{4g#v0r zb#+i}sIRZpC1o_! zb%z!DyN+euJ!|Q)9V*=wT}?=BXu!9?!Mae+uzbiFR?QF6A6i}CFq#X)wiRdv zt^!{{d4a#6pI#gav z)g{z=B6Xfj)l;Z?Ds`Pk)i&xrgIe0Tkn9fIsf2otq@FJ72~zu+)Kf_vE2z4X7If25 zXH(KgEvr#QsG1^Fy#Rg}5vp7a=H-NHR}m^Np_c8C=p9@Ws8^C;(T*A-9k85qjh2Yp zH6~R=yuK2Ah&v9flkhQUDRGaQmYPi5CH457Iwv(*@*OA1-mv#9ROlJ3B;JzcsmZb{ z?CnhjE2Wk-K&s{3)HxVI(OUT@|M%0M@$WDA_dLRlb;3Ab80&>`p)fWG;}T(9DvZm> z6@*AChp!Y)8-;PTFs>2CwZhmWjLpKhj$BXVE#yXW1KBEEwh7}VVcbk^0pd{(-%7{{ z3vE7$O+CtHRZC(&~%c>WAM$4Nh9zetOhBPoJU zoYIjT(!$npIO37GB1i~P4I!>1;@QlVgl!}-dr7AqrDywaL;V^O&5h>ayQ|hb63K<- z;I)`!ijh@9&|8UkICCpuw{tnxQ`j9~7D$`1bg(0&7(7KK2OdFTtH%_G@x1K1V4^C&%y!lWWH+<%HD!4d39r$0bNRAO~DK6ma~Q z7`pc6${(X-=+s10cC@KLFDQM?OY398KH)NXOY#c%8<`Fg^`ZpcRxf163YjZrV;qCa z<(-C`Exhh=vA}+=rf0f5h5d)WzTv`?EAhS&-XdzPlp{g#`!A#bulr=EjFowEz9F8! zqXggqloZ^q3K78Has8+rGN9E;kvhDNgG|Xu*&p@CSV}x;sXviK8Wa@3j1sP+6a5K2 z1d3ngS-e8Q=QcA?^fhL$E=yUDUpbMK*;{8QQ^r|Uc7concR3p*!^VYjhK-{H8y96o zlpNDKQRZ=M_;GPus*5rH$^GP4Bvb>&qw>rn)uSb4qI8U;`lMMB2}{uBd7Vxtw&w{@ zme>=3fPqJWcGv}&H_Ad`)r~S1Dt=eU+hn#)PA3~vj{W$SrzzQ# zk-e^0Wd3BQc_7kE`~|u|>>YB<9*qpNMo6cfKSR1590s5xxr@Kmam!HmCP9Sv<5Qzu zGTy){;a5?9DaVfGmoqz$We;(8{xk_vQV8h3<@}u^{Z?j=0%97F9>aG{9_TdH@p}S* z;*TyuMP7mE!sJ5!IawMvuJZ)&5psloH+jhJ6VClBTNW=~fV$GV+B=Nxr$^*b`f{7E z4ze)3V&ADPGJoOm;l*vup_3)0BXsVlq0W)H;YBSch8Hff@mctqcu#NMP>lJrTbmmf zTe|tgJa?#Hc;UkEDOwz-mA;`qiuG=PKu}Sng?@KW}mKJit3;K{Gn$ zpmHC5ty>8Q-XRDWc>EBI>F1nt&h%t=&x+}*dzN>gG~$k>qnnx|VT`M(dC}rI^TLbg z%%9hWIpWZ_H4rX56w)GR7S+0I))!xGw|MPrz)CL!Mk#oFB{|X-W_Giw$jUWy53}?T4J*4D>Kk>a zxk@j#@V9}+sOKM>(!m3dt+J0zx#kiEaHEN$=2 z<*KlT_B}sL1VxELOM;?2;!wE4Ti=z>+T0dfnL~Gpv$iemx(ALDi@H{|NZwsAJ_)vCVwYPOY+{cbNkvDFciW$tc%p zwzLCPuGt_05u+oydS$x+m*!?%7k2cm?pZl+_44J}JJQ3q^A6gG9zC2uw;pF^Cz6Vh ztj7YFkUHpAx^Rqu7D~Fb6L7Ok$5^WLb+2*=nD3qFG7*1xkI<1-T!%QhI_x&$xFMc% zhWR>RkcK>OM80(y@QyxArbwT6=?4%zKyP!5*XO1Z*9=!@ak z2=fd)2Z%54EkAUe*=TM&eCq31qEpqa3v}9fy(sz^}|sOk3KKSiQ_HY8_XK2ha-R zJkgomsXMxst?cgUIH|J>)iYwYLqfz>yq#M)h+Tq6U2X<4y8)Zfwg3V1^bJitC&Who z|F-Y#5X3~Mmh9^3?c>c!SxwqEEhhbH!A> z4XL;3j&?l05@7WYMLxoSd)T9b#{c!G0AoIVXjjY63PLrZpjulW44}Nv8nvdr2CP9Y zTeZGH4b=x4)Y?$6TCEKPYt_17RYuXhknoyOBy`>fm)>YMN)uFoTIy^O~RT~-tby`(bZB-Dy4P5JGsJ0=a z2~`VL)zmd;Rds=20|X8R>R~8^seq6pT=jzsMgOqHrrJ;)ssVC!C&Jzj$G|vDuGfX@|e5d2aLK zX8+QTAqzSZ@?Qn48K^M$t`65!7)-u<}d_QN_Ks0Hh)QL=4)jaFR~451*`P<_?V zQ+5lAFtuQML1jTr!I9SE3*rUs1s&FPWYqbDpYmKliq?~& znDs)UT|x@ZCk0m%>pjGJA1Qc@6#R)4yh{r1msJ~)^%Ec`kyW>V3r3MqmywZW$;w_T z=TbQz4};`FDvzOLJXI#3%vgCMmCLC*iE2}*JdIlXlp2RYatR7oCDqg#!owiBfyy(e z?I>N4tlUh=vD7}7%KQL`ETZH@DxXZrsZ>6l$}y_7QSA)sNKofe>Pk|18I@O3S2vYc zQTc2t_fc&%Ro77YTq^&J$|-`9WZma+NwF8fZv(MiOk`@g0^lo&?J6SM&Xwutjf9K5 zMQO8}2z74;^E&ul55Fz&yMa*kMliR*?-n72)_FIfh2U3oFZ>=L)Ur#+qE&w>AgSG@&^wXbuq0nL|fE z1IAf2=UFhGgWvDr_dNVwfZreBcP1VCN8t9)@Y@T&SAqQNV7>vrw}I9;I_@2C`a7Z4 z|AKiQ%A=L3dWTGvyJb3Rr%bhbW!p|!p-0>&7oiYSSt>5B-yl2TUvY^vex^hwj6WuI zv{W1hsCYI&WlaE;MbNDU-R2{70zwNBT8z*VfTo=U(6rM4nh=#pWyMy4$7Y?f{!!1HZ zI_e)pexH0uJ|G{F4EV7L{?i0MF~LtwaL@#q34UgRpPS$pCipKC{L%!!GQoeF;D1c; zYw`_|za`(3@5lkuH6>@jbtZVe30@%U!Sb>~tvCHI1b^_&^1R6O++c#2nBb)*co~FN zF6Z>GkbPN1t~7D3GQo`|`Ze;^au)uzCekJo+-!o^8R@t_JJ=Qz;RX}D(FC`e;5HMy z$pmjU!R;n@J7jBCEVr0Ax0>K>CV0CE-f4n&nczM012U0XcggZ=pNWRLd(f|4?Q%TQ`%Zb_r0ki4SV zk}BsH_yoqN(%F(l9$h$bmQ-vdq^N$Dw4Q+bn5na*X?8mqI~~Ptj;jH0ACZqJ9)qW+ zB_*>ZnT($cj#tY>o={rUC~2guv{9mD;%Jm2T0UmB7!>$PT5m2h1)8lvn8t>s9J)OJ%h_p7H9Qhl&KlIki?~YQqwwHvXff( zEa@UhWu4?E5mJmNvW|$Ocr+m-MP|9jOGLIrEX8g@6l=r^d=piRXvI!KG&v#{TL`h( zBDUf@LMV;UVh4d-EiWN4#cve?EjN;w>bDDFmYYdT^E-tg%dI44 z@w}9$ZW6fo#qd1 z_v@5O*{ev&ij;C7zJX*R~@tlCq3$9f>f8#2K z=a4N5+oD9>Nw>e%e;m6}N#msg6hz9lDqL|kNfNeA!P7=O$J6T?;8H*}am}9MJWUHlmC$E}eBi*F=hv3^ww} z26SDdC>`x;1*0C&wUK7Dg<80_P>WR=Q+MEirSiamVSnJtb||rl>CTDl7F4@#mm#Yr zLzessv+5BgIypI62%`Lr5}PdQTIXc;JMPiKMNnF3A>coyh_ZM}K_POJ(}46W5_B4Q z{}&{a{m1Lv##qGIz3bAc+_ zMG1e8wm}tM{rnN|#oSf`Rr@j&W9C7|3V?%8QB)Y?o{{O&6!sbVdM&vY`o0ysQIc3m zs$ySBs&aoxDu8dMs*K00746oNR1lx^SGU_sQlWN7nbht?cNc!# z5s6)>rBSxY?#;&YvvjmBS%=D}oAKBRVrVGocwL?CctCpoMMH5>~;Y4`aG6E2is>n9gBajF@gXD5e{S$F%j}n6_a| zJG5wR!WyY1ks~E2B+nI?>b2H8AUA(vyA!@YweN)Q|2gi}*d1ClSkf9KSYqr>En3}L zEn&g2om#?{jviIw|9R_Caz$q3SPIt3oLuJ z1m)veYqAx6BFD+`(Vm?sP=<%v>^mK0jAT`fw~VTBEn#mPb>pvCHylZaSvTGpUN_!7 zxNiIn>&8Dc(M|YyUy}2I#y-&WKBV2lKGYH(z30GZSs!U=NqC@p_yjoz4&$R4L$HR6 zMf?oGxyiYak<$IO+cKe+K&aa>RKBKB=R4T* z?XnmbnC>F-E(_jZst|hb1E}{NZ5Do?i3&F>8Yix>37cIQj_kWmbEI7m^_gUsh5gbZ z^ou7?0x}AF$Pyi!9P8gnA}2$O`jxQVFEo&!B2QtDSnx`Z&`)0@bh|5AcW2OwcYnBc z`FyO4rzTI07IQ7{#UyeX$-JxljU{$EI(MGVerqXjVUJoeVSNpX#2&Xqqsb@^-KJ<@ zbb#@mJMc$xPY5I!@qy|hSz=EE715tS4zXt}QM_TLMyg49JjQ-+T1}SPAek>%P@LJY zTURe4sQ}(jX%1VS%cCbi(*raxPT@S0&>F#1y% z9R@7X_GEiW?pfGEF{XCTSv$ePWcx5PEG2n!!1opO747jiguQCP_PBzw*G%@vaw?d! zve!-Ktizb|r0``rhB`5tpUiJPkzgHR?~3xbMQb?&(19-%Jp4V2hkuwn{Eo2q4IVxi zfd@PL(B#2BJcB;biQ@a-LC7rjxdoXqUOh%T&^yvW{IQ*)_xcw`kwn+lBIHxs-D9Fk{R+6Q`5l8?DRKpVm48HFzVF$}5lu zS0mSph+!I>1jhj{F4j=Jyn<3cq~&0*$WiZ(U1T*vnk* z|0vaNp<8j~u}8@L=Q0(IxAcP~O{6`*M?WF`6a{?A17JK)l)r%Sf9hV!`YCo)C=CV{ z8UwW7{}&SZDM^L)v%gRr`(e1-ONFe0+xaSHAJO(x6uD)2g|hv0AfXBI9p%FAe%MRpr;lTGAp|3-TqpfdJ_BxIJECD>isPl6<@-u=Dy5FD)D+;^%De=EW zBER5nZ*n}KLAFPJPB@~Cy+sqYp@=s2HchArYr+O|hrQGgkT3v~poJ(CnsQMGqZL>p zoB(GWeLr zQY0Nu5%!557NzgvJ@3jr0U*5~dI`Vv8i-y>l9!S|^kR~{*f8+=;<(NYxN;X47_ZU9 z1x8bgAV2A>`lg=_)HL4jqelH_FLJdb(GL7dv>( zi^Q!fJI)byRIKYem>+)pI`z=B#a)#pE4$8K-O<>+YOU6b%#}n?th7KLmBY`L90fVDh2S-1>ZQ;k6&qFTRB=$njb|<%s`yaR zpg1B@im6ggmC00@O09mYB*~}|MYX0>O|~kk7fhlkqf@!?ElR1VEoEG446MhGkPz2W zB9AYfP{zL#`F9fkPT}8a{5zd^RGTJQBuR6kh8)R;3U!DJHSfr7)X}5lpf(+qP~vGK z649&@YTr=y1aLDBb$*QfOkv01)K-;_!EM81SUBAuAq2(vqYf8EQ`8dyXTHFhk2vsg z$|npGm$HbRkWOlS``My_)$OXM1Xp%T(g`(b=`X_Z?W8nHA&gL%eJ)C<*8mPm8XWZs z^lYaB2Z~}*)Sm;3*l}X)96oS-B+g;ya*o}^xr{_?vRUWa-E8hvJK226ZsO?w zURBSD5W@KT|33KXO?B0)s#n!j)vsQ?dJk>PXjp)8&A>20!;BUgg+9hxx$(+(V2l;k zz=@=K`vhNKx%rt%f?pu$D}|N=6(1y`ksl<+on$Iz!|Nz2cEFn<@gbhLNP39Oki`U{ zU4EQkCp<}vM+gu#omROwh!X^uqsNIL^GQ-KWxM9nMDz`UDnxx6QJ*A9dOPo$Q|12x zRDFSZoM!BnR0kXU&( z8Z7OtyIb2@dpmkJo)?*gZM6)TPvh48+2DB=n9Y~f(-mKd*Idkjb0~@QEO>ofz}q(0 zOeN^^EB>fY3HgFc&Ox}Npnw8R0CDu6`9AuCK3Isns#o@wdn+o5OsI{?lmUN9EPSc7 z^Q)F#rdC?Kgef==WEgr(g7I#h)Fsuy*FWl%T^@G{hou~raac{5ZqX#7XqzRONXjNj zg*8n>2VYPOE_LYeOTkF0W)?c4YGp7(Y$tt&<0S3}(sCy;oG9VPOC6ZTZAj^o+bB6X zl~9b*E#`GMJEWCEzKWA+h2M6Aa+mWtsKqUKy5K_r6h1Qy@OvK2Abc*CDcM^drn*~` zxUJsQDKwimn`$#$2`w`TD^}*zP~gZG`K!F(o#!@-=r z0e?6c@|;0?*DlkHB2i$f2GUKqU=J`Y;)AdBA}mHFLKg{U}5WSW0<)RVh9igUvIie{|B z6ei&nsWm63V8*QFGX}~nfv70ViVbm@Un`XfKNQQ}f2xf0+2BJV5C?o-sM-5ZOK5gx z_CXGal5c{8JVVQo006UX!39&8qF;7h%wgT-E%DakJl34%JSJBB{81-* zCRaCJ04m2#7#*6e37tb7l~h! zVpet}HPO_$XBSsx96pjW)8&yaS}-RHWo*nZ14qW;v7w7|91vh^$j4|pdlH%!!hoXy zMFEUe^OTqWP$12A zU$tR}NhcNL*zifV$~K4H$)Ov@8;&ly6_6xugFwL{$2l`a!BK|a2pM>-S7f6#PV26~ z5h6A&S1WT%lyFM`El!LTh?N%C7E2(C@HU;NY^g9i^o=>C$pA?xSEsHu&8sYItz0=j zakvU!mb!L4|Biq)ha$vUtIu5qmuieRo&&M)(UQ$K@37i*o&uROx=#$PP;-!(jivsU zmT=)ob@wRT4?Z-Gi*-@<|zZv+1?ZZDXE)zA zC?#@fd6}2PN)8th*m-CYj4oM4k%**mAqn3pz+jfu0+EQO&|cu>gD8+7r)P*N1!ssx z!l*{oY=q;Kj|Uq|HFfffC|yJ2S#iKdsr|KZLu09pxw2p=2sULbwILVVbY|3s zk;4c1!&qu0bKg|uSLD_&EI+@a0S^u_tMGo_aN=4=yZ9BeS>>`~-}x2TI^kbf2GcAc zJ_pY`N9)7_$-;|sA_KoB6FR?KZP()MB$Js8o?l*mO9utjJg~sb6 zuG_phz6V*e9hlX;5-Q&Ffz;?hl}9gdob;Pg^^AbOW{zyRV9A-Ow!D!#?;_g%T3Fe! z)V_k*BNo!;=8!FKu+UI69CjAIQyTF_eU5?=MZ=*;*irEMXmfK*(3%_CG!zI1%I4~2 z8jbjZj>6X$4FrPLya5=F`T}~UFd7W|!+NHBX^YR-!pz>Y=9+};c8lgEUgoXTYrIj| zPL?ym*LdP)q>PaYrc^Pqh@0E0XLKc_tI^69ZD4dgqdwEb7L72q#nM8Yd=*1Z7nayb zRfhekbyBs!6aP36`y_;k1EJ!YbOQU~0W4S{ODEM5U~0XS<*>F_<0oV>=V5O0lEO zC+a{pU3H>;Db0meq?jA6Na-Hjv|CEh>=SJ8iG!3PCuPfVQjQ!a6^WN2Csk_l&3{;^ z2sk@r#pTyRQE>R2vdlTNUw)w?;kimZr)b#I-Vy8U?iA)eI$GO1c3t+G$e+7UT)D}; zdGs(^CoPKTd~KB#m68=E)5AlrTbbvQEMI=1lI63!FCk$L`jk*OtoWnRb4i%X=Pc;| zAxSeAF%uzg{(nx=d>=hS(%dzAAUC10-3_IA*RC_E7a%HAx_Y)q3KZD!nuW<5Gi1Pk z5xXAR*&XXq+dJC!Y*D#o9eR1|u5LBfy1TVYY3=HAWO8)Dm>ABp_`>#dU)J4odH1q8 z8i|vD;|s3GWPbQ8%Sh$aVNBOEITp`VN+y7uY1Lc^{llXpsX2!1yc4kFwM(Y+dM_*7 z^20x8VSA}R917F0FA`Kag)|%vg=jbs@n7+%Ltgfn?WDTZ{w}QJw zfh1NdFIif*jKk#|uHbMbhpRbU!{It&cf%x<73U_&1+%Rr0h5I~Hc3_qHc$$Q5i1I} zk&CXsiJKHxq zJ1{$Y)$Ht{*;$BfC^7cp-jgb-=7%=E9oy)Y-abPr$lKxhT_;h;EiJEF)u|ZQk&{z{ z4&x{}IX&n!uIJJkG$L6Eh|l2tmoE|_utRmiZFYHUo-j{0D$wjaSA4OTSGpS%H0gydPE z7wgpPQD)|IzwN@x>gN{6ItMt7V#dE-C8DM83oEL~Ox5dH8qn5xVWpWC&ycRysU)E3 zvI{FIYfzob2w$(VE}X83A&8qu96ZEFS@+?C$<)~ERwR(ub>U_09_<=B!W}%keuV*L z7dX>1$HJ@5QA{Rq4(mGHV9~t%#J2OXCvxV(xi4?wCFvwv9Xi_D& zOXWfa*r`|vVO$wT-;8FeVb@{-76^ARs%5ieCz`cQf-bSONvPV0mZmLwo8%x?OPgdP zHhZh&B6jO$Nhc25W=Z4X6%TPBJLSp=A3QnXLrL6;!Uu=>oxfb3_dDNvFflw_^s#qK zJs0}1&o34R?&W8hMEPh<3&26?WB&6w2A_W+)fPN0UqB955fSq%ie2dJFX~CL1Ox+N zM?s1b3A89)sxy8=8itlixB$;-af(AioJq*(^CLowY_;1Q9O4<-MPJ^ zXHO=F8*}6v?R0Ey?cLwqaRs*;yv5Si)BXk?a^@OjT|~WfoFXO#`&=y8M44D7>HqnI0#gEBKp-! zjU7o1>=+&AAH}&p*5~4{Q7FinY%A6xX010*Ph&$TszP@nQCT)PpO?)rxjB|O#|7tc z$`%{|oceqv5J!4!^k6oHTxDJ~THs7Yf;+AeLRxE%%siv3S*Ch{D^LbqgYN^BbdQFk~Jk~7Pmk(Av!)fCJyoQ zY?)fEb#-s^z2oAy`QKsXhA)REpvX(kw~c6q5{WXkMh6q)-KlFPaMrkSoa`AHA389S z;_HwziHlL|k;Kq2+IVa^->S0HabC`J=LK@6XMVnghpgsc7>|@guyqW!0Dw@iCE84b z!AOJ#qrm{6MEwwo0$#)i+tU^w;Q7O_<7^24awHmr9ck1D*@B@gFHb{QNOK5EZ;l24 z_yT@={tQ$7zEChoo5Q{+ZI1X`XgKPR(uhCWLZhJ;0KRAtO+UhZv^fCPhW*V!8Uaq4 zhC?lA2{X{F`XfHSpSFaXn`t=E;-}$o#7Dys$Q^-@qhRo>{$L2oj`*6P>}VwDEPTUI zRwxV=23o>V+S2Tcx{5jsxcG3;$!#dEuOt<%)ug&cZ_{JmZv9Gq$lIzg*uAP6gNa3f7h`8j<#BVIhMCzXs;Gr0!M9TL8~CiRT0WMmB^4NPfdauXwdG=nII z8EIzpVkTdL7v?rIxt&=$n7oC_Te;Q1ZA`w5$z9C4oyk4u63g1ll-=mBN`3>gy^-1W zF>4>QrWifI?1RjH6;p=MD5B-f%rb`71)2OlDEI-w=qCtsJVGpw5V-=4=tpO6o~<;XQ0Ud!QIIeZ(3Z|CqG9KMsocX2pL_|J9X z=cxF(Ui`dU{M;aZZWKSq#Lvy*=N9qv9`W;D@$-K1bF28dP5j(0em)?6J}7?f5I=W{ zpS#4*-Qwp%;^!XmbFcXMu=u%8{Cq_Gd{q40FMf`Tp9jUy$HdRa#m^_j&qLzpVe#`Q zA#EiVN-iNao=sATMBG)Iq;iRP)}R5mlGSaJPD(FDgK%YwH%Sc=DPM#3*t{#z{9DDU zHc2CuYuh9{sjAr|)mju%UDqm=lSQl13f$s))QqlKg+}6P%Xqm<)}pPrx@NTSwsakO z_F7htHtLppdFk~l+ayX>RB}>QZbI{Mt12L)LdfbRqJlN8JEbzR){j>1)~!R^bPbYQ zkLk-{XDcZ&rCcY3IAhM`vO;86%!ToaBj#AHz|L2TY2{8rRBOz-oGRQX+;UYR%oejP z*A$}D7%jIFVo_sixt$QJJLbl88;Ox}N{F4s*m9;2ha8j3HK@iOvoF^b;v!zshP&#< z3TUuGpEm8oMRG@A7v;>uwdJhCZOs{n>&e-MyCP>AF44zUOcFE==Vr-1y`G?DIFH`n zXQ`LbFkFdcpwC)Q(Jox6HPvUU*U>ConJwLCuXm$WxN`e}K1Y2W8in&Z2K$`#n+BaT zq{2DW=YqmqGo;dWRi7IQbBptIs#d&GWxVC2&$yYGHsP*CQ*dt;O6gQ}K{EOZGj1nn z6h^3}Q?&}B@8->}mF_0SJ&<_{^4@EjWE1&5h54Q!cyJ{QvQc#@M1R)I_gP|mp7fPX z4VD>SAbsAtL9g))*<#+!#QfjF{Ld4#1tyHKiF#i!^S?lhDbiOlHCSOxb5CQ~oO(d` zCFc7T_X}2sj@OM}lfFu5Tcz<^9*G8tGKCptVFoe&2v}2q^d}Qzj^S%FO?iY@8#)J>1FZd>E*|uIO7j8FVUEhPt{9hzd?WN za+0DN#l!VdDOwWwquf_N6GxtT zSK5WSmT`l7eO{icA>D8c#`djB-%1=eXmTpnNT7)yz#Q(hJCoxMrEhUA2MiaWo99@Z zUW_@`7#~vVW$fsWK+dH4Nyv9G+Nao|-me(jm17!M$V_Q`sJWn+(jOu>@Z zAeMGJpe40>t^CE=S$M^#Zl5@PYC65Xyy_pb#>0w`KU1|7M$8jv67MMmowS{d`MDV= zg;Mq7Dx`gx+ta&T`Z6qSmy)jnyh8qlVtiGBvG9`d4Q_w$hSSDBDcImTZgSOYHeIA<6Q(;13>SE)&O1wT@FU((kPnpI6^$3*x10}vPz0x$Uq@#5l ztlxry&|f6Gs0~*c#-~FG4g7B8)!GDb6nyDKks`5#Ygy zLcAYy3xVdS`&WpEk%aL-QR3^;>&*C{LOhHhjQ_dl0A8-gk}dZxQSdJSk);_T{<|_Y z9Sf2*#xF$|{z_!z<^3AaU~D1UZ$+2!=-)v!3?PjDFJ&6)#?@{nQ_d@9_n~>tKPprB z5DP*4f1j=Y5b@7|2&o+LFJ=c~{9hp+9(er!nmvf|e}i~<;PJ1XtqT$HAAks{9C4DG zeTWIyQEpL@CtOd>PPB7diBtH*6KduT9dfIpl3hvjZ zkM>*KrFezGlGJOVHsf)6DoJBewD(5?7Txpjv$MKI*NrF95FJeYPYZ(FUEEI3)#}qw zcdhnWYCKKjXgG*AcVZhAB=FNTYwiKo zjuWtyJVU2og(#O*svg6B_!c$4H~5wL7QjQ~d4L<`?@;4;y7I_N#&<-M+#4nFf%yS7 zen6*U7hxvjg=~AKC@hpPOK>qmD@W6q*^L$`en?kAG2f%pnGrXYzPMg`;s}}uG)~h~ zK#wo+C(RYh?*`F!_<%IEW_LWN%x!eyjsj{ecH zvD7e^uyqbJox52DJz@&qo%;()2`!+M!fJDpbRowtDM;ob-SaOrBj6{a=&%a5?1%d& zM#oBvdZXU&Z<$-5d2TV&!VbOc1*0PWq2ro~zyg|8bWE9*q|70~EfAzEP@KDvqtb;4 zch4=?om)10#!P&gPx&67~^c{>gHn|(AK1rThGM$k-DnCr6? zOW17Y5iE*^)x_`+%v#i)o};7I=aZ;3hXW-jms7poii!%olG~c9s-gn62or-ivTGTX(Ln8Mh_D4L@?EY*rd_|9O= zCVXe;7Rln2h|N+m>6ToJAygfhtR=Q38zw`<#x9w>2s1b?l{dAuZsxF^!wwF&aJZGj zP7W{Qu#3a(9CmZqvy<%V<)PigQEy>nDbbfDBt{f>LQ)A8zSGs^c+Eyzlt4%96a_gt zMVXJqx=Hd%#40IrOfEAeGi5Sf1dS03MV(=tE4j!vyM-$a*9(cs%ACYxeV<%UP-3FV zO?|M<8B~P+u&Q133NzY;R)6~pv5-Q}y=dG-rqWzlSJ>?)ap%cxPO{awg?rdm6{c#B%aHRnGRKa)R=N#ZyoB5Vuui^{ z7#|=fr#jr+&wAW574s0}`|c!s>-}TS8PzLy1M&*`A!6K3VC&75f%(?^Lqu%7?qkf*MKA5RD>?@Kbw8#nX(hAke1P;>c{;Gv$DrvC0zQgdaJv+% zB#`41MC>{rB?Y@qpZXXv9wT|X&c{j7uJcLLKRjR+?mF)z=B~4$n^Sfv%&$_ z`Nokfc-EWU^YN^kM-LuMj11&+tqzG$t18=cX1T2!XuXZp&;6k(%v%aPZ13h>ooyZa zdvnrw=z zt7l7RckbB@&!}mWjqnJC7A(%ZZ&T9VyFJsay};nY2XLuL?he6PckgZO>TGY_okx7t z_B~y@JNM7gtg`mb-pxJT-5s0rYc;RLH?d{m#zGqi!TUUpP;%V>QVKR2@ zhsW@=v9!CRqrG=O5FhK@Vq!Vkd%IJqfpOsr+SA(JzCXWjdiD0+)`0=orIev!6jV~2 z3Lj!fEy-?edOLQsLJ#!pQuc4$@8(0`^488gm8~74!^4*+h9*4SJce0Ut#)jHGVv^qQrC7Rxf zE6g&uwjAvod#sEelzsaDUX3 z83C>1d3Vq(*?|#UP(g){p2A1q4HE)UD4;nKL_@(L8VrXcs^1qur>9}Sjt03e z(q$Es?P-E%mxM5T?)l?bwek(H>H zaS`nLn0zUdTbbO(?Cs1RV-BI8aT$}>GiMiSW;k~-xtF>2qGpDhyQ}or@@pLO8p|FKYvbGBM zsMV-MAdyA>1Z-OuH{yP_CV>0d+8|zZT_RP({~>NL z5W6jAt3^Em7Gt%#LY!JmL)`|K9@A^B3UQalN^2Gq;<3amHFiQuJTXsAB_XA*n5(9Y zkTOTiQEO93xjW{r@e<Ls{r2m0*wcGOF7+lTucD{kvX z#RQMz&3(>>5>!kmb-ty~)li0t3FWSL^tl_ngYFqp;l7^qc^WDQJu{@rb2I5HX{a77 znIVfx-cR~U8x{|i&XAhYJ4jzyL+xN0Y^BTYA${cyb%W(IWNA62E8+6x%Xkx zSJ6;ESOI(IiYG~5B{aQqhODgo66vd|OH>J;d8&4!{K_ih!@RRrOCN^LSwlW08y_(b z{l5&my8Gq6sy$Mo$~ev=(eyyW+C;VSfOv!rWrH6c9~6(Uk!%RSB@{)f7A=Lt!^Cl?7xejsBxYY?kYNb*ePXntM!4tP8zb1UVF z#uCs6KjOnRF8v5vu$#Or8$ZV8HbQe>mbnz0};0q@^4 z2q?Dr4|$5eh9*3JmQ6u~y6U74s;Y`d(2=1Jow)hXs}u*qX+;Rqg*c)_p39zO`?Vv9 zgG2p$c6D`);#pJHretlQWyUk`Hl3Hr$>Qw52Q|%K!5Nel8kuw#CtC!c2uYS~oVh`p z*Om9{WCw7rzRa4h^0fqou@+WIyt3CO6XaAhrsx)pFxA2|t0JtkP;Qfj*ky;y=_W+h zDSu}KUN$PUA^!m14b$8T&O_%biV=Wm7{ZkxEDRKjaiJK#xFXEt!;0p^HIM@_E=bl8 zUS-Xk#)x}I$FkOto+PD(=3qBq>IE22akh59VSi_Ld&d>~xA(MnNJ?VlT6e5-SMTn; zST#K~Ha_9%YAuMR@a`r$F33#rMx-8Ij%%#YC%mi3N4yJ zH0I~A3&PHvx3c}b4g5mL8JR><&RVjw5Xpi_F~m_hCK+0sKchAjO*eBE))e4$79sI_ z01Lc0VD3O217>bslzOJcB!_6n=E20sfz-f!ErniT`ww$pD08BTBLjlUK!f_L0;z6Xwtt zrYbRs_l}rxc;m!Am>7>`9?Aw213Si2M}|fZ=OW$WrN&0b%(4_H#dZkL%xCN2Lx)Uq zoS9x99g9JYmVu!$(N&A*9xdXf>Y1xCny6~dnU}$7O{Z~1;wvW50H2do$;hba$@bKE zzp$pgXs#kmbdn%R4KK^o2Q)Fntb4jUQ3~I)Yd60|V;LD85w3i!=Gs;tZegQb5ID}W z_Ka9X)?KLye_49yn$$qivXn~?=$NB*?7;Y(%Nr)<->S-J1Y{+LbM{@T9e)9dCh zs9-_%6cthL^T0$(K;az+4^3Rl)9fRoA~i8FIyP_NMTNcIcCzyA!keQ)+!<;Kg}AY- zPym6irCAO7!qF%VheBZth5|NNn+`!HOKK!F#;^Xg0CtN%9Kw4%J{k^& zTU5W_?`u{Ap{PGvI>*pg1HquruLfFLA_2hiH3y)kXdt3z=9KCWwFChn+8k_#8qn%R zOG_w1TLOWo-UdiWi-ix8-PayU6^+dG*|$wwq5-@j`$}pUAwToA~!)y)8&7viyp)i-XwxX5`sg_kQ*X#9F-gWv$@5SnncZ}*p;j$^4 zjh~NmRRuRu`%If+ijFqLh=ZHL7nh3ojUt8LC{n7?_@`3C)Fq1uQ&up$aHF+`Io2|= zo+&=&+`wEHF{PO)moVj0rfgzlGgI1`vYaU$Oo=fq$h56Y>txzCrd-CfE~ac}S~t^r zn6`syJDJwZv=Gz6Oxwk@rA+H(+HR&rn6`&$dzp4Q)2?9J8<_S+ro>TbrtD|rO-xBK zCC%&yEOFU#mCWo{Gi{h@ai$$)+6dD|ndi++8E5h}Oup8#QfB1sO!hKz9bsCMY5h!l z8&eK2ctozMtGm z$Zh2IT+9b@!4KwwcjSV1=7M+Sf_LYF_vC{2=7Jy21@FrRKbi~Pp9>z(1s})-A0!_m zL~6K|$hVP?1IeGrC4Dj%d?*)uI2U}Bd9P=8_;lU$&yydNlGht$z>Pg^`~;3m*~B?O`=LgWz{0of2rP{kQ`)@x=DJYL>5a_ zj>#~Kh(uy!EhSu@xYh>yEG4F_wGg5Z54jRHT1rjrk`k^6(^TLd1{GmOh4s7{qRSI~ zN`nO@bXMisKH6X#q!}xijjz~^8wu>f?8cp>Pc`l$C`XDhX%ND4pT1Wb)Qy|C_~vGk zQG!_x*ndNr&8q~JLC|3+3X~>os7i~%qe&a8#-P5!DnPxSOBgDp>t*8xxz9Q^Xf z`z%5U;;uo9aZDDseN@c_=ntc`=202d-nkA8Rkd3Q#6KycNp|;3_0nl9?Md1AwA|;M z8g%0I7D4FKJlBzuZ74CRBcFrDFO@$p8=sf!rSa45)hIT3Mvl7?>r~nka}y}fcveQ~ z*mSxiR!Y_Y?y2X-PoF}RbXocLXJ?Hs%klEKx1nL1m&D3ZcSIJKiv+nZBDtsK+~p!w ztAgmCn2r94Z2U|Xmy3SR#UYxm*&cNQ#{CL9o$l8FEuh}7pc82ucQZZd;(n%YKsVF% z68e>fuscOo9rW;s5)78|U>OF>dC<#YMa~IzikvzKr6wtQvQDZ8)fp0$?uS7TA_&7W z!ia*fnclA$k0|IT_pTCj7JCB1T)r4>XfYmBVpTFwV|+@9SEJwKZPi3Ep5W-|vU;fu z-3UL0kF_F6(rZ_%=iJ8Qd$Bp(m07h&s`;J z_@$3*ceEO(cujjrtV+R7`C)#i{0P&~`>`9x68CEO6H&a!&81^Jy^aqwY|?PabHFyQ z!&f?7BD$e`2@JVkaXj9+_&R=*tG~_oZRU0SF2Cki6z;efItj-05-9#pin}D!SdwWh zw2`}a{=4WQmA{Nh$|&moc8d{?-x<*NXa5}{!G!2 z^nm&HoS4w6jN|-2R(Tw2T!A&-Dax>!l-)($S7G!$l#d>(`)x8jeMCH2jE_?H z_b}oCGZ)f%0uw%#Urd?tagm|i{dF9259LTNGf98Afb>VsPWq#BknS~3i0s~a32HAl z9z&#Ze!HhaIC?M7bNXH;s4PJd^5dD7JRwTJv~oW6q@#T5k)y}4x1Yii%f7}(Sefw& znkkZrA}x0nm;dAuPZ^B9&rtUX0!{vWu7e!BgPzHD&~fabXA3&$%V&1bR|-1lt7q?^ z=jQ033gc@cdxhCSUq5FDIm{0FW~PJw>8u^}0Cv!~cn3XacF-5k*+GuSMF%}k-M4TN zJk8F_Eynk$IWK=ebMw-jM91P-u+q zB&%>svcQ!uIyO72gkGKPcy%`Yk6Cyyrl|WGBsx9Kt5!K zay|r@kbTk&1rCG!ks7b?>!&z0v5E1E(-%V%p}$scHU0?QJN}Y8%1?^w-9N{k7|3Z1*>F35@nnrZ^GJF}j`hV#v_&QmUw~7NX zH>h}m^`dc1MVuog&B*yIm2Oszn^maxMf~7djQ6O(^FaC(=Xqk6N^2l_>bdb3r_7Rn z3?;u`?b{UJl-_jL;3nf%6<8G;RWz+;h9spEz&rGl6Dm~rDK)-mir-0$EkgU}c2&{z z$0(%Sry@V|60kD^;g11pQqoRp8CVq6zwjhIYpK5$m<%|gSh&h`0 zN9XY)B@`!&y2bdI%K6T>JAvg4C+O*1Ls+^Ui{POS42gz4 z5{qGxI$uBj)kKE?GULX}YJTf=Ae7t5QJ}$ z-w$x9a;s*%U#r7=kGE+sGy17}2~Ldk8oZbV~U8UZu8TV+Jf{`-gUM;D{dH_{3K8$Cx zvt>BVKcdxbH6GATrQ4G#>_B!v?GM6JM^fYAyNfBg7btm1!~2LXMOU>Ku?L zW<1L?sKytyQ(SfZRJv@OpY-$X(Ks~5?dR=&r}h=i_=+a>R?rl&xq{ElSG6RA;&);3 z#&ggI&tZ9Af_C9&-TWpb)ui^RBc9Jft4|KK8eD@GD(ydG`^&$ zMf)6V@e91gFYp$>pczwIyf@u@S4kg!(X_taxOZ}gb6t2W89n=vY(fZ3xteejKP_t-<;6h$Ypz{2Zv%2I=ErrWT)lLTJf3{5 z%^g^Bc>a<({(epa8t=-=T*pw!IdSOF@U^b|_SZ-K=RPM4oL4XKx+4pxvOh6AoFP*i z9Uj=57-j>h;nYM5E#l!XKe-}9=5eJqerR~8KNVeg4Wg7x9hsBI^XSOI#CRsRI8O^K zJTIQb<@rj(bGzpA&z*IZb{_e-e@4?E3LXfbM}x=nMh@4hF6_d2Pgpu%o1(9vXJ7u{ z6sIiFNI=hY0}Zu=e75{?9cT{vYnP|(8V-c~w)`eW{6U{R ze;m?aprzT8?L-=mL;{v9Y55A+DxZ{RYU(a2($p2rTc0gMX$eG~+(o5cVdv)`j%ro) zcYHE5NdMTZt|$nnYLw&|+OO zSxcj>AyD5jL(0j!W?(2x!VaTCISR0nUQdj7q= z<$A(-AMR|1ss?1y<%g1elyzC!)Vk zWQUD)jLE=Yl2gKxm8w+$rS}m*>V3rcD49Y^p5}Urkh}4~f}@M^76sl2g-Fy~sXRDnBO1k3`aRf*L<2f*o!l68G(0Liw^9&pEGjuLksql=7 zH|CWCYw)6Zs#H0uc@bvE;OIz7?Kqei8fL8n1Hf;L=WHCbCB{>cPbRadR^UUx$ z)OcWA9UdA#kLGSzQnQAq2WY-%7!g4X(tU<{%U#gmTXYz+c%&=7pGDa%D#Ogw0{WrtnrD& zM9K;rzyxZI45Tb(*{N|y-;S+4yL&dawf1&ILi*6b#DNraAGw-b>?s_)_5J{`l6=r< z;#W-%!@E~`p2h{vrlv#q6I>{EURdQh=jWCdtQkA+5|O32fFg(+?bcQz!-~p6%GsI0BW{5{^oFOIJ`WaHn ze8!rro9?w!{3b+s8;R*;Qa){Pg@4^$#o%KUIF;1X7Boy1OtOY5{$UTt$u=Tk1Koen zB%>J;s`&|LOOn=cyJ#DylQd=}Yuw+5^h=VASFpIDv`vPORsC$~1bzf-^-VKmiKTUh z)LGk%O-WWylPqnIIb`T6qcv%1Sk4LRw;FBmb*)QUkM=L+C)CNM$-3pxjYc~crPyLF zlC}%!xDkU7ryHW6cB3t@w9fOw?5w_2uXDEnDcej^R^>=pilnTzbs1eifR-h|ZfsA| zq&?wrTOnVMnQu)|zP0w9#!kqmWb-+UU69X_C~;4#lCj&&w=S3OQUduJ99PVcM&}!5 z$a)uWbxrOojlJ>GZKV#@`-p_8@4SRD^ZHOGl=8U7{iifVm*U=+hhjBz8KarJhxwxS| ztnr$pGpQ!L#mtcgI8Labn*f9b}AX~FncwcYi1gIwZ(HCuw5HUkbT`)dOg64 z%HEAkY^G;{h0S#BbtF!=Q3+=oa;DkNEi>Ltc<+{B?|wbkyXD4>Bw1eEy$=AnH$i-+ zfBk4151ygN%JVxI_}uag7W8nr*_)+q6ffRtX2^E&2S~P$?;zO8Co;z-@Nn@7-eJaF z1TVQ5A0lS2SGTDWu3yHZ+=5D_ z`(sbSHo@~Sq-Bbd-Y4iy_87q zkKqvq#&(F-!)nveVLV3w+kFhuzK&^Ia%o#&2Z3ok?^KA~D;mzYYD>z36#j zd|RaP{#s-_FNWVD9Dd7l!*8+iU6Nef5auRczYjsA@dw0>bM1NleovY2cN#h(Sq;5) z5RLX_n%e`bJ9b6R!b-9tU4s@@(0}Jkm`5P)H2Wn{W1PlVcsnp+)0RXnY*@@^8K0LJ z|B`uD@VO3+)>PgO?>AYQ^rr3Q)&H1&@a=P7i94rXkz~!OWNq4V98-To zc(~yWv1M3}56ii-_IJei9f@n(GzmYK#_vgTNwOxk9KIHRK$AL4V)asDh4EhmRYS0X zT4+&ivi1}-=swtU`I0(B=t&(Te)`v0<4*)P-`s$+6+Zo|Px@eUZ~A`Xwh$F#MM^>o zmp%k&3vm_1)$v_e7hRZxbFQ6V;MIKj+H-l;&dbwvfv(JRMV-@sx$t!yUN~`iZKIq$ z-j6VN9t9wNp~vyetpq*e|0Z%C#hF>KL~~1Y-ozY8O}v&G&*kB~>jFKT7raK(&vH}= z`Xh?JIjV%B5N-)80blrBF3zpFlIHbm?$7u&ukkM7zL=fGe$5Hjn?`rcI-|8rt+Uh; z_k99D8z#bGsvi#S}&;WA>iq4RT1M@NB@1sw=x zoS$3JCcdJhb}7|1VRb4xTP9ZSbD7QM58Zy!XE<~I&|Ufd&^^L(n#U;R{?N;|n8wdA z&5LOc$!k?f69MU|yS?oxS-{YX9KS@Id$L zQ(3W>7YdZr&~AQ)-!&RviajYKpr^%AesTcVf3qJoYsh{_#G zTG4=s;<9)MQ_DhL@`Y*m%Wu0RUB4xxR}FQ4(o^& zRt-(13|BUZq5D*#bH}L`G$EG$vwI6R5a~D*N=Om+`r_4#3bGdd7V`J;jS$u)lzLn?h zl;P2l)EwV*rx5$?HgEn}dD@P_#CU4WIm^sk7qsQ|`22j%YdgLbb?+-05qxTg{QhPd zM5DQZfImXR(NHAkmN^pfM^xT$8VLsR?p!38;bEHnKAn4-vU#0)xwjIz7^TegDh2!t z%xUW4CW}gOTBFdCTPM=0m@GU=LF7s%ueR6;I%(!MXBE!WSg1r9Q%i1AtX8}LrMo>4 z`f-!zqrb^tE3Fq$0Y!_~JkQc%WC)KYoW53{c_M@fP z{YK*C)T&j}ZFn*!Q&rU(0OJ~gam@^I6966=09CFr-ga_o`cx;LKPKs*X1r7Em+<(K z86U!HGxzdKHg#N-bRQ3=^{vK7g`E=>FzW#GF~oeF#1&L^#Je)c4I%C}1*uSB>E(uJ zKZkf8(60IiId#7onqKGehGfb&&K)&{7mopWJq?Z3KU zZ44}*XL4kaZLOQpxMf#IJ1mj5L_c1;9!?D$NcFrP3uC4hoC#32Eze}Ts|aPTRj_FR z4ai?f=UyR8T63)`w$dk#+s<4$gA1v-=-FJRGs|e^d$VC7MJ3K45m(Fwuf*X6byTqt z{xu8AwXik0(6d0^3f-`fN;0eA{|%qqg$r~3h~y?!A^~6ir-54}r=e)LrR2bo1KirvhJRBA4xW#MJE4!(LJ; zht;N1k{ng=yF{$+b@I~X%j!8?$>Ayv*KoL&!v+r5bLb~>8LsZCx=EtIF1q<5@4-zh zEy1N;Ek)H84OZ|N(O^}VT)5T~!idb*cAc9lbBeXSMXc?(plb>)sH$-prfAY-Gmzsl zWBW56?)^x~F3mKlo44)=(CoKQohMERvg9|M@qOikmyNm~p9rhI6&&oZNLjvbk*A^YNI8 zkX_3c$Xgc>k^dkM4Xi&m)#70uZn+SBVJovGTkN^`=7Q1}v?N~`uUs?+%=I`5%WpUk zE?AVqp=jPZ+Y<7HX>-IEFjwIgUrT^SBfcPQZVmy6Mx!(u@Hc0c-$;my0u|U8d-4}w zWTN>ZOU25Ywe@M|mOXXOK9}Qe8JFOddZa!i&eEX6KZim6zNZFx)aig}mf#=Hf&i9;WU0Ro$QSb7;>i514# zZCc8C?=oDdHR~ox!$p|?=obECfds*UXE|~YuGv|B+*-hox8(To%X9p=u2FS8@Tp^h z+a5!H9Dr2@U{e6t>6metv*)MKVqP2LJi4xGeUR%;BC_2H#g>sfx#Ai^i-OQf5!zIQ zcI{5|KWXyrA127WGt|t3WnMQv0>9dz1(@`cNj7LT?kD+N{daKz{yxFO9kI5*z{6?V zR%1$V^*RxIhMyrOsHU-SC^0_k-A2>4U`B&?iq1%Erb%<KX6RdLS1`EX`)z$c`hwQ2aXvf>HZKX&b*iP5I*?O{IiIuwrasKCrkKHQ2bnDCa*pGeqho5x);gMfIN^h9H^#$u+zx9=0x&GybFMUzF z<(@}=qksL6zn*nn_lIwNQGf93fBwDpUgM4#*EfIow@+9fx&LoJr9Z#x51(}zfBnaw zZU6l0AHFI7?+fpK(Rsr!zVwjehG&o0KXd%l4;;Vz%zu5(`Pcus`Bn1E$DaCx{hQzX z_yexHXHVQiANtnGm#xn{_k;g%ed9BKcvSnqJ)ilj{_3y4I_sMH;_Z*=FZ}(1SGAvi z|1+<+?zr)W4_P1h*l~j%ef9g#x<30Kzx$2ti=X(}OY-dxefVVH(?1I5*gXQRI)0n=ga4V74A&kqP~fX?CB%1M23wa#_VCjfv5%scV*;omk#laxHo5+zrYY z8cWZgd|>|M!TFPiX!`I-KbcS_4jxj*Mu%6qqxoGtOL^wy%{E#73jWl$YV6Ezq#xVziM-JRg>?(Xgm2`=~IuEE_2 z79`lk-3buj;_fc{yx(r^kKL-S?sKNAr_cPDs+pRqIikz}JTYi6+YO_rLTYAhvYTU) zhn1@Ir3k7ltr(~$vZy>$t?rdf`_r_Q5ZM7ka#_g;)ao+4>>9CAV`(NfYlCTk43Xws z!_kUG-l~CUaR1JUymr%{KJU~m9!LL5N@9n}sAWsJ_B8#WzHO`2h5ZLVZE`M4=BdP?VkMNT^;$C1~!ai`{Wv z#DuiEH^w04lnqc-5-=1?Olg?&R1vTgOH62(b5-$cNx}UG@U^--V~|7?BPG>1bfh8y zijfPY7TqyOju}Xq^21V?xNXe1F5<&GRE%f(jKX1Y)Y4k~&01+$THR$aNVXYq8mV!P zag}b?RrJ_e-7GFlKdEllm%uk!s8xP}8#>>l%llYBCQ@G*x1b1~wX6(IoNBiT7X57h zm$JD^=h2}8+e3_{wJP-)t6_0dOJh(RGk^}Mz*9L)(t2jncqPGv6eOF!Y_c>IX!C z3$QjxBvCt*0u&&-pw7++L|*~=8_z(guds}uAgZQ>IHl3NT)G!NoYu$;I8{=(pf4ZF zDJvCM^RVRrBrpR&VJW}k7?PXQYWWyCe`jF<6y;Op$D-pH=9<%L-_Xda4I-1j9l@%_S%B7|?u&~lLRCf~u`Zx?M`47G+B*4i0C#AlfR|W%y z-v5jGfx&_iXzD+W=+OVuc&)cZAf2`V9*JXUvSqNxObhD%U(+%8)D+eKdi|$%u5>ST zI4y}8fRCs^##k;jqv6r?b8p8&!AM_$m4m^*Gz*JGajc9Mkcg+bJF3wvujWylh4tT> zwAF6(H~?+T0B2f2A>;qFHLsQKU0WzH>np6o0aR0tOMOTfgW~cOnjsjs_KTb=iIxvD z+qkF`?zPNN*_#;6bm#Jh{+p(=s*Z)JEsls4*8*Xjv&UJ;AlI8K2C@%mbUKDmKN;c5 zw;lZtH8#KoI8$yT^+9Pw;pvj$NhASkG##;uVE1ug=M!oBrgvI;z~uN8_WhQ^h$%Fm z;2(wN0=nvE@X3yB#FF}tx9-?CVcC!ZYB5#dWm1(Ux@uupF0~^k1slv>D(#JYLQo2I zAq^NO?d_;a_L>I4@3- zqRf#FMgYA;L!8#ciXnj|u}ec!IxiuxjfS*E&Dr+_Rs!y z$I$0xAlF}-HT9jx_U?b(FFl<9Iox|~i*AK!@UJG;4=h7~pTF(4_w`B%Vc#}s#$pPy z4sC+vSNj~sxpTE$*I0j;7enTF3a?lMMVbhgIJFGSfb@S@5Z@tTZ?cvc4X89+KX&H{ zio8Y)6}Jd%k{wuC{(j8=2XdfD>1EgFh0PX-KXpZ3c_;k;tQ8v;p=MrN6GM;_;a?+0 zZ$IY$*TjK*n3OpZIl$Q}daQR!C}4ZcfeHlA?ik*K>5sxS?|0&|ztW3hZqardj0P!0 z4Fv76miFZ}iMuo`0n^xT-!Cwf?_o~Wo**iiCe|9u`*hnp2LcOi9B$Q#WzO<1G#w6N zFHf3?#CyZDTt<}re#4nFg?ysl5x_0aBV21DC04?zr(|5p6NJXESt{gwvS;owPd{TU zD5U+89NO1y#(&`0?tQClV(jJbrSBPy|FZuLPa?~I^tpE<@@Bhfx_o(hrvOs*Amw_g zc7U{|8)rk6;9WnJ_?JHy+03neVxpUtgQlc6nG$uUpuc``d$&q@PgnZvI3>EXv?H6< zvs;8qk$h=^LekmdrF8Aj>*C|o^$$7 zGM#F&{21lEX7m)1J(Py^!;6Q=Qt?QCV`La$9=gYi?%EnE8y(9Iz9;H8D8zBUp7|q? z7^?U@BzR>z*p{l%{M-?dEd$TwI8_hU$;VZRMpe4V&{KP$noqhktyHp3dk(Vs4>N-C z*mb5FzTZzeUnWEPdOG2qtJvOLqO!VKVVBmXXP&ZOn2%bbl5sIv-L7}BuT z8#kx@pHHKXcH9J_nfQ%{cTQ-3i1n0qBe1DxHA$=Oq_+MlW+j-X!a*gN^QhpTBc{n<)QpHtc&?wHuo zkU^tuE$eo|G{9;$;u`NA5}V%M)Z!Oh7WonU!jNG*qQO5c_OX@*=M@@bY}19hRg8qa z94=C54)Kp-;+4)>TwmHYIyYj<0j-DL#=+ z5N1>A7%iDd!QVVkfZLo}B*L>>~Y0WAR@`c5iBJ(xBXJ zIQ@Tr^|5Bbvz9rY2e)IrGLHTVEb#Du9^KO5RNd@39Iao5Iscnut2q*8)0=LTMJ;w6 z2^eG*guW=KNcvkUx%r4lh^<4tT{Bm{nIZ{g?Z9k-*qC+dF-jmuM?4vwG9p}_4*Ii-vFK7KP-oB#&zd} zCrG+Vo!Q%S$!jJf=B!7=*7QpPS>pj!&xNdEA5xa7hZwv`^X_UixY26L1 zk#N^&zo0B4+6ZKqKhT>z@cX)mxtSf})w}`c#cpp>i%6ZiuP2P&aRE(hbtBj!c}y&U z*m4|3!;7nI0!*uIwa6eJx-PT_^m~$X)oU$9)(wCBQzKaX_e!dkp1kIlc`F1*G}yWt zx=$)v^f4kUAWW@VDZ>Nu|qLS zSfUGJs)IVW1mjW$RvjA2gxTc5xN(MIn}=Fod;*^ew_UTenu0Z*E)m_JP8f!N`aWia z%*VMx%`ndvEqOE)nq;ZWvKCaI8)Ab>ghMJvMhcM@glZhl!RX8B4|@R$v*zR+^OIsn z&_OL4j-@l0f%r7_uGYUHC2a~hL)jhCN6br@mhxXXeSgNi&RAa8znc2c$Mw3$Vz}FvwNjaVPjFeI`p#=+ zma(1DBrc&5I8})K8Q0RjVoL)ja&{16*+f<8urcu3Jjaotg*9AHwV?w5gBR-cVlkK^ zX)eF`b}8YHhr+#W;c1j<-CQ%9M zBaByefQNP|Jzug@lw7NxWdE#2Z|WjqzBk(Mc@vGcYV#xjv`uO(YL_sOwry*8vZ|K* zpi+`c<8V10L$L%+LE4Dj9oX_bJzq55i8S(wRL9lA#(rAFU0hB(t=YL`H*x~9X!)SF zIg4l~GH<4L&ob(Kx9JbRYzeq6?!gJ6f0_|>;(=HUk{u~M$aHv*FGPN~Qz(Z0Ja_0h z8!cMS|Ju%&TG{PH5w?Y5f3)3<~i zN7^FZmK?-pnKR~Rbz58C>f34`CbjTA8_d+2=#Hu8sqzffIKHK3cS;Y%O;ZSNbOS$$ z*xSY6%TB`JeKa~BiHZADesqIK_sLcHpfd4RQ>%4$h5LEezV|5~8CjfRz*~m$0MhNj z!`9Z~oRn*zuLb+u*zrIqx@IDqeztmR=EBWk&!0z6af>GX22b1SzM$X7lU@j++5mxw zjLq4bW5$EVS+mikkRpXW-}d#D1=o0Hv{;X5&Bx6wJ_+(+>*%+5igrWD(j%d*OYm<^^A^YLf5FU2OqMDzn&-&H4)1xxS5 zFYH>^S_hBr{p~485XO7I4PB-O_nUElgGoO4NnIFa&yA75c<>}K_`@wmA3`wB2d8J# zjTG6Gk=$q+mZQXJF9-9H)Si{gZgpYd+i75`Kb>iYdcwGLxkX1_jFjv~3eUuu&2-5^ zbz`vCMQ1cpQ0hUZB}9!j5k$#i?LoNCn#P!|HLU*wkJFxmc`mCvjbS3mJe|3LQc1u6 zj469QMh1mclol=v$HF6vLEXmHX5K(%nWH&&j77;oQYh-7Zn8IZ&6k6&dUt_Hnzkog zUY^#w2v?#iSAJvtC-*=pwvs3uve{X;4<4%{=3>z>BxDe`q(O7EL{GnzLB}om2-=GP{8%Y-N+ic)$mhpAYLI>gV zwd+2~$79BT#AFA^%kASmiXRxk`jk#bO$eQ?ld1G)3Z0vcWI!D(WNNdEpv zySo51*G_8I)v?h)u{@$Z?apo1RZC~Ya4Ob#c7!Q7f^840ix!~8iFjQ+@#Mm4K2{n5 ztj2m5gJuYoQ-iWPX8KiPedwT?8$dxPmwzQ`(JcW^$P|sPuFOa#FRC`X9{D0NF9um! z*6SkiAp8U}{z>zb?%EB|Q*Qtd3T0^F!B9bLX)eIh&4$d<`Qx7o;9cu1cKL<$CQhuH zFzX93Y%xuR-r$e!aV@wd>;B?U=C&^uA^uUs-TWLDy(F zGf&36)8XmH%AfHBpVGTL$2s6~nTG2?EJONYmrg`1)3h{SW{Fn^IcUZunt(!t{Hsj) z{O<>RYJ{{tL#8p;x@R%2S)|wSmoa?)vcNbyr%T#7Kk5b25~}9h?9HN_%_3UD%Y@V6 zu!|1yyhYMqvq$Q44V+t~)#Je2S|)0-3pAG>ce4WW0;raB8dY`y-dKi=_3SSAsWAS+QuN_%C5ME0kmCKj$YcE2ErL-t&qsm)x%=;B!&QAw;YRN&mew7zf*M-khNl1<_#JF8k z!!9}nGcuoEV%?TW?EfcLb2Z_aojj6|Q%4QBoU{+6|%A)<~D!EUc1w&TE6+0WQuFCrdC zSBwu$DFg8i^*50}=ku_CNEiQnq?lrZ{>4uu7IL9rdZ$i+9jO?JwTwoZhC^{?Xw$s_ z^OL8uKf&$8Iv7fKw%u?z9ogA^G53FgeIB2ll_>7a#_i460#GSR){=JZ*ocs1%E^Z) zgj|!=Z}m8HGRVGeB(78mD?_Cod}(=F(-OYMUpILecaB>$Q)mK&+D>%F1Y7@6Y%oHd zC;bILRP1XrYW$@(gVcC)LKq^)raKIqV;mB%Ll9$6a3L@nK}&0-HQ!4w(sx0YO)_DG zq*=-Bz?x@B_T_}tmg|PAbqGc7vpAxO0_K)5@LL&K>QxyD4p}sj|0s6Kbw>o7>yb4C zF*f%w&P-O6!F~U+&WcttAaltqr}sDnEu^$q6LdaNUl|&-J~Y66RxOnTu-kr*qJcJRZy1$|6lzHpk`h zt}tt1kDu&FJj@m>A{jJbMvl-%qo3g~v_J+yosMva3eI?EL%{ zT+w@=_H6=-l#JlNOCcKuACIW4C}`H~55CXdqwrbS+mu1ZgBdz5lH=NnyyVn}jg2=s z=qX&B;O;iW`Ajc2A9 zsANO#*g*Fj((j&Hw zlMGV7&pQ6=gIwGqLf2mesDULr*k9eVqf|W@!6X8>mNmP8N{dNr&_m=L1#KM9d=5CGEwID043AdGw7TquPbtVHJZu$$*En{8p}a7iDP=Fp zw}f!MMw%{7B=+=QXOd>^22fC}vr1yDi!9@{rNC~{78&*h3ya1b(_i5y-z?g7&mLko zLz;vre7<&;{zIHkO@^Ui;8Zf-;LlK3X6K((>}VwKWDG3J^p##=502F*Y&|13@wkpS zZjb33M{C*NQfe>$WAJdo?s1)mAJpHba*Eq}fUG|Q8!4}i|5FGy^zVes=`AOqE*EBs zd*cj!wvi8(VwR++|0kOi^_&@n=}_I;;gpdA{98g0(x1-3c)ql$1mFp;Z)Deyv95kU z`l!TcO2nbLlu2Ak=O~~FpoxgFB14%`%*nTFV}V-zrjA$Q%+!_^JCRknf5YZ@X(kYcendql99=U!0HJU*#}XsicKO%;OfQhNEI6Ry~XK)^5%{ zyLX=)7Y8bVqMGNGqpr?X7j{O*S8W*{s{7l1zJ2BV|2|j@?uep2dio^|N=g|P+e4$w z8fYW0S7SK&B}t86%gK2`I8teLps)dcS~P4!l2q21TcGA)Kdn+M;<=<#@s`8*ES_se z4aPZ0gSuti*l;JF^yISYw?ilP<&iNxAO<(9Ibs%Q-V;nKY($XAAQ23Vl~L@y1kM>8 zIWyh0;rn$yAkn|mr1cUjvSIsJ9tSqv1%pk}sL12j{GMMu_AlA!KfjqHenswyM(W8_ zVKq%Li+-W;X!7Y9nzCj;3umo`s}{#fECyBdA~t_VQ%Z91ACk*W=M>tvYtsOw%thzU zf4CdVt%9I#-HLyh7PD&A^VX9k3Sj)^KzMcKsiW1Ol%FQ>n61XOF2m~4k3uTk<(u(&64*YBFvWa}+c^v~MP&Rg$RmC- z_6ysp^XUR{o}$M#toElJp;H+U9#4nC&Y&oH^NZWB0P1h$!C?d|9_qcme3)tO4!dni zvSSW&IJyogYI>JFR?Nl`HvxP}9hH}xl*QwLOC8CEee*`a8_a)*{<3^;9t&Y=#u9Ro zRB=8$|MD*F`|}yHi;e-o^S~>Eas@yn^U)x@Ve_FX5FZ!U+R=`1n)IS+3kVEJ-NZfC z<M2ZgbE7@N5#fwW$>#E@OI{ zyNr(JFgx)lk^(UX(H&(Aq`` zDgwD^^doqJBWUvVZe^93(SkY5`e{XEQhc0tW#yY;4d0+D#k#%mar)Yep-f&<_nhVv zZs1gtuS;R}kqcy=q3JT&{NVSI<2r)+TW0ChFoO{JQcA(rsN7c04ITGWw_v(vFuN0& zPJZ6TWFQpD2(oc+?*=7abnEXmzVS@x#kldT@8$vhA$(l9+kvG`pRbl)udx0!2f^=% zu6U-RIe><3miqdg!gM=tA8H3K=p434SL!I$gaRCIrNrjT-{~LO0#Pk^S4$CnUgX7* zo+W+~-(R78I;IH@$h}5IFubJSS;k{$C@0}d4P{D2Nc5DBZIf*J*B@!5PdyQtK9oq`Vy($z9~b5f!&(GAzEWZGk4)An}VY*%Zs_;E5-M zao+Vyo16dlrJKu`YsDw%v#YKT5b(P9iKl7uDvv89oct?ihi`EZ)S+7@=$|{0j**FQ z;4`}4NF1w}`GD84Uaf)Lxax`acEkG-b)pzt#FLQUTwa}VKgZ8q!*A5sNuV32G}~Js z)~G~_J_=bP^SLU8V&HW)P2{W?#owyUCv3jK3eHG!0}Y5UNA&CMs*FcIf-_FT*Hx+> z-66|eVkw9qhoiw!z?{Q^0HlYo{GGTKdljRdkiK9)=!G_d)?Mda4;6!>O>tW1CJNf; zy+N|Y1#gBbUi7O@3Akm@wfX z{BoH?X=oQHBWplud6d&`(Uq6xdMT_gi9FW>@T|09$o|{xKX}F{Sk>b?OlhE%6_g-c z9C$cJEm-FH5xR>Nxu0r2;U2rrWmK$K;SqblFJ(G$74xB$r*cZsH`R_)B=Jp!8u!gm zO}El2p~6^*;rv3t0dsG38JB9X{)|}gB=FRNZfSLWH0KO|SQkgeCQIMxSBB-Fhr55? zknYsaER>Q8L2BoK--ngTiTJ^O4yIWS`?=KC3yZCl?EXK-=^4)MbBIdDJHhn0_mV|E z-BjHL_?rfBwH!=U*5bNkk!3v#tp>WxT?&fh{I$@~iyc1%L)yX*)gq|eJ!-t+mhF@I zGjq-o6hYQTQ>oLDSQIWIL(fVwuir`>U{(5@V6TyWwxRf+OIm`A7`K&5-Y2sc*nZFc zbg-(OgL0u3wAtFQLFi_#-|lJPD=cwQ=bQ4_V*8Eo!Xp)Mu@b6&RJ9Uq~kFuaJe@e{d~l zztxEn#iW$b^`v9<8JfrN~xsIOy5t830DpX2Ng5CQ$uM!yaf;UGQXJRJ0j z;lcOa9r5cc_A2Yms#L!iuu2*H*9Y3J8r&2$}tV~nu6^tblTywmwk!yVC#9c;$a0L%Wvt~wr#E3~qCfj)?T&BOk zsB87_gXZNZNXkCk{DP8WsawSUj&vvwqSoYzj2X3)wIgj_ z#T*vY-+OW5q1z#H*#v48|3J_f9s(#;S&uW8^E*n>x|p>oOV=e;D`S6gS^mSK>B3<1 z+j>lAYjo%xXi{!WTXjIe%uW!|FG*wGPY+1JA*-WJX>;M0pn07>AS#AJMDzjV2t;|D#CYXEG>qh!YRi8u`lf1V;*H%>8?3C7O75cRJOt&AKt zu^;pPie|NFS=7N_NdCf6uR<9br^O!8%J|h-bD-Z#v<(z@psozP>7m|)kSSO9O-;V> zTJrHNeFz`2tm0Q}_*w!}oWUO)d5i^Yb>Uf(?vbx9KnB=nU9g1`|9Mz;b<^D)?+RvG zFu~w$%b{Yj>_Hrd%X4$nhLQ%9{IaB55DNP7WbqbeyL%zSRu+k5Lc`%)Oi`E--bNT@ z^H}LFTAIqnvYrFUJ`oN#<0o0>nJ#toNGI_6AEE|}k%+j%=q#*0eS%Vw^n5I0b5?-^ z4yb6Mfq)J?KaIIcT*%oDe#BfQG8F;?a8wFC-wAxjSCU&miZkEVPh(FB!2eL7yb0Wp z-AVhu|D`k|gx?T1`pvQJf-uXm{XX;y3PuzGiVUSAvxA6ZI|QL}H(j&f* zlig-R6+4o{K7oF7LZ#HeK||XyEus9Zr$s<0cGlwh=ED;89fL@k2L=bfHZv14amQ}8 zeao(0#~>71Ao6tZe7Gh2xz9KAxjl6&7JB>U=vsh3Q^+RyBYD!_F-4~vGIguAKa<*G zOO$)XttXRQTC-i3E31zglBPX~Ys-w+C%+8{P5)LHf{pGu?T*F^`Mbw_m#G#Zb!U83 zMDO#0KC1sD16}}JW#{b>f=vko`Ot>cuQzWGiE}}w7RioHa?(v>Co@U&AK2sFUi(aH z7XdegG|~>T=fOB+6|YuzX%7qxoXgR)29cjMVAxVS9M#8IF!>)`HpOHUEGFtCCC(27 z${vj_lHPo9%FXLfo6oO2qS5kdaelBT`BX*;9jd(3k`}-pg?X&~oS;+bD>W;DzyiZc z5tc54IWkuG`0iiBd1DE-I89?}AR!jlJSy6!M&iFSLjqK1umyXc2yqOiws8!hmO&)0j1Qw56xV@Rg^>N^8eg&jzz?*amyK$>^P?!XxYa`TKZ~E)`nj!Gy`}aalVD zOb7ZGxJ};ZS#^#Z4#LyO{0kkZCN0h1e)<#<@mffLDAJLT;q_`r(9X7P;p7-!^E|7GukmQRwQ_tz)S!#ytZDLg9vEb6T5!fqtAschsH1aPcvajryu|@oV#TF!O{>$`|uu^!%2IA#ulL;*A}( ze4hQryTKosIrR z)A5-cSof4{C7V5R#=rpy3xPxHJ)f*OXmJkeGGLlLGGd7$!99Cd-W)El-ogvD#6;#D z7?njZM`fWNRigf_$X{MdHv60NcCm`vn6w>Vr_~}rZXY_QyO6GQ^fkK#d)5I1$YTz`0hT8hJ4TRm7`ByGFV>kzS;T&C_t z0aLOkRW4m!!~xrh;M=U=USmc#xs>p1WGANxi3>JMmdh)}(I+}jAWx%?e3RT&UY}GwSCnXdXW}5J`z29};-QUiuPAeYHD1MOVXNClsU}dRs zCa*qJ_4Kar1>2gfY?6OY74nK0&kH379i!(i2k%?5-5vG)y(?P}4LYm}Zg7bc<9ccd zS50tU_cLXDpUpOPb#RFbJ;Pu5uv?g_yL?(w^oHc7)KBDy-PV~py*ymAi5YF)q34o} z^gVR4JcdG;K7T(`ijes|GeLho-YN%pM2kLb76$FF#_GQG-Obzf-iV~M&vFnq@-{#b z+jJjs-PTX+M>Z&tD5R2cG8^|^ei89Q_(sK%mI41&C5tZ9OV^^~FHh&wq`Y63ubG)z z=i8T%!12F<3B4ljX{5qKJy=0#%$q!UXCfY*4x;E}NJgck0&v&t&1b~&cj%tNl0gdK zVc1jhp$N(KS+|vBbKt`43_dg(0aL==U2gww8_XV~N7?eSB`LLh5?FiIVG}>-v_w5u zK!Z#f^$vI4c3SM`AlJmKQVyJb0tls|4OF@i9Qy$?X0m@XbuQaRN}r9T9*KH(B0MiN zzp{`R_9|POp{o+R4I&Q{J*=#*dz!xJ{~@oBuY_%Fqr>Vt+}%Ap6p5s)WN7Eu_8&r4 zR?@8uEssb##r1pdfuYj~zakNU_x!agM(<7Q;c>{k#sz#HN-tTcpqQ&2Q_^Gl6*yw=o1`4Mk8H*#@DYhFTZWH ze%~EDz`PkQH{a*^*BCrr+>g@*bVdD6ztEbQyU_Rg_aVaJ3IS@mZuy$w#kNmTU4MwY zmOV^;9iBS(`U{0-@VAU5aJ|*Imwn6V&td!XHs%pcS0`P*P1Of0TZ(?$-=V3mznF2W zBnM;r&0}<5zfMhVA1R`kq!Z<-&-{@$Wyw9f1BUWMOXN`<7;=@ug%49oKolfF@a9jEME7DHNp$C)>tEp)gv;v zf`c2fSf(j9v?~t@eIG`e6tE^^aCYe<3Hh&-eq^@6dQ5(*+m%I;*5RP8I-3t%d*Zl; zrfL4;FEV68ZF88>vU$kVE4kYoY)h$$$2iKo_bA&v8bw-GbYRwUhFo%9Q~B?3I1ros zUV2cJ2owRsO_bnf{IxL;RZ3Ew$nHVf4o5ld>HWhj%Ksn!y^I7m*4tK&CE{k_7USkb@SuVt-IB;1f5%xubuto&u12;5p2cg*2ewL_&OXqH7vNl_Nl0u z2=vEB8D)qF^+5{Qa@f=+GC{y6LPU0pbq)QI(EwUj>s=2kS~_Q7D_3)NG66Op*EIq) zq6|DCp@mge>s{3mQdBndSwHXy!AC4Q! ztIe-{uRD)lB0}=mAB_F*(yy5Sxtk(!NJ(;oM_~^AczCdX;Ss!@2saVj4Q2VDHh8-b zHM=dnUeWq9q?*VB9a>uy8_Ou~)t|hPZx|)EKgZ?@NOet?nAW;|UX`ux7KQ#vM`-&d zaY{BNx5BQ{By zg$UP(=@;G}EM|}&rJO^DtkFM49Bg|4K1t2CxLpt#*|-O*U>l0B$;rA-zj&(!nYrg} zbg+HAS-bpDkw=54WsRCd+?yZ1zR^^;k@-eLdhK?>JmUvF(_x|qm>idK_n)}D@rqO(%C*kB>WapG@A|r9 zA`=SFl9|tgngitb@lTfiFfJU#cpfuItEd?%%9VyL*7_gzEO$9?p3gjEt1(7T4cyy+ zs5tz5V)Y#v$x1muYp@`LY#5o% z@93l?Q9L``ZwAERsonW)oU%5bBT37YV4#M_xbBH!Wj%9lw?YRc{FDEXM62q}vU{{I zBR;ngvH4qv4|KWC7oOcf+EEEafC8R+8ofTVsVeYsd%u!noN$Z5pkvHIpu6A*HhWw3 zI*L_&OA+{ZLvgVFL%HY2PdNCTjNJrMG^i7QLG17OC)`_^x3uX}mAuI~XUS|;0PcU=?jE-{^`jg&Rej0(NbL{F$%$hV25CHxl> zfl$};UiOm!AAI6}RHW7zIt8pFOzJ31T)oPI8yGs-^-}H#D4xXsC`pkiY6Xo!T}13o zKdz01U5YCq&kLguQ8w6KJ0vD7g^?d|Dem8=cG02g(@ki>`ezB5Aot?A5J{R;|&Gpp6e9tjrFla4R2gIX{4yC zZ$N_l5Hxi}Hy6JtowUcd>fKzc_H3H;p)`R++-V)DyvKtxg7NtcxH762z+v?XBb@ou zAknivy6GX5$`P z*#F8xgUmO7RlTC+LJ$(rWLd@fEjd)GH@;f2D7`|xD2^&l%LEqGoy?@QMzcXr#24=_ zQkOU^{CyiwY3P?V#CY3Tr}(cF1dXHDNlCZxyMgdnd>1xMbMJ5V!fGw`XB0+o_g7Bd zJjbI_)O-)giuu_wBEh97mAayZ0BU|2YQ8mU{yu6x z?$!Bkx>27UGOZ;Ej9%q#{B0G)9o9IvcA#5gm>Zj9hpMz+Y?NEyx#So0RZKE33gJB| zKl{1hFKkRQex1lWe-$xI)Z?z)2nYNGBszCPzLQ>{$AhCgujI?FDMGu9;cWvjM^e(e zzGy|O!q0HAbBl2U?vj&La}S0um{yVY!ui_mw~c=jdpMoHV$ikUjK0&(1>57 z6`Us5FN>i6aU1Z+&~+&^;u$#gD6EkR!hk7{0Zj^C*gz~&f#}yT$Oq25!}s2fpqg%zX>n)M2~BZw_e$UAtO$oXfo!qLYFWojJRc@Xf__y1aOQ9+i#~MGK3KN{ z+rh-Vn?8p$tyZq9k=6897xcScW`q7_0kdj`#oLPXt#uJOq>mvCe>mzYoooK6=Yj~w{%>i+@i>9hWA3+_y14Cn8yKiFH~J*z@VvhooqzN*SHdH|aN@yE zjB$uo=*`*a*T)r#>$B}Gok%O8oK7p%nKWvwZ|c=FSR%5LU4y!@dSkO^qqOQHTyfH_ z>i(mk*g4U(^czDPg&FFhcTc$&)y}OK6BEpTBSwuMQ%t*oaMImrx7RM zyU_w3egX{;CRH^3wvp(~FN$S@%KjQ-^{T?{&Ht?&z4Wdn?G`8)3R zQX6sQ^;blme`RIrUne<3VG~CvHb#IeWqyOJYkJ`bzd5F!TC6TOGc7Vdq~jXoJOOSU zsuAks6u`95jOM_hj5yEP_R#%fjL#=($^16p*YagP8XQtKHpz2;jUd3uLikDx*7BeU z0#O-3+M3#*ys%t;AWwaG)@0O==-XN1%3k}*g^OnQ9gCdSK7`&vc-G7bDNpbR9 zD*%fPx;K`U>&iHg31hYODZQKl%uR`rcEWb`4Y{g%(;LuX%sZN(c!JPHIhd5Ys+iKk zWHNuziFu?pCrj4@-t&s~oSZMdlUSo4C0^tGvO>P%g3(2?`~-U%T@3=$ok!(TG1Bps zsoxJE`Yl!Zdnba8;pi1X#eASW39VMo(^ytMMe{3rC-6Gari(!{nd?n##4FUqbzl0n z<7@2;al0k%`Gp4kzW7<1vb7!eHg%_pe^xQOUz1bC&7+&)3+z-@IN9`HY^5a40qj}L zOB#fK0IF`C0Icob$C`_NDLF!K6_sOWAA*+~kE5!Z5PJuO--Y|)B~t$IoW`=NEms`{ zl{5X29;sJ;o`NDvJ6(5@48A5A%zH~=MMzDGl5e(Qjy7zj+Dx{&11pM5Fj)p_BVpms z>!sr*`E}UVSG!b}Dv^Nlv4U2S05F$=+tQUhk!h+4%rzR&_vVQTIFil*;w#Igs7HXr z`R7fkCTBP=LigMs~3O!o4?kYf&r{(=cDs;GXrV`;|^DNIhkg^R`VnSu59U16o#18(-*JdYb;AN5 zfq8It{i(@j1>dRTJ?N!el4Ub)Zi8|pcB?r&$z@INZ$BrQP3@@~7uk~DzaneltD>X? zEW5Zhf|N(Py-!lcV^)p}D$+9HB82ne?(-|EB5B^ukkL6~hYe*xM*jdzEcvTwQYvu? z!h%J{eS<&R_T7bET1A`~*x6s207=!09ns$=f&-YgSr;CU5%USjX=a~liZtH}PGb&T zpf$tmi5{_z!gyyYVh*LDH$7u*fq%B`f?~e)!QPdM9(5L6Rd<435$;@ZyTcuh1_O=` z;UOW=4VC~eUpaJ1eA#;&2o$u)TD|LX`w>TQO|SAlm!Pa8p}Y4NsP~^Ca(!BTN_`uC zNk@J*Yh@K?lA&6c%Ync|jCX}#Ir3%MJID*-dua&h8e>k?e@oG<2_m2@d`VqE9D7K+ z+nG&(jy=ONbQ`k!{N;K>Qka~kATah&a>$dMV;W=TedzYfwXlM4BIb;2?4kRvf0&=B z3{W=aP=41x&aZ&BKoxuDcIcLH_nG-RD1jj9=|AE-bPKopOm!WU?$;|LY)V()iUE@p zl28T0xr%P&MixB+X1O$|77tGN5j zxBHBH{g&ewA}QPlDENmt(}xYicuREs_QUT(PB@gR;FGpsCH62h=5S`{iQxJz((faa zBp}U8mryk|!Q-Q=3_2x8O79!OKA5YtWS2@x+gw;tu)0MG;31Ln4!(Lj+5q1X)i^p9saxpJ5ORm3O%_l0E)WL79?`0j7amB`+SPz`R3=X6;CM=|T z*^l(Hej}X=L^>XSf}U%D>gp;`qGEx><9RCsSRji3cerFZ$x$!>i|H-$q_+au4F6AP z_`ex`Qfqk`6GWP(?l|_O#$QU?GAPlDIWBbxDZwxvc$u0IN%&6!@~ANqH<<-5gty)# z2r+aPmJwRE3UUM{&L@-u8^-*Sds|6qgA{tDK@Ia9#%{YJe^$&+$oZ^krearX9_fdcw~#xun{Ayz0n}!M^en zOGe2XI3};U_FOL-2^R{JXm{yWsJk6CRXdHi(ZyLFV>BiC%mGU_Vc@(I6QPd`Y(KGp zWWn=uO9rW0v5(Mk-Vtr;kf zSNHuw`(o-4)#a2T^h}jcWytABih@Q$U8W8}!@?7M-rr|wxo&=AAg!Mzu@(JsC_7TQ zclR?vVrJRItQLz*KGz3OoxR2qr&joOSFouy&xh1beVBzk@H6>FECP@l7ES2A$IG7^V`8S3avH>Lttq9XLBFaTg9e_9`^sWug*6D7my}6v%wPaIye& zK#RZh?cx0SC+tL1%Y%h(D9(3|c#uaP>IsXd%Vmqu6t}DV0?TU)G)K$4)XNKlJs04U zt7dnqE{Cw9Z{Vxgh_2L4|By2lq>Wq5vA9S>cw(o`nZP0P)vji%+$cI|ere(y@GrTOCFx}2hF^Mf3q zJ>3ZzJC&Gyb+tV7hIhiGt*)^yssTBbV^V;W6sdAI&B{1AL>vbhuuJ_vjF}-?rkcuW z0?V>6m&Fo<+Z!~_W#x`%ZA?u+<=Yx;DQq1g5dDCWVHD?&noh)pEZ9K3G#}>xdne=$ z)FI|rDRcT<{D3h>sVQc9==I5TXokN)Z#MN|Zp&o#*d}%tF2E~^eKh_IK!9D_!cIS( zphUCujbDT}yViw+wUIY(Aws>$DrJ1_S1NYfbkZpD7+#QbhzMqt?gHq*5l9nfg?SsG?>So2k&p)ULu|xhWZlZ(2efou)z`Vkz{= z*&CK5y1}%En&l2JUGl{FnBc|wJQsiy4*w{OmnT=@*ll}{r=IG9?8SfI0)auK4z)LQg6 z<$KnS^yH73CVTZ;B+tm;l@ugH;K&b=AniOYc26UXG?+SUHOd@deZDY&W-qgfro8A# z$WPrw)!Zc_3}2S|anXjxGE0e^Q!P#uR2Qpqi5kf+I*Odd9J)9x0~(Ow^+_lQBS`J| zZu!7x3X^hbl89yY(2{Pch|4J5Lao7NeDZ7EYYDNL@<+P|hI`UIxxuAq28)9Wyy@u? zLqA2bFJ<~97pl|6rP6pmXF9#|0x0G=WQX^FiC2v zXf5g_{<>jyvpMWeAOjhdbmVKG%ZV+Cxfi=VPVvQNW{ttBNiR0mn>xAKlsz#=tjs(8 z0-5_uEkL*(EnB7&ohfMQ#_UU-Qf||Qqt*@%3~;&ELRlGSL847_Lp?MMOBci~??=}h zD~M8hQ^uqD;K~eEEpx+hEHQ|x8lgt+f{1og;xIKh$GV}Ka>P2H?9jBhs zVyr+$26&#Bpf2m?hT$ZC-R7h}XB2ZU{u(TP&UvBSITF@TXQDTC85TZ21oN!H<@2q< z<@2aP-@wSwy!wD6;7w?o>v%Yv$mlJYFAC^~IS!qP-ecVftirtV&%Jyuzcr8Y&HQtx z158m=B`@q0pS5JRp zIJN&6>;^W>87p?y=DD^j(UlrREtY%?*qQatv7fqoh7Y8MhAkb=1Ia7f=7op9IC7F) zqYZT@j-_I~iKF}GIJa`uoju7Ol#I1@o;@i(x|EqCUqOn>*6Gv#jY|i5-#OPk<&;vg z8l`5x{z@f=Mg~(|+p-h**7+g2G_w*}JJ$u_ajq4JWko*8dSX9lB*s}oWRS6iyx*`Ul=#Dc3A&!j#4gozF;1%1)BY8W_^o#UcJtO@r(xj z%>k}hM`{jRY5=G|;)@m)62{KCR&P2|rM~7!K+8^xG!PC4Y`LibMVO;fb8|p3H%QbM z4Mj}%<<#%>HaiPwjrzmkaODL)GaB**LblwZga!i9kh5ToNBzysK4-zKL4&?<*wThT z{n3D*1|nXcVxA;WpU)fBvLiYg=nA_gugz${7mm=NH{f*^kRVEKH_LprPyL~AGY$E@ zVQ4`#=*S=UXs|gPpaE|Hub%vV?64pzX$mOjhKu@r{;=u3991*X=c{c zK!c&M4+;u|wCtP@RRG-hnLz=Oh%Gk{&|t*dO!0t8iUh;Xf&rZdqyAht=%s++or zd$s#*?#tB6-Jc_r5F!&6=BkAmzcp|$QiQh3#0n;^WYQWY`j`}E(s~per#rPnM7vaE z%G;Up4yGiT(#4cCQ@WXQ6;t|{a*Qd1Oc`d%ai*MP$|oZWv&lBzQL~72dj8X)y zte8snQJWy6b1hyD{OE9Ds zLzbee4qeO8rK8J(u6itCIhN1>E_DUC)K%cp8o{MCfy?Fvm(33@DS$N$g3BHPmpy{% zqL{9EbS-f>){SlexDlX6HjTCbY#nV8oNWS8$mY>4lERo0yNTFrTeoc&igrN8qFq># zJy6xXf=C(LH@bBjJ`apuvR@Dm@{`=i72@HJ_z?~h9CmV;;_xWKo-4V#m&1Mz2ROW% z!y%q#gu730cnyc|(PA@gyc`FOy5JZL^XVm=-=%X`H1J!U>0HyUN=o*lOB@Ah9oO6MV$6s9jh} zoQvCpg`{XntFV$3*R~1O#8ufYcu2|8HbEw(b*(}pDO=ViEGFeu?ZOIDp|=WQ;`X!) zm85cEyWl5P6>UNlSy109cuDo*c3}~zSO(-L^ zwe3O;S-PTKV5DwktFW3Z^Rx+WqOWQfmJ?57s}LgftJ{P%WceDr2x@3*6`IJ3W$nTe zva+OI(8#J4ZGu7?z3qaXtoF4FPO@fIn@~@h{O!Ur;`O!(HsbTO2@c}-w+VG5P}(k3 zkYE6{sfB=oqa=v;4&mIrLo{>mu-jN158=H-(7Jc{dC8P}!uEl_V*~wpCX?O7-^ir!tl}^Nw}HGsn_3&^gj)ow#Q-nDIM+x!}m0{fB0r z*HmNJm47lmhul!``dQ>Ud91gmvu8NBik^Gsf5B4((0!r>5S-Df^EhlhmA$K_xcKJYP?LXYWW?YJ30A z#5DsWyyxeU8_J%=XVNpYci`ATe$G0FT(j%!zI@US&nn+sNIJ8*C?M&1mtleA(ItW}a=}M89dI=K^=Lvqm*Et1$p}iJkDwwRp~Xhw=|RW}0`J zvy$0mon32(t{ECm_3cXZ!!C?>x*b_FP47_A_Wk+Mb4FWmhxC?thfkzZ{XP9h3yU>I0QA=(^PI}rRd8N2t1ob}?J> z3q}#z9P&k7lb7KXRRvP)T-oP~ghRF*u|j~)7gRGd9gX-x&1z;SMm^h+>I;(^WDZ2U zuE{Gv8uUhjB~#XwG!XHHp@Pj(Ejvfhs4p0heO|9OsAiVzXnQ_DLy_ii%|!?l$_{zM zrBlCKz!nLGodt_C8uB;$N~X-KG!hJlU6WUkG#F|21D0^auVq&bG#vFq<$Y0K@uYPR z4f~=YTaNglV&Q<#S@2;)m><{t=mSac*#;rit zN_4FP7i$C;YXX<*1()gv7oKQIN@z3)+jGDXL4J4Ij7L-~N~pGObgdw4;HOZHZDRYD z%`pzQak!nsw{f_O!#y1C?4{&&h!^=2)JBNok?BMVn940yJ;xNVGQ4YH~ypqGK zIPBwafWxaf9O7_s3FeER-u6uRkaBkDPDl*P_7a@ktwOhGo#XCJWDF8 z!4sBpJD&bjENm545ceWHOR8LqXEaqy@XTmIZJS^x)r;_ys%9ykWG!^znbD#;JfB*; z49}sK=&izXQo9&WaF#B?v!OZ91Ih zCqAg-el=;pQ=V0L$|K8o%CkDhUAiE?0#A7wtW%y_#7U<-Z6m|O1O1r;o`pi|T+eq* zL@+z$re-s!X_9|!s_$5LVhHAmg3}Q5G-fuLGp8_0Uuw8}po=C3j}EPPtNfjb-rk*w z;nZNxnhamoRZh-mJqt#^%o?D0Qes=KRu`9UnCtwX?Of9yY;#nC5ns!;MT&-e%t|DM zq9MGdC{|q}5p5QWItDb5y*z3JgO!LPCoR|Qn9R}+|6Mn zhYL8YAu4=pGL;n0z^-rxc7_T^ISmqZGq*X2W(XCo`YlI~WpNGZQMKr?L(S5oDbR7* zuAP&4*IRMPWlEal#j-#H^sFW_B;Hk zJ^e$&sE~dxr(+SjUyl z&XGZ!{ts|o4RQDyX*e-xsjcry!N#=LezLFkQu7vgNI~LArQX`m0XxBS6o|~(&@eqv zZes8nTR*P_E;Ea^XDfx?Vkph@b@F@M%538b)0y9>$#%Usw@8FEv4O#S1iCl-O_ulP zg=YdcOxt^XCy!*_@7jxDCnu-x{XDk>EkfZE`6SwoDKANBI zj@nTf6(|=8J0?gm0pJn=lt=(dDS$F%r?E4sq?I%qRXdrnE6HlhHlbAZ0=CE4qYIr{ zl3m|vLj$2&(w5W~BSK?eTuZ7kjf|ZgN6mRLo4mr<-MvFVC@t!1&xdf=Y zjHXoOxHIj1{@zk(sBt}sm&8iUsP__V4MyG=D@DQV!N#2=shq6`BzF<6 ztyH1%d!T*y5wn3ZHt;@zEkw9nd;nmB^dP`8dWIMekW2&584r?ivwhU~2sFZKAB7Sh zB3q3|AShGGGB*T1W(8m=#z#^A@0DdMjE`Y8SWZ+@MJdM;s1e$2HNHylReTN8XejLH zg*5~-7RRe52|F_5vn0MC7f2R$OAu(TF@BkoxgR{%Y09SO_@y$djFoN}c_Du7ZqQ9#*HRwuob#XtM2~YI{N^Ul!e)^_O?utoEV(XGs=0(z>;elgigDK?DDJ&sz z>{#zLZ@td&UZ4&cvmsO3!q*KKo$lIZBU_Kosc*)d>LLL@GAJR}P;&%8IHH)fEuNIa zT8cTgoaDzfT#{Z2M}w-2rrexvQLT1+(8#D#&R5+kH|LfSq9?_Sx)?2Cw2aYmMk^St zWVDLO3m9F}@2?U#0lXS+qCu0x8`@g0hS)epf|s_YOeil#}b1>DQ>MYIMZh2cY?Jt_suvjtOt2%GOxV@yt^|sT03JTnXf+E z7%kfaBw<;fLlcU*jyZt7OSW&_cHl_cC9Umm+j4*&8yV_;>w!mZ-?M91Yt5FE$It*{ z|Iylb?Z9AdV{LL|xHgSkk+o(QZW$aL7+g2&7Vx~h!el_YDs_!DMA&mx-J&bL%~YkL zR#h^-5m_QBM8fR{5$m{C6~&qs2%i=R*R3L!FsY15<;XWGxp7*M7BEReJuA`@Ce<=& zDU<4I2qO(>x=32Zq(&yK#)EdLiAi2$Fcmjxn?%*r$)ea%T?H)uG?yUQ779XXJ^XxJ zeTC*11EFA;!w82_4x2e#%i%f>H*mO-!xmCoswo0dX$wCZs>GcKk#XlCN_g@knQB}p zYY{Yo$V+hYQL4~T3|h5jq!xD_s#-ATz_j3p(K~9+IZ<$I$L$4)i(@-P0@KacbTBG6d zCU^+-$X<>GmI{ZB!*SaVn=op7*?5OlQYX$rX*+6mNjuANF`F9O#tqIJy<@x%u_9Qd z4_L{so|1fMY@0Eh7g}8IfY9S+dKanBDc!N!ZXKjAi>$OJz1|B?12fKe7# zfAd}QeY>08%?X4nKp=nt_Dps`kr1*ZT)}X7)Fs^{yCfPCnoY2_zyBZczNH?uY8AZi zyJ~IgRd1`3M4*Q~Y_;}MhPGOJng6|+Z?6y_U|?syZ@xD(Z{Ezjd2_vYaL)Hb&g?;w zLjjzHJZ!~r7s1P;gwtR~77cj#6C%8PWcX7ed}cPyt|PPZrvTBOAxJeHEBAJ!8lO1) zm?KcebADMwuHdPKkS1@C=(xx@sorF7k?8oyczk+SpzN+k`y4#N+-xjfgoIwRO0|c* zPI$>C43xqoex~HU09C(65++TyRcSKl`2$S7W2-_{fCW5SpwdBelix&Pq<`#Gl-%?ML7 zqSJDOsj{@*nBB@qVG5+`-tN}!&g6o&j@I4ZuRn75-!pOb4W_@jaGYr)=>+6;`)U9hc7TiZA zhb@_Yw>M{=YmX^|O#Ji)h>(}QbaF7b9d@YQIOd^t>@6j=rQr=#D*<0v@%#K!k5G=H z(bCDC9rGYd5L3K<4}~#VE0IfzOUB{kOtn*4r3&A(R_r(m<0@bY)yCrzpfZ6gHiK>= zp~9tpgWrmP5Y;KW^4$g8E#z(ycS{L1aA;Ius-@xJi$~Q7-xLw*%qZUuL2YKLmQn~s zG`$G=njLsm-fpgGOl}~|DfF0$Z*Cl=49U$3b`Qi9R*2IeREUQ9h>IcKxZMfG(o3e! z;JsOono(QA=0Wv}_)hTw)snSSMtHBTx2M-aI=eS>?Sm;LabjPAcU>&~8EC!Sf?1dg z^Ch-kq?Jd%<6IH6Ij){~vb(RRHEtbUa5d$=qt>VtNHTjJ+i12f1(CT*b4MH9 z(6DSnZ%1c(_r(-e;vsnUA&D@8ZZi)Jc+kCZYtu&9u-Cj%(4bZtj#datHgo|l9c_4V zOw0o(XVYw9!w8BNSnv^!GoLZ#XV97-$ABc|MQKbNd1{u2IIQiAwZ`#`j-wgViTBjP z#HQCFmYPHX%~)I8n8}>tie-le%~4IJH+KTt=$vtAaQ+=*pe6Dn!a@GJD2M@dz*&*9 zs&Tmu!Va}cH#wVoEgX5H^DsH0W<8!2Z4mxwD|E9C9bZ6;sOhs(a!1=?$eh{qY7;Ai z(+@)stNa?LjFEb+JamlI>@P#C!wyL+kAB0;%J}qyxCtMJfSt zr&a|50kyi?A5_Dks%kS`7i!2~?XzdmNe%lw)plS$ICsV^(Tv^lWkj$#r6Ra-4eY6r2hDz7CQa*W|XiPFDmy{YaN@f}rM!00PY7kXe+a(T?U&%Mo zC?7s;{ER^!)tr2hvyiIAFkf{{q3TqcH=R1mscRO_UDdf%J&vmLsLBoQsy^xnQniYb zYU&PA$0F)Jo~je6T1(Ys=1SRIrBJnrs_UtGB2`bLYLu$YREbl^W^=O)12YWPQa%Xv z1rjMTEBlM2Vh}yYdEsrGzrTnSOH)z#AbEQmmqSN(Y&X ztG@+>d3@*3DR%zy#m=9QOjNDvfR1am;MQ%DS%fdvs#3emHg3`?9UIZUzyh4AdpB82 zzEZo+e3^;4&dvt;#~r~Eaw*Jw$H|w0J6^dQH>T7p2)lyt$nLASu@5rPq9yDwk=?9x9g}K_oy# znlm&ASdd-!U%!o~bWh@5+3~Pf@kwAenn)VK4F?8SO>hBeVPDP5K}-x%=fz z0Up38Hr&n4hbT|+C^gbkGW$M$up>$4z=v0?53k7VHF+R0H99ph)rH%uuglT0fk+vo z^ae(7q~^#vD~lc%osyX1K?mo^b0JJ@INU#B6m8xh({y#kVeYf6qX+nX{rdH5Yei6M zTKod3$k9HXim~vZ7mxe5cZ1bWr**?7?WS^!0Qcvn*|iu_?*b zOlRxp>fX@QP}AAjeO7$T0%oBlU|RTb39~SVSVG1$1YsK5j$#gye^BwmW2}aQtJ0Dk zgJVsgwHrKKIL|)vs3Puxu_lq445!qYjVV(0=_r`fbmA^6pNMeLZTZpU&Cy?I6$JOC zyZdssYICOGSsT|H)N5C7X(mxi8#&bc)^3<7^o$>^S(bbKA#+31Dxm<#6lr(Gd+UxK zWhm~*EFIaYxDWbj1=JwoqwB6W8Y~#6MUZuUT-8TWHuORZmztx;IaO)3B6Vl#eOglUR@tuLMgku@}&B5^Gd>+9?_`+7PBd2Kvg)K*6FaurA&TjHLJM%s1z{x?11?>rWLBMagUkD|NA0W7IaT zUc0JpeI07;-r5=Oji;IxDgr4Um4G(D-zuyfd(vt_iN(iGZKST4qPsJMtdAp!91yTE z*27OUCaoDcwQ|*gp8-9Ajdr3ome`i08(Kv#p49}wydeqm2ine4NfsaiR>CQ*{8_N> z+Qv2O>(;DqUVrM^x@L%1oD;CFv1ToX^5P1-lFpuNG?Ti>h_p}2nNyCKQjWG_aQI2+ z7&luTK!Y@y)RykHv&mMYx7(U&i!(3wwT!R;z8X-WVRZ zwD)#{Yw4>$F}1QlW-U7w1~{^d*dd?|N(ucVN%?X}ytg#g*V~R^;@IYzZs^%tw|4hH zGjU`ON>yV;0JZC7vf*>Q!%k_}9hO+AnY2!pVWZY<1ZYA(c8sCQ6{J>a{D&GW79M(lQGiEMi$H6RA^w8HBpqu#lZw;VNgV{D-o9i(P3xIm-Dh>i z+cw8n=LkjdhPElAn;l7wCV9{)d*YqE={28;bkN;h3Qdp zVLHqn%V6W+E!T=w1Ovmic+Y$uHs9(ICLb7TyW8S!?CMr12eI={q9@Y%WzdTjmW>|? zG~XhH0A9vlOjO-e8|zEPmmCZ2vqz$mRJ7DkBe2iQ8CQyP-qIMg0gkBK5GY%JEO?AI zcIlSh#A8Ws#5gzV(Yn^o?qs}7uq}(sRB}kR&T&q_#r6H<>sj`qNizq#wDko67m?|ey zWeKGWkn9T}#8toDM+)=1`W=ehbeqYGWe5CqPv45^sFFK>wewq~fBMyA z2dO6Z^1Dg@Wbhsk-b3I?_Q!;|g>ilIwy&RcHg~_t-E+A6zufI7+}kd^^M!Yz@GchK zrNX;RcvlGTap657yzdF`N#Q*uyzdL|8S*0{Jxhp`$6uclq0bX}^%~O&C0!PiY=qRs zBm){4Uy)NHEs{*ss*wECDtiQW*CbV664DI{ZMOwx#1ge!hFvP4=1Y2>-g36g`( zsF9q+QMyFJQ|oJaTFzNDl8d+|*GPH99gj(FlHbVV6iCEaLTV*~M?UlA)ysfZg+;}A z%OoNfl@xHRN~T!&`zK%X({!Eo9Z*>qm*@7OaqRGZqLVOd+(g(~eh^cU+6h~Em*-lxlSTfY94Km-b+rv(tRnIp$b!vx@=x$GCDQm9h>t6!s3;^n^;7eb! zPMr|aiv^i1^|G_@JiDgov>ZaW^OdjZ(slwUlI^&_7|k0P+#PkUa7ruk@VpSkG>ZWC zN?bgew#B$7={)B-jgydB`;+PRjc8w#eueZc*Z7U<;)0ldd7` zI`|gN!Jc2OnMhq!}5IIpCDIyqw-Avr`Bx$#2&~utJci&vkaa#zxg>abhak-Nu zCRp$jWIT+P#Hr}3|BdJblE;J?SI7!Zv zOx3N^4^*JhgZ%P9WvfxvKd;p+yP(xp)<3`1Ue>>$)d6pLPzBP1K&aK^VQ|;TkAT~# zJPPhw^)YZy(w+pjNq>gmDIw25#6$W$d)Xr-TDYQ6>Mz{K9wmbbFRr*gMj%0rJwb*B z6TX;_Jw=8RzNjbRN%+yibG}Q0DttN}7`T7iwpN`z1JQ$k4P`$dEp%H!2e#Z(=#L=R zQ;lcAJ8{I`dP4VU3$FOi`ZBNk$>k{12?f-^A7ui9RR%wqO8z-@87N$?!e z{1x*hq!xPvkPIWq*qb7M2j)K^lYbuj32Cvn=e0`4$MNfpF$cZGfM1m-2F6~!XC1H4}g_qxv7A>`&-=bA2xQ>1tgnx*a zUDV1mBQ>Oa7;S4-ZrScuz&msMPORSF^UE;&@sEIx8uPM06Etvb!y}Z7p{;$wJ9fA9 z36O9)L3gW+u0vsjF=BC|udxFJSrMf3R}x*?qOMqqXW#7^dvXrE5_S?KxKkFKVyDba zZKAh>$mmroJ7xBmys42rE~j{4BfDJ&COFifush`4EoyryyHnn@b|^vH*Rs2C;W$r& zgujEV<5^j-re`6oYY2IfXCS`@-nB$|TV~J8(UZy|Cqct`QI0mPXp;Jy_Oc(#gVD8# zwXt>VC3q@M6erflHn5lF!NkUBQ=%zx@~qe?>=hZ;%lYTXsnBm{rMVdbW zY3@PN{5f5gdkOoCMVgP(f%g&i38zk?IaSF0qL6GvArD|7T?&jutx(3#tTKKk%J@&2 zeJ)48S{C^#6z-py!u=~PLfz03$y=@DBTyBm0N+K@ExS*`3mNB z4Uw)?*o6x2rigI@&CEwy0RAEo$VZ8E;Kd@4j}g%sFhXG9B_fcI5YbsMK49RbJTTG< zJoa)WRYO-QRw4GVtCRt&5Ld%fst`Mrf$SRkmV#v%NSEPS{vK_Mv`J|aUZ9wV@Ld~+P3$Ytgj0W{b^w= z(Hrks6-)MJ?;F$|TUssgM0Za-($OPQTY8MCba$V*CDy}@OgVGmoC0L21yOTs8Ccic zvlMkMKDLCm!6T;PYN$;^;Afp5ze=8PY^f$Xy4q^G&OY(jWAhqVeC+YDIjDF;{rF=` zqoXSs?-6IDju8u7slZD=OOHMJ+Mf8fj_$tXF_uBBmKdqVsCOq4$#}1^wI`m4_qMh# zJhoJm@%Wi|#%tDLqGvsiMfd)wiBPMJ8%v=&ajD$V%ELEoZHx6D{=UmGsk~1kae6LO z;_JfxfUnv})hH^J3i(y+I;a3Y=*X@s&Fic7_;f*g&Fc?@y+*o0hEZ2Q7K>4RK3~vG z^DosK@>Ef)^Qgg)H>~B5oXj-w?yC z3_cMcq`(VR@ET1M5`{7h0MRp(Qc zA4pOIcpwSyW`?P{h^i-uyEX2#qA9fW$rY!A;H%p4N{h2U4_p^_-Qa3UL4UqPiU1ZQ zW~D?@G+Eb6FP8CA{kZWHP}L45=blES=`-Z=Su-oRJBPc+ad#ef7jW0hT|ak&+^yzr zh`S59dpvg+FOh4OPOs(9%OG=&P-mWjr-vkB;;|yxh6j!mJDwm?9W|1JXnA;!NO$7V zA&I({N<@|nH(u>A^Os7BEZGY1B$B-lR~j6Ab%N`OC&hS_$mz!`%AI_k)qJ7S~`NX(l&qVME_eTnnOdUFCBo7M~+wby92`k~bL<%arP^zf=d`8Oly zR2;St3nC3o>((E66osT#oipq3Nv*08DFJNlIdcvVTf3pDscsDix6UCqbFcCU(Q;m` zf%ym}@!qVt%SV+6$z<&gTau-YX|v= z-#Y4nM?l0 zifjlkfse;ClIk?7&Yh4M>fT}E*z6NN4 zE(Xvgcmz>^)@;&tSGoaIV@s`ri7Flnn*^XM#C^aO@VE-kHLl*I547uS&2sCAT^@Xh zL2|9uxjP*L?GTuRz`pX~>^oH^8y9uqsYnkxcwS6_FiYFjsiQJM-0#U1Q8^=2rD6DU zeSwZ7{aEoI42K&%)&7MCe@JuGbzhFNjhdz48(c_mpwkpbTSDDk;ts=6aOE|}P@)Bg z{$z2b5&X2^;0VZM+}u`W@`~eTRzA7KO;Xn>2 z(yG1Qs=)X|6|MBpMH?{;O&h_&5001`l~Y5l+6f@Xe5}wF&lRm*hZD5}M?`LvR--jw zSoW<43bO}5rhVR#lgmEcpQYc-#?4r9%3J3mi$=}@FtN%bXCPwpQMwrkId=?EI>f}@ z-rd<&A4@jC3^8d(Q)Sk(D+AAoX{IIT{MyDYa44xAt{%2k1M6OW(@5hHv*C?t@VZ^igUkO2pxT@ zNvt*KJY%Uf1mm*XI(Q&SJHC&d5VQ<;VJZyTu&T zI&thjaw1ThID@T8M=fgS4Q6e;s||XD2uu2ooRH9Eok?dDre#fB$51kUWI}*vPag3k z5~_4Q+kig8H94SBKmK4x3W}WD#=-zH(CNcaO@e*QIdW`^(WKWaQm3cwS@G=MeZ7qd zVa{!=$ER&g*l@(Xyeu_R3)l8^fBoz!BUw={Qlp&-G_4j@(|g>J3zdd7v48SLNP)~4 zW+sm!oir?7sS;0PAgKkbVvlg<_Q&JK9J{8MblAAcERMbbZJ0l}`E;PUVa>9-Q<_&d zF013~9vH)gQ--V$3NY^ZW2Tju^1z^hEnypmkTVt^IdP4QCG*?HVpBLb{AF{|{%dv)L_t+C!QC>`zX=8?uwuNI_DG{~H5y6J&__L}Gc6n5Fss>~arZXwpu?^h`du7)d4xJ z(X3vk*W#jTvN)GM%irdF`>}F{hIichS+s zMDw((u>FCCz zfNlsoIUYL`_&#(&5L$g>Vl+82QE;psEmxA_BG-a3jm{Za%MBHolgt?K9T~-bR!3*& z`koHFlRAcBG7DP6Av5U|;}se-MIa-EpbZEkxLDH8Z_--d`Ep%jSKL{%=F}`UTQnN$ z)BCzQzSbA#R|sM~@f7>d@95&kYFm42+S>TEtS}c#acnfVFxEXIJ&D#6;{5b`;RyM8 zB@6*d&9Y_cnebqAS{R4M&c3ZdC%L{mYg26PShM%=(IuUgVtN}!ZrS2aJ*O~Ue9Xym^qgCBPxdg5DAr2r3X;5n39BB|B0g?L>jbcHn4t*cwFH`T3f+*n7O>ejA8g>4(w zE~{Bzw`lBDdGK^;l+1MNZWQ-8dX7FJLW*`TUh2Afdw}`Gw`^5fdx7upKs1DFZ;SI| z)vKYz*2!aC^d@dMw=gB!)+7?Rpn&rUXNo$44k{$*O=ZI;Yhy3rp-Cuj?aNPct;`!T zDK9?ilymBtUjPvr2GtHId;SO+yWCT-wR>w{C%~>sPr2P#QY#(ar>WI=^6*3EL^8CY z^b1sZ1e!p-(z|7=!xGDR0m5T1zzE#jSp?=4>r7qb7aT&xriPRBRY%Vu}3_Z zT9%+F+TICcPid4cXINr>5@%EVAurV!ITemSn$$;j-h$K+(S)l9JU#!>@f5!7fa~`o zPXdgl+d=aO{Gn>i=M8&&sy`46X#sCI7}R{eU@)M01J%K5wJPNIYQA7N6jnn%f53O> z70;N!u(hXSYp;+r7H~xxB8m_AL9$wKz*b@$`flyVo7VuPg1FAn1_Ndh!Z?)$2g{nem=*S9S-k*dPsDo3{D25EYL zn%Qe~!BE&|Pv#^Xg4*+igI+X>UPY~O1-H2UKFuEllBl5|s^ai^fC!;LAn3?mRR9!# zI8YpaD4I{C^5q}2IHHEbkh~XY37t*fCh6r9h`y+^SCEs!W!S{G?- zs%y@gow{ox>+71DGqcjtLq#t4XwA5KU(%W@)>s3W!`d6=#X(b4wc>rnQDeE_P#i`3ibn($ApM74c<`|;q9@;wb z=u^l!LS|YgFv>k9$_L_RmjL9?dS@#}4Ih0rR>Jo5fey$bnaX0(v8Bh;v89fflzSE) zTQV3qFD>(;U>!R8goH$HqFlzi#4+HKI%Ko>*rKM6;TU2BF88F$)WqMZHJ@ z(nN;Aj31rL0TbjCy|rH=k5Lmg(}$7rfPU*5o0`R(;!6}J!-KUzAm9sw8}#{7XR5Ry zAGrg;YF`z&;b2wjpjMR^MtUt!<$*!JDjf1zr>v?1FkD-wth8X2zq&f-6q*(YRf9ZG zRpk%+z^w`dA=Qv4>!?^T4hLU-FrY&=A>7e~A$r7p!O_lo0Tn!<;DpSV5wmpF7xYz4)`(%0$R&1d!g!)h zDw$p~Yy2d`TM{ykHxlFQrISkAOKnDnafWdTDY=4_Tun-zCnY;%<0e`Aojm?`vTj$X z&7LQ&7ur!V4Yl#>g+wJ2h_;7NnX7h|DPAp99eBn=cH*T%trXQ+$&)E9qsBC<%%HR! zZxSL&D4q41t$_}Ka<+mQhPU5zDAWKUKq5)!`XOkQ28dcZzoiNpZ$FB zFC?`1VtBrk(2~pH{Yqk9Nn|?iDtNw@nAhRuNW40T_XcmU?hc+wU6i_7sOuU+T{l6% z&G74{E|nHvN$?t^vWQ<8R2~D$K$g!Cyf8?WAHwfPgpPj>@_Ye)FB0nbF@(JYzn9_n z3jCe`*muBJDFwRHz3|%yzn{YIXAt~z`27NY@4@ev5dGKS{{en~Bxa**{t2-?jVgZz z=)Vy2A$WB?3D5t4Og{&xe-f(x3;ch>?>~ThBX#``b^RBfwo%s?NEL{G9{j#SmD8zw zxoln~E9Pv)yjoUi>CNx~NLG3)_;v&rLTkkCWO5O z{s8>;!SgS`|0PiNw=$jh0sKCMUm2bF5qN)q-yh-kCz)y*o%k1-s#n45ClEuUg&wLf zcsc;TzryctG86`W|Agljs!^)FMyU2Lc>6CzzgVFfgkGXhY=DpH}I)ZZu-t(T;tjgoZSDUw>G!r!Kg6$k%oJnbu|OBG+0WL4KYFD68x zFkKufmY`=!c zMUr$YKB%NZ+Jz59*KY%OQmo&Oo}}NwJ?SoT{xw7^DxOiHS3E#2R%|u`zq`pjnD#K~e+c~IM@j$P=s%9WqA%7fUIjqA{R#3t@+1VP#T7r{F<&FE zlQ#%4_1$DU6vOr|=^r4ZsPtDnp`yk6N&jz%RPh zbK$)wyk80L*TVaa@ZJ~R&5Ec1;oT~{oxb0jGMRrp z!K>>Frq)Q+#Pe-+c7kg=E89 z@V1O>d>gzPa`J-^c!Jz`$~)j6FE^gL8-kaR(+1#mk=*!|`v^DSbUNOPw?|0v6hhRH zypu$TE-R#N7m3Kag6DBpC?+1hjm}*r$;zhYuWB&DDw|?0D|7UYYnr~~fWmg>3!57| z^YL6Ry1I-mRd(jHJM(uBG!S-I{_eqc!tT!BJ=89$Ud!Rj^-NCKMq8$}9Q1B>EV~&J3$mfzr345GG3nPWn z9QFh^YKOOc!vOa(UhIFBYsC~M^j_!BiE;JpO|Fhpguca}6XWaI04bM*W&llhK>{CQ z0w0m+gv100Hgphh-bTDXhVY8L75k8a9}~8pLktu?hmoaih zxil*>MVrIUl`{$KW9Q3*c;#C`EvDNF@M`u2a&&5BDv;+wIa(H-R#~%R8sVBQFXn1C zQ>DFGhSJ_5N2e#I^BdPtV{;Dhd(J@Zh;)a{?vgi6A84P>?iT4RPo;AYSFxE&=ZBci zvohWtg>)RLbY9}=tdd@m*(>s<@`3hp_Nqu{bt;|L_yuaze?Ji-?Bx*}rM)uysT`d( z5Sc~Fhwr~0(satu5~cvi`>(0}CU+}$hYVq4EgYoGoD zc-dB0@`sJ!}qvI0e9@&P*efE6#gz@%g;-Mv?zwuX#T7p2IrU+CG zrT+{|KMpJZ3bd^AZzz4agzB5iB~;%mTEM@70^7)c6*jC01h-=`&yvptDt%qKKxOBu z7|z>TbY@~^A`}TLkkfW`sC>8x%Eiu8%ZKaP1tY)~A{Y?mLUky)*F6a}JzuO^xDIer zLzk$7_3(M{`Q+Zg7PaJ;!^7-yOv>E^AFot79SS3e&Ht!ZtL$o3P$CJfVh5m~O7)uD zRIkNUcUY-v#hB{1If6H-oHRfuXgcFzqOJcN+r%yvwV$YhAn?sB zk|@uUkaR!MzOS+;vx@b7ELN-TF2{2HfPZMw6P^~8bG09;EqXcGSr1?>`ttzSqC)}S zg#tdR4!w}vH&iZ-{~vh!vC4f@7xaW7b2A<7{L0q0YHBejsjo70YrmQ;9^b0#-4hq7OhFt@D!GkdUmD88T4Gv zqUS_KN-9azZYyvD^i^6qC{hbeYKInGwmY&6DKuGAb^8Zci??biRYu<;2NJ3|dIYnTfg{X?NRMG8(QgD~7Oty9dLH`A^ zua80!mAxTIqNYjmW{M;#CyBz|(%kt-k|88Xt7_3iWdoS6V$ozMhbHf4(?nx?1Whzf zlb>nPlaMBy=qCXm|An@koPI623237=p>~Val2$COk`z5fAa$)YRfUG~IuhuEbVJ!m z$Ooy0l4>F!XzceR=qY`a)y^ayrTorSSbq>-&{DyIPN~Rmc}Ku7f^;DJ=h z9@M!#^z|?kct~H4_TxZ;oDZozo=WX;k=o-Twa0b#6ps&)BO8=C>}iZOOSa1KBOdD^ zBK=5b&j~mX&H>Ac6vWG^bYIrls}{sYgqWRzcq;|*md@U>AWlYzIjTd`-%_!W>Bz8K zDf|o^SS-C^rLFe;a$P-*q<%H)daZz|LPw@3ft%>I{O%*DEmamano?mBsc;$ z8cb(QA80Z70A#WQx{#@Gpc4{Si^&J$4^W8Gh1i4A)~9;(lopeVFQ?9moT6abpTRK8 zS^DRC3q_RvsaF6>ZZwAQg&sW(k~)nb;BX4?Tq*#!Qv_reQp{j`TD*go#8>!hiS-Iu z;z&ZY5k{fVb(PFJ^CqAgLHnxjK z%UbMw!gvR5!Hc|eaUOOdvaUyHN&NRQC{AB1N4y z3HzR)4oFl;9hFn(X)1&(5ZF*)eufSeP|g`RgBVWMvmes5*b3b#j8~A4(^8!DRhr_Y zZxQk;MZJM4S08vmnxj(bRmxtc$RaIK%Hm_hnl&Krf0L$p|J#K9gl6%6=xl&4GEa{1 z5JIlx40k2L%-A04E*+_J@TVzMkgfilMon;#b+TX3-RwOYjVI#lmpqphrdm&WFCMxGKd`r2>rREiC6>s5Mm`Aktre+=GOC2EB?7M9qZxIG+f)Q8V9u$Z8;B z;%X62P|Ag%c!074sd^Y9?615Y_OZV~xrTV5KC`0rn|s;kbTAqoAr4lzGf-`#;eG;x?=_-l zLU80vv>#)*cVgIshGoCRy#uhi9y(~tUUq{a`q7|erxfjv-Ymj82Q53LXn%C42-`Af z*(pW)qj!j~u0hLADcT>sM}&0`T6Rj)_D3~te^fK%iDwNDYk9-N<-^0l;o()o!>z-^ z5X2raV2qisJ2kyu2hu)iaKU+Bdg25xtvZeeW&K;N0imMR1_5^XIdELa+fRN&q$iF2 z61`vzyfY0hlTeb>s+w0=wE=K%h9M0p;(ZR!i)en7PCz~et8`gtaM z&cI<~AA8Y2{;#>KIsgAXp)VOY47?2PN5p)^z`2&~rv`h;KvP2=M3KD;TrlyqZ3R&i+u=~?Oq__uMPg}K#~7_5eeyssZ=(y4~-VH@=v72R{0QVF*YcC?(};D zmz|(ZvQLZ_mF)*7(YxKE7GnkyZ2NYr_pk$qXy5htJ`Lah%83iF1qIen6D>vv6y~;( z?Xg~$AOPt?B7Q8EO<-eZ!mI} zGRKXoD2I(f4B%*gmd*gF@HkLmyNMaVz<8dCIZ*dHK5zb**v~iF`8>>lYF15lfjNkS z;!ukNsau3(yU=XW#rxNJ^5>f^4oKe7;=ttJfaK3JTPTi&Ex=mF72g3N7eO2>(WT}f zjs(syvaL^u;|h~qY32@IdF(2)B~Nq`7`(2Amq8e^c9<|^;|3fP3(p55^(;%L=^y*h~$$pAqt76GyqlIN+8`IN*Y-ih)lBlB} z*&LOX`~y3<8U04&8_*-(G~ND@qv=~F>h6u61NpygEz-V>2yZv;7dg4C4OPjK=5gOT?dVRZ&B0+)$x#f3w=)-!XSm;KvCXJhFe} z_Kz((`y3&3-VXl{ddNSaXJ7#D8~-+E)sxd&&-mv5=x0l$Lh2`yrb_1$oTzRmlDt?t zk4UO6olhjaRPw8art?}q*T&}(=@mHaMHH9e&b49P67>3I`CJ=2-zExl3C;t~m6c0v zI4)df!+C{vgNh*nCloo*=O#y8IpvOc~ zt!`ZHe9~624aRFIEwYLq*nlNcUhU7>pbrOdDa?oaL^d>WXA>I|I1avM+f-t$oVAy5 zUBf?t5Rkb_*xML0sMs|9BV?vO7wtet@xhu{mbRLFKKXMSpHKdrHwYQM3uWa!8#V&< zmp1mE?T{16U)uOY@>dqbS$zFa`;CqL#wHe9Pv;D`QU5KZ_P_LZHuhWF0Is?s66|-j z=qxDaESTXL>;qei0c1jpg1;Ay!mt{}M?gRT!#eu|0AYr|v85Jik%!&{ZR#(!gC|mF zh=yZ)Vq^P9G#ryL8_Wz-b#cHZris_57@U}_-7nbkU$IT|YWf>?0cZw)2Y5c;`V?!* zrMRs<+eE`?ARd#`$5BD0o&~ACzG)XJ|Dt^tZi|O?n3et-XKNqXQ-kF1W%7~T8Ur=yBRjj%vFSF#ZgQkH z<>BRzcHEW!vwaiSJWtwhC+siw=g24V|MO_#xo z?jng@B-wr^VV~Hecap@NFw_;*W85c@Cta&is1hdfNaxdK<8piB#KS9%f@`fdlXm3tl0dr0IS0t5Md4p9ck ze^CnN8HD*^2Ig5u^gfcf4`Gf+_H+g=Z6VA%8JOLU==~%C{~sW@@?vd;L?0xH2MOmV zXpuef5UFPaj_AWA@i0jTJ_3R7I-;6LAfgdLl*qLNb36fa3_*^+!W@5-$?<)MfD?4! zSvoPxY&0PL;#B-UWBiXZ@jpq$=k;;O_$T6e@Qc`9cI2hn%RgkYBQGUQ@mBL1k#^*< zYx2^mUkl%}iqx-xjB`VtFk!$~HTdFKFQtq4ADO&#P!V6sW3Ob2`06M{d~;+GLsk*r8l{K>qZM%|yNG+Ti@5g?Mf~ZA zB0fb%DPv8#jGw2=I4qOT4=Us5dF)@AGX8s%G7gU{<3g*9=QbM!J^?i@oIm*PUyLs-V^oO~OQuSGRV*EwJZiHHapZ@! z{*%J-d>0!|VT3rI>jE6lcUf5H19EBdkzG01?m}!Ya1E3X7a^J#xdaP?z>8hEXkP9* z6q;AMQfOY~5=bDLb=b>Dw;e%86KUW#6%4q`5RlnIFtxHvwq6 zelJqk%`U88i1b|-He_61<#l{3!ilPdR=(2(&vW;}+w*A8_)fwN8t-yh95!7mxJYz6 zVlFBM(Z3_B$T1YOM-+KPM|i-66ZGAl0qkRYMIU>}l^Oro!>+8zd;u6YvmbF`AB4^) zv&UUIUD^WSYs62uuY&u*Cj`49>p8OR@y!kZ!F zAEOY8@?1YhSeRxy0=U7SsX+Fh?ACLo!u~5-kIufZT8}PT&$({*LafCWm2dTGq8`t4 z=f*zYZNKZMWdsDpt~W+=6Rsf(kdfmy_R-XXTgW=nskhBR*Gu z7Fv={l;@CX6Xkh6qkjQflnq;#UMwv~22%^o>NYp-A?#syxT7zU#EZl_E+yUNW_P*M z)VUTUIZmBD>>eb}fS~JrZs4c&3NV33aC!LwcWS7+ULg;-tw9ci>j&KKO)^aBA9ZsH zwN*5zJZvA2b5ihk{;e%BZYP%Udv5nWjPi6&6vrgo4mvo>E+pe+c-STfyy)w=^yMDG z7EmiJd(nN^e*co&J$dBV`ieV8?sX$GeJiJ?+1u_+;~a3ii?Ian3Y0Fivfw*fd)+B% zy%jM(8Hb2mFb5Lnz0pg`eswS%e{%>r{?6^biU1bBcaO@1uP+EeL*3T}c{;v<8ZokU^ErCrv9{FbiP>r^ zM?|tApwQM*k^{CZ)*EZUY>qnuZrM56GST$zzFzS1&g$vtjiA3DqW0eIhj`QEe(! z%FF^nl_IK4q^g&yKGO>k7f{U)Q!Nc|aT$24l1fS*$iRxL-$``a`2KvN=S}G^MG)IG zd3yPbncSVl-3so`o|ns$7fqF5NYfO5}XJ z`J~88CA?pbm&YQ+sS=dFNdemMq=rc)T-9;rXx8WVdSsnWJfO2x;tbj3Cy9~b8%&VaEJLSUp!$n~tVjO)~g0FR%Ij2S~_>Xh5f#;Jb< zlROYHrKplnE&^09;x~P;I7=b5D|l+9(iJe<8 zu?iS=bas5S2)!wXh7?}+f(FA79HEOTr+dgeHi5T}nI1h_w~Wih-01<5FC-T{Lx1MU&Q&RWk+_lm%i zA@EeoR0pQ6xgqd4=ye90hg@hra)^|H41-OKnnH#H2MuHx5GHz`hmO+wEZx{3!(~j_ zTlUOTz3_zG)|iU1@ZcEvbxlo;P0jTUYt}c{*VQbmYm)5C)(NBT(EZjQv03$OZ9TYW zr7~P}aE8#Z7L66TQA$X1*xn?wK%ZHsxM_pm@}*j;xS*`XNwEp54`I zM|P8TjcB|F3#M~N2&O5N<{ylb67q%%G*Y5ywi5d|yWtp5N=a#6sk77= z?=&VFlZ>*Ga$}BaCtSP(Va{f^5f}yVAhw41SOYH2S~HyC(5Wo z$TgM9)2KXyx@S_kg67Yr?&GLjY5Ei@2dP?Zx)iF0&@dhFMDX-{i8x);`wNM)U~c~` z4A1aS-6Nl9Z%E}laeA-ufk>17|N!_T!8_XNej753Su@6ASkG2 ziKG=7krd6VI}d2g2ZKWZM}Z)hLSf`P4nmg*L3Jrxy1QTA!)gZ-3JwSSp4zggwi`st zdRE7UPnqiUDFSg;;@(a#9`otNb3VOz)vi!lxgT(C+)s+-wQTk7fjSDZUt`oj5fje~ zuLZz;?lbvOfeA_zNR#S1)-*Vjutn_&`$do(TgMY*C*w7WyUL})5H37U(N1NjwrG%v zyA0QUz5-wMyUNKu0Dy-yqXQ9#GzUQR9ldx+qg=;RaBS_+j^2GkgNeN2E8wk#4}6MF z=K%VfvB9Zb0=+$b2vB92kt`!`l`v{aP}s#!92(a9H)AgXGz!=n1_=4Fi=madm3)pmBo zyL#ty@cGN)ogLfaJ!dy`E$i-U=`C)mTil=WPye1^M`_t zIPmPQws;$I?DTBi6Y`lo-QB&lvA!hm#Za~1bYjdgUY zKA6rrvT+$@$Pkj<9ZxKX`)&NV@nwxeNBxsb}m$Tj8h zR4%3RBq~pVSw2;!nPo81pH7t-s$h?XFy9H!wmjMCcI9)ofV)N99mm}X+?~kX$=sb< zPG-*HPZh+GXM#|zYg|W%EX?OA2KQ8x2WmFtoVuOA!1P^?$f}MEG=erWQLZKqWTXZp zgj4hhf{{+oNaAxg$(4G$C52PNd4K{x^{^`BsnyH57)}ivgmysanSx~k^PLAAgtC&T zQy8P;HnI7FYF;9bJDiP7Zg&8b;3Lmkb6*q?xu}S`ihH|TyE~H$+B#Z$7hoG|i6zr) zWb!lswI;J^(D?|uFb!I}U_%mTj!>EH3!qgmh$a1~XSuVZ1z#5(DzinY6wsU|8sV_F z#f2VaT+?jE5Jz)X(A*=Ul1AU^rDKSJxujPz#|jT!$9rVZEYvZFql^K09G1x(f$9s6 zSj84+kwYHE7YZqXfLHNXg<(?cQM{h;_(Nf9q-iWzjU4o0XO+d=7v{Ud@TF{08TzZr zJ1%t7i7@x2sPape6vgOQLAX$C{i>umpdTrD{V=a}a*bq%p9_x@Gh%B#Oby;Q$r1^T zSZcM{QS@3AX0)Xs*eE)hyhL?P3ODGB_A60=j!w~_ubNVr1F~BA0fiZ21H`}%X)qJ} zo^AI)J7MECN`kfORtW?tvI#xc$Lr#SZvZ2z|78cY>tMPa^zygx93; ztQ6p7HZf&(65(ND&Zh3>GiyCHgI1UVGiW1Wc+kNaG=(t2`*5go6j{Jxoi&@$)~zrt zNrr`4$$R7p*+bgGY|zr04eJ}5Ya7=@8kTQps$0fw!>y@XwXSacQ7mRnT3xedL(QsH zr#9EDTi39BO-?#e-7$#(i?Y##rh3d~29@THHoBogJ)|sq2G>+M-^MNzfWM`CZ?9kra3K(|9JJ-c?R|9jC%K&k0-PwS)+Vr>LRF?3Z z33X*j-i|JA>tfEKV`o9}bz`wsk}{2FrehVww`}b_dszmW z8|NCMg}iZ=_Uf$YT)NC%)fL8n>{%EotGYMa0H(8hGeYPcNi@l#HpBajif?+(sVMuV z@0>Cyc3D=Wvfl2pif?+)shBT!KrO_un7C`kO_~&BQd`&nsRMFjBo5|sXvhv;frkg+ zwljO;U+aTZ*LQ4*cZ;peLqy00#MIG%uJc&qL*}8ewc*^(&)G+FR~&etSZEK9EtRYo zm_%OId%0I`O&&usP=wKEg5#{{YvVnM?w&0;#Ng19)MKq@u1;=Nwj?)C%`}%-X2w+3 zov@mU)zIS&ZAVyjq#em+@s_^LPD_2Z#dB<1wszEUgBfiU9&tpoZ|#Zq_MW{Kx<{|p zhH+?n95*bI1!GwupOj7&{Q+}9^pN7?eD?uBAYUdoQG}Dgwyu1t=oYjPc zPJ2gl$L20H9)VwTrs|_F(d1iSIlQnCoL&?twpM(yMgrhOMZmv0x@yqC#IiJ+_8zo% z(%#+E@s0S@Lzjyu?Z^z7U2O}-GO%PN?y(5qJ*Vs}7#txICxK`zeLaE$Bd3La$WK5N zWg?`9xA~6jp=!Yq<%`@_X{$Rz~@?Sz(+8 zX>;0#=@VIYd30z%FeDsiuo3`yOJPb`6{zcKg|^sZ^d+&;a66pIBup3D5Pg*2R21oG zT!4{}oMhV_x=kW+-iGj53_b@8gT^~5^54kK9Rii8smt~g6}oPXFP4yxC~ zj5=rrO7Jau++#IhG7qgGRau9_^%nY)NK8G}xe;AS*?xfBJ%VOCKg zyI5Ctp4icQ+dCjBJ_8Jng>@V>2P#O5=4s(tOSX3;#$dp9;aD;pU4C~Vvw|8;ec-kw zN3N8XG}WE7p>Ey!=JgG$>l!ztSo8$6Q@FmaxfW*Qb!*l))T~-(eVI1OmsIN)5YF1} zEg+DzSveH0sjFMI&YIm@AS!YoC-%?G{3Sn2@?6v13n62g0Aw?Ev_6?h&^NZ|**F|_ zsjKeT*3(C|v6YRzBmN9%FEDql6E6ZC{NUo{#U^9HNEUJXsT1)aIluI8<-3i|9>0)*xbR|Tpx zugB*LX}oJ`J|947-l|Z*kA}*^0TnH^s3D&>s8&~ns?fSx733HU`GVjE1Aa9a^jE9l zs;W`Uw^dhH11{CUDoiYZ`1(C)0nO+2`ZZsu+UFa8s3Ax51p{HoqBnWTcPwbfd? zY0K4Gt8Fd+bMAXHZzc(g{{H{ZKcCEf=iT+(eR=18k6K$-U!~SnSJ!FPRhVb3y0W1G zeOK32*Qi+THEL~j19DwcTV3THeh9=MwKcWb!^~@1Rb3_Nzr!*>E^6zsJnGO&t*fCT zt-*q{g=*`okj=)*+DcDibMhpvd(#Ikdk3ks(JUo3G@A*9!-b9_n_ zj7524z27rd7eGOK!Rf{sMu)e{yU}y3Ox?uNe#qF5 zn0gNLoQql73@mL6F!elOUd*a`K1Q+~?JvOJMfkf6?XN)lD}i~g1_syQZwJ0#kG~u6 zSHrwJ@o_p+Zvm#=isU``+l{|_@wW$k-;dA7@c9I=yq^F|FK2nrpw&q%9r=D1sh{HS zXZU*#S$Q6xKgZuM@YlrH3;1{$TyKNSQU;K--{Jd*`1=Deh2!&ImX00ufB4%hlM)@K zUW&hKWM*6^vk^DQuIpr_gv4hhDP5A>nUb9D&KT8~>y@&KBuLMi(3gv*uP;~1n2PTi zl}Nd(k#g6OT?5%2N7V5|oq*KjB}h$PO4Krp@nrIQ%H~`-z21Lj-)XC)^s_LHs);Z2B> zZ#iVtA^RQjm+%fi-af}-zeB$3kiT-sUpwS`4*460eBU8|>yRHf$skbiT?zdPgshy2VTKX=G~IOG=&`A>)Z(jmWc$gdspKMwg{ zhy2DN4?1L@94F6p$Sn?eoar1cW0r_PpKvZnXUmQrMmMMzDEF$#US-Qb!zN6H3wfb?{v zl+Kn?WzEw=8c0$%%$71CZ6hfjNzZPQbja95noBa<=SUflRUkBlWUmzI_-;6nl&mzi%_6iUn3gHD#!Q!F@B`&YlKt{zSpk3v zST%Dc$vEcN88c@!&7M;t5q`)>OXy%51ff_WsRI=*fuLLrme>Iac##PGb)*mDQwWj< z4C{`76ju2AN>C>m1HU1Kb$)|T;&CHbf(fJ%Lg$-FZ^C&pfkBdVf~IP^iPjg&gocu` z{{ZAl7s>~~i!GmDEWAatXOa+Bo_wjyFO^ABYp*X~IQTs(2H}^yCBv0El2p#|cKfu@(B^@BpoM6UFp%paBm*-?Ks zhI~X0=8)i3IEOzU<1fm=Oww=ivK@%--@Yna@Hm9O^_m<5=-(?;667mo{0%$O5g6&) znEQT_`zW!=VtM_D^7^q%_$;Kjgt%Xc)}JRZ|GCV+5FVo0br$nq%KS^4$#UUfGx;w$ zSP%^t@UP^+NdHKwjDHJsj|3KA>AaTK!j4=fYw(lPO4Wce24H5&0b-p zdY!_rQ>;{LgoB;x^-6G5G(3vmpu`fpQ3(`A?Cn;|eN*8tD}fv{hm_;&iKF)-uL4z$s`pie zUaj`=ni3pc6dujrv2^FO{kzx75;bOA(}nKsvxd#Zu2x> zIM@~R8Fu?9cKFZZ74!uqmL5y&e3c;W)xack5+;@rOYBnBN$gUglmR`&6T4F7SE^QG zCkY2Tv8&YJq-b~&zgmqYwu6B9Gvl3`65Fj(absdxG3#HD^^0o2XZnO{6-`fli0b}z zHFiII1-vdG0ka6VK-?0~m0nl*n<5Nd%g)wNj~LNUA^z%->N1 zx&B%OAQzSV{no76lbEqNjmoYP3lxR7&;?pFq9)MNARsOjeYaetc z`yZ-k9|39~{bohHdHmDzRVfW_p0TT8)U&E=3(`Emzf>(dvwD5jSgNxY`75FKpgg*$ z9FPnCwMc8gUn2=T!T+gIvo26?)|(AxqlH*_(6Ktbv5cRq1*VzP=!P5Lq6MdwhNtoK zw7_(8del57aIAUkHvbHaXR8*RSsI?n&({L8%vl!B-8L=IL~s5k^l*U|oK+N_#V^(Z zv(4E>ImL7*S&Jf>ZL3I_gD?I$P$n?suF&k!>}oBL8klR&jrRNJ$)agpqhZs^rAco& z7VnLun&BobFyEZNBkNcUd5adDUlN|rcWJTSE$}C9)dJZ?RCgKqLTiFE4cx9d)4-h+ zw^vLjRCf;x4EnRBhc&9Vhc*7FCTe7X)vq7ZM7{MvV#O`QihEoOE-DQ#;!oHG_LN3N zdYpNjd3>ytpLVRMl%Gu~mY+Gr^4y?e`FX5ZUZi3C?T}3;tDJg}W?7W_3u*MS-^?WfkY_*(oY?O_5gmSs`6|JD?WbbOqdB@5 zOX)*VN~@#~HU5!ibu<14EpSrQe-eiInEdAB%1OVN`u5+2=RE1}8s}J3rC3w{&;m2f znHEC37V8&Yp+rEG?{r;5qTyK?1W54TB>&%7{x41T|359Tw8Xy@SviP> z78Rv+E@A4AAf^Je($OuRF2qSv7ZEPEBD_Qw5nkm)NPzs8>Vc)DBErk{zzTCkQ8oc^ zUa1FHmV{UGtMynS*H9t_IwsPMiQH@_a8@t>@f@!R#N z`91U09a*E%>tZ-1zi zKTY0*ij&Fc?FF519d!#t^krR4-~xa472TQz0~qtG6r_+e4(+45d{2+5n+lS$q1!-u z57W3EfF5^%{GQI=*R4sLpoq%)krXrQ@9cCw(1UqJ;k=9%8mjIDg%kp z-LR{F7a_iXtOtUNf)b^||ELcHf@aWMEwDcSq!Y-k|NGcI2-fK@)@z7>QZb2U&EHHo zl%HTS1K~XWcafE%Y+~Vnpp(~boU%7s#_au!viHr9?0sWp?;9(7-{}0{knH6O4FSOw zJ}tb0Z)U-kqHs$*f9Erizio`4&l2*tjXC+-&Jy!?0ZYo?MJ%4bi!lu=e=GPUn9M-9 zglnX*mEuHOWa)v>`EKFz5J&BXYaU50BF zFJ1U}iv><1XTK>0{HA}K7;D}TA!uos_a4s9zl^`8(Qv(Qm>@!b!uu@PRupdI9}o}Y z>H5zj3eDUx*!*b{$BKIzfHVFTi<)b!Iwu`|{qa>UvA4(4CiriQ@f?~2|BG?2kiu=^ zI`w9Q9HRa(^18*C&$k&ASq|-swi{83BD98IXaw5LcI27H-iy%3>47uMGt3UM4K?yh zjKE5BWftv4E{i*M(s+Q5m&a|^23pJ(w7J3vt}LZt$*|h~CILSmI28w#_*_8qByOkn zSRMXa!`Z=HFG888#wQgVsAEvIv@F1y&m(j$k!+XQWpObjJ-5Ui4S8-%KFt?yq1ey`ylN9b;Q zjKKH-vAVyX0PKrtK);K+?&Crrc$)M$0nv-8K8G;Ao-%@BMSvT}r;R{1tzw8Fe=mrA za1 z=}m6ab%#&+P{|A@rkEt4Hr%J~nBbQq@LhRSsUKbpEJ6H!;t|FRM{Y1CrH+-BO=32! zc4@^f4AROZ`<;&WxZH{d6r1)+`*$$eqw`3?3B(mS4(83 z{_qJ7CpagXb^2;s%G#bbV#3#>onq+i5dv_%T}AQXb*d$8eS|KRDBWrYOcEh+i&4Rn zvPdX(8aODyc%Y(Q@;6lz-V=c$G?F4)>WX{J2(`9~=m?>UAiXpZ+4Q4jbC@wJiLtKk z?%^2ACeg|DZOJJU97pf8qfdG80w5=;gV-$~C)Vf_TSU5vExoOEd2FRL<4B3NugAsM zv_rM5_&uG(Ya)%`K2AHj!^*fV{BAOC!>pt&kfWN)TD7{evF=c^YieC}O`}><-%zhM zR1#KPV^yu%P*GE%R@K&43Nb;gvbv$RUaM@ZudmQ5E2`1Ds;;3*t*WZ6(<Ke7G zirUI5wXvGyzA7q6&aJYhvPP|`CNZtNRRb@pZ(hc?14Qh2G zGFn$tSEp9jW8C!>6^&|bO;yEE*|n)@CmGA~mKQ)ldBMpAdBzH3rMKB=_pbMz>0Pe4LD5pv(n&B0@|QEPuCy`+ zF1nGfrZOdyDOm(D2e}0E1O-eP#k4{OMNFT-lu`y0nNr5sRHjrgqmn7rOsQc;9W&~g ztC1PUFy&aL&0xw*rp;pRIZT<$lzB|?Gxq|fEM#yTgX0-HfiUire3o(|^DG?+OgWV) ztC$jGDXW?CeU=kqN(*DHOfeZ-!*at+S0!COB#V@{i77v1+K-rW z7E{h<%DEWVX8di(-v#&^&6G(@xgM#zfXNR5%YOuakAmwFkeT-}$fs+%;(ER2mcXTD z_oYcGUZhe+AeA~2snjtVM zFI{pik|ft+^jUCv-#8V0Xj=DnIVHvIZkTdL2e_Knk*9Oe(-z#fj@pKX_d*a?g~wh5 z^2Kl|TmqLtoV*;a07$>mvAD`1uXf059CC+4Uh9z8Iphrvd80$_bjX_=@@9v;#UXb& zgs@hhr@% z2LifL_}S>GPsl|GAqPcgi%D%T&;h5uk8l&u2fkf+u)lYv!-c>v1p2DF*Owt2{7gm9 z{2~ad(Xh%dhJeveV2S)vu!I?OmQG6NNfP6Bfm%+&46(#^CnUBT_#WXQp4k1s@3#}n z7Y=q}4?xfz4ZHb+@x&e$*om>k-lD|z3I(K?7^B2OXuU5Xv3;CL!+=yv7_dAv)GRC<5+}$qzKcfvk}z70jloL==NTn1 z*_>RIeFC+xCGb;)|5PEBSY*4oMaw9~21}n*MsMB6pHrfyuirlfc4X06{qy3LJocMY zLsKzem8NFCeej^687hC#NtxLxW3h?vJg3O7kZg%nK(8o)QHw@N$TELb8Ss5CRL);h z2JA+D8h>5EMjoo*Z^Z2a{7qq3$=^~2qGna7n#4**4n#{!{3F$}4Ejnspag2n8h@=N zJ@89~G#C2X=#zb*!EC@l{zerW3YKNmUxxL)pUN>)!E*e7I_3c(P%?_XX*Ea(6l#QI zo*|Rjp&U^77eX>7_Fb!4#jH^m_@^?T|4TVS!(WRYzg9$-%pvgfZ>*}ez8QH$8>=Q8 za~gWC76qoBtMY?(ft{-cru(N$#2(+QlHSr|LdWne>fUCpf8Mcj87VB`+f?d@vA4@( zZ~RJ}OT1bUG&daG)+{aaOjhe|_Q@j;6XQmDl5R0A{28D#y?`Yie!akpwW=6h6& zm)&aMSiueP>!$?nRp;~jRZ;pgCGoBA0acWKBv$(VSxOmyNTvMK$b%!%!F*;Q*N?V>`Ow!%d;dc^D{L`w2Dd@i;+I+{M^c+l<;v5 z(-&Ik=+ny!NnF2ZalJ8#>(|v_R$z89ESe4BEdGX-hbFVhoI?T_{&~pKo5IrX$3l8b z4bCW*!ZUc3*vug|Tae5B#O1G4Ye*)A7VpIqros9*R>C+DC#L+{!D-FMw0>u$wE)xl z068l{o_RKEixB{7V+&GMU)pqi&J=cU@3`CRRorq%PImVnI{RuLW?^Q-K}ptf7XWi z#xwZa&h(^{+i7vYBzHmF|@t@?@pDx~{>9g&lHYG5C-o=^QZWI76+hudmD2AYbz`uk6h*3cX|U z#tO{QaRpkz_<~|%f>Gif>upd{KqZV(51ms$=196Wg$qU1#bh^wR012-GMSpoR4-k9 zQgfI(lIf!u8_m=ry1rCu-;{EdvdmhRS?8*inOe-U>RBdf+o0_}&NF(N1a3XAFH3f3 zWlyAAFCz-bQMXX=g;^oY$|}gN7F3Ner$MgQ<&r?nA*fL)ML^Px|m)JZX*yj1kuiJrR% z^4{90F=GW2Y{lhb z7_jeK#>ViViGwW^`EUbnbW zs~hVp)tZ{hO0}}Fs@{_rCTVsyzWwwuWad#TE30a9?ep){JYCEr=>-`DnFUz|*+!0$ z>m6x~$i7ca-<`u=q6mk5m)H5ZU$l^Qa+_cGk_?9M@_qnEs$)-}Ss;RCOW}Pq_gxM&}X~LWh1tVQJiD-FZx=9x( z*ZHJ-MTS|@2uT26%b*HK$O19t5F{is;)jBUD-Q?Q$vBH#1VK2NjsxR*4rEm~T$j^! z>X?{tr%W4RLptUFxBv~eJcG}$@vcqH)YtFlvuLPiIMmM>*panFT!m2P9e{k*&*w!= zgG4y}0daEGteU!C28xr#rlcFCT@TFL~P);BSN<}kVUC7r; znu*3sD~X+zbW^1nQ&L*^_lSvfWa2c!i6!AfzG^;i?l&{H?&mF5@&mEdRo>dHuFoP} zou+W0#Md;79Tn+g5#ny`7W}p08jHzxQ?f3po345E@SZ3}yN^dGY`?gUqABQcB6|Fx z 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

~0h}jbwSe;hs;-5@3l#Tag}8J4!)GZ< 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

hJ&y@SE++|eXywknW1YNUHNmX z8iIX%kk>agHt~i?Jpd>&RJyS-WX;S?P>%YhuqGx1-VkhTQmGl|nxtPm*Cc)Jg0KZ9 zW$a*A{($4*NL^#8%3w=x^~zq4x}wx749i!riq#c1%Nk3SWvykMx7OR_-D|nr(yKX8 z&Q3G+c-a|j?uDWG0#?k5m~t^GyS3=trZdv(B|CMQY|FE>ZF%O^c^T^XQYv+hvUiJQ zT_LOTw)NH!(+eYdQKQZ`=zOE@*`)Ie^umis!B;cs_-Zxn%=4|fybZNX@EtnerSsj^ zZl)LS(MvAVi?7tZJ$mugI`7u`el$?8UZe9N-EvUpW7b2=dc9(8eEdifx>3BKpA!^2b0K@O}F~1ZYN7xR~X1{p6gW2t!044j*@ebJ~NnPW< za#Uq~3AoHveZ}~t%vG~*{3_LD3;FH-3mTa&MtVCPv@`jiMd&mfyb>|zA(Ocbw zhTgRc=qN{=?pQ92Nj7G^2+wtFD>qA z(5`zyD;@$B>ZI+XDBLU+vEo%|zrBQQmbOUDTY^mGrEM|E%E~z9RUXCDrHUxobgw|` z@0D9)l9MfN#~Xqrun8@v6C`D+Z&^jIwp$!@hhI~So6Liwn@GA7p(fvi%C>sR!1e$$ z-pP>9_7*nv09qV1Ze@F=apecbZLF714RGUKtXG{GP>px9UTrU$*}aSP>OGdpZ5B45 z8~3njGE{2Z%X+QT16HAIOco}~72~^jN;An&l0IwbT`^w4;GZ!(3KAzvXvthLe#6Ak z(r?iGcduh=z+wE3)JmYaUNklE|6scRCJh6=3bae~KaeXP`$RpcBjGeN&#JUE#bdId zcuY2KmBn$@Z88~uP*4Y$Vtfz~mK{BDiut4u$|&L~jAWzL=4gSGEEHCOkBg9GVY~4W z87l+cqbH2VWT-r0$&iUfrHS+b6c=4hv*#q4k)8a8@Do^CfjA@`I_O-D;)Ncd?o z^lZUGtU^l`R7#)p0+b-gUXan^iO2+<>8MvGbKaV&y^I>>{}U}$kC!5&u21?;vVHwM zfc5f88I7mED5H^+GPA_dGB#dz!kEOOu7I*k%hT}dDNU9p%h4KkMY1BgNUk!zFRFM= zVU=+*Q^k|Ui^6|R;o&}R{76QAb&)n&$qKh2x9^4gCE0ihD2niHr3{N^{6vnccxjzn z5?gBgR7M-nKI3H>%>genUIBM9w%mA?2*%au3RY$OLXLA``Mr%*jbq2R_=wM~E`*xfs%TNL9qWy&uVBVX>jl%7@5 zRZ^94r!s}flB*p!e%}KKY@*$`SMf_^7aV9T0~!yRG#*mWAPSlj%49{Exm4(uUt_mC zMTVQp&~UTaH%}=r_87u?`4fuq2_@UEPb)LiTg_>3WV-K*N~Zh1tmOAno9LylE5=u$#?GYk88ne>d`;_ zEPJMK4Um6TnTDTP(4UEdqRsiAi-KZJf1$u@@oS}L-E?#v3)qUULT+fKhanIRNN%5IuF|8#>r%yYH@P z$qx63^fzw&mG`c^L>gFW{Ehpi6Nqv2q^A((xS8oCknHc`C5zUf#ugq{N7p(um^1$BN^@^$ zH)IhC(N_1q==QeDTDNz!b?({MvE@82$Ccs1A?v?h0xd(vx=ci}NGJU&Hyzlzh z;8=8IG#lN~zj2|2xy%Riq{E7&4`GY`H|auY&-f;`zA=jld1Jt|H_{l&Rlv`~;Yfss z>LN`Go=Mc!)z$JyC>Z9EhG3A_*4Nka+E4_-8tWqGVu#AKPJ&l6bojV9GX~brGX{7l z6bxBNb-C56dEMS>x`r$y1?8%)*wWg`J$QJ*OLShUvof7m=zKYzXvm9nZN1gTbY26? zOAR(Z;J_YHQelH=RlVZ{lD!;!_R4YO3zHm+su)(&}W@9SyAjpd5#BHPwJ4+RIu`b+_S^;gdjK+i< zf*~QwR1RBYrqi@0+w2xnCtf73O>44>f;NhIj;qUF(~Ye#&voE_(no9TZN2hjixiWM z?HJZ>ZU|j~csU?miTll~wwn7vCxjk`&>PH6BF6>hb_l!?m($t_RL^`PTFAvEVNo@% zAqv@1WPQN7b232dfT^g?0oS-pPEYW(BgPUsuTE+;+l0?f`XeGP#Ki|1sU z8+-Aa$Uc`27NhwMwcNgmpr;aM$Y&5Wx}=SOfjF@{r2*PcB{ zX7d{CiH&W~PBN~DAgG3WXIj}qHvDzPJ|G7-&)7m79>b_YL24&7InIR`bkQ4_d~)AoSAGv} zKL4ui98O#sJCdfi{rm_lTvsI4{-%kUoo9~?!QxYFOw9dB#ZG}easrD}tZ z*^1^F1QlIo*xUr3J=mbTutbLNey644YmFmedE@&`&OV*5sh6Ta(XM{>}-^Y`GAo!MaDj-1B#QR};BO|zxx zMuh-hKZXeEP3JkbM-yXXM|Qzj8FP%}ym8ylmyD?vY|g8T1M~k23#{oPUA6EEPcXhW zqGqr9+BzPNgd2EcZKQ#R8X9WVP%s!lCil8}9%^c+MI#4IYA75DhU__wqK0al>O;J# zzLCr?gw;@}HUx>ojXQF0Lu(1x}f{|b&ZwiN-U~k#bfH(TE8?CPohmp6S z9>~{*BTc0Xt-V5ZjS-=H*5P%QIxQ|z8s_G6bk8!rKBIlsYR3z1p5cZsLfZ<+C|^bz zY0GuFLYFIbd9f}pMd2c}u;AC_m1JIFZJJR&OqyuxP#G<2(B&qfI!u?h=yE&VgYVGg zow~eRm%DZO5?xN}{IK<~;w7E64rl4OO+sxfo+a?}!EXipR>5yI{Hox$4t@dn!A_{6 z27Vz)s;q_QM)+-j-$wXtlB8vO!M&8YaVsv9FTe7Ns|fZG>?OF5;MD|U1mgtz2=)_9 z5Zq62fZ!m(YY1LTaERamg2Mzy2p%MO9l=q8DS~4J4-vec1)Q)uX5Ok63HG--nbP8m zTO>PE3tEt4-$FsUO&Hl)-6DCIbsgT*+I%gNjoJMzl7%^}Es~2lm$XO)%vFf@v+k8G zu$T5MZ;_m=pu9zLu)-BBl9d&e;Vo_Psus!3N=os**t@hvDrTi?TBJf&CMil(S!Q8O zlB4o6O>DoH(e}H91@Kg{+)GT$ezE)BoZWqI&8q3`6l!|u(pTo{?WlhLYD{30t~TPh z*Y2O3N^&}cr1QpG2XrGrK`1(423d^#czKE%-HZW>RFX$XiluyXzv;#MO+Bg8 z6W;w+;ied#3Q_ygfgXFnyUorNV?-Qwa&-+9=3Gb@{uUKForz`Jtp}&KL z{%*F=lR1T+qSVu(FeS4K?akyeLwG+BcwT{R7W#)dh5iwt{a6&HWOkvmTA3q z#5gO)t%A658RCx0*isMBo#@RnUSJ|FjId)e-2~h4Sib|51$isGM!Dk0D9p2?|M;<27@d#%B=qSwRCMT6!_QG?ZSy5BTwegY9*6bPts3gQaVRA0ropUc!JRNx|fo(OE7K$9vr zDLu=R%gxxM5Zi*!>DZeUY;K4}0}Ahi*j9XA`5XNsX^dkEsueRaZUKxoe9pzVl~lKx z7`FjN6rXc3Zl|kZ6XRWgu@#?lG44>%AcKkVZoufk=Uj|C6}*u&G42A4i}5)ZLrF=ZbtTN6Txpr(6dRH)KTpGZE&%81=PgR&um@@C8gZ##cUnVd3g%#;DINb&UF z-4{zGI$*CfjONY`Cv5$RR3B_HQJi-8(1FD0VBZ_IB&_bk96bAGWntf!&BL?tMVr4?5xRV#w#+vCY%K%gd^50M!da!tN&-9Q;daiuQ}ND9DsD>p&poU3 zMc5fqs`WEdwggemIL#eTm1FiX}=T0*vj)3Mz&b=L5I5R94YCAW@d)%|K zh@2Dow8x~42SKYBOqd-ybViqbG&|v(QbNs_Er^F>mg+TZN3TiuEcm9q#sx6M5T`>N z({EBedm13Dj~t}fiiP{ZcEf>m^V#uY*7TcNy<3~R+d4YC+d8{D_HkByCt zW)hyOJ#{OlpvEuBFT;9j#S|Y(B*!dxkGvf`Y7)=StoYb9xPM?w9YvVF)mnIdN}s>v zRKk-#KK()S7Di6S(81vFM%Wbe)@wpa8ilr z&`4}dPQ~O@eBD`zWs{%r7;4-3i=X7=dsXgBls2fIVL`CN2kanVqTkX7h1x$ddPLuf zLO!t}9%-x%@kkw7>#VJ9;E|^KMiep$;R#h;9d8OZ!E;j+$+Mug`v#N*35FWL-_Y3D z#32BWqMDj?^94{tk=k%$$-Hw6q-;Q`7|1Hj8$yi{_pDC{N{fVeV?CabMe6E;sBpi& zjyHxIBleuP5CvYK#Eqf4243G3szZ^RNW)x{?~!0b$eL-KvsiiO;Yg&eka#7WUe&v} zw3SZ4wp5f^+SF~{R?EfS%Psr7F>Ya|j0j4Ikk8?CF=q!cRoHcfI4UxF@>wA&j{qq^ z*1urII`<-Xg^&(WD|PNe9t-9t~9tIZ+4M}>1U1Dr5<--+Hj@*WeBw+QD};oK&i+lBKk;oKpdcMIoE z;k-vUcMInp;oK{n`-Ss>aNZ}J2Zi%~;d~GavYxyj5+M%>=V9SYu#Ye%T}A#!8H;Yk zbHB=p7D-l^tZ17hhs3xSPwmu-R!L!6X^Ui2blI|`MRF)s*=8Y04tr@U?DHKu;X9Y& zNuX;y{%{ywp7T7lvT%I zA6~v1g+nTeTO})7v<1aJDvMhri?Uc=Qq(G`Y-t&ap!np?Qk%qJWSEw{Bv#6z$d|Kx zMH%tsm>NS0vKm8VRn@L|O*7&cqf7Bq%)$UzWdJrM4l!@(m5sOJ@m`cm1G2Fnj|c~Q z)u{p1xTaT|9?*(Nf+6SPr{YdV$OhM=VSkSCX)BFk2 zbRoa@=NY8_FG}4Yy)GNSlTq_v`XJ8uJxP&>Ghr77{DDr=@CYXx_D2y`o-8*H>g-*W#Z8ekw5pPw}uZrh`49}9VQx6xe#S?5r7>>h` zHojm!%XkkJ=raDzd{#V*;kn!RlKIR%&}6G|n5|SjGD3^8 z=)TjZ)tCNt`qaNp51&4L6a9xEb8l#%}?6_2C1W@ds=(mc4nQfnvT{ zr%-aq_>(#0E`gB0%^q^x_=n;tm~EX94HKR=$3g~GHE!Y=RF;c+E5|XAR|Yj*hTAxn z;aviQ2Jjs`Gk{TShL9=ZE)gM9UU!QJ4kKGP?hy|vJXnnTF^L}7`BcsTwBTbQPGawa z*j3mt5Aw{5_bR?NBGs<^RPb210b)NyvGj_h=M#(<0flJI_~A6&5A)31b324TBIxeU zr@PxM&7Jkvm9sXOIUQh0^`g09Pgv3JcBvlumm4IjT`Gd_s`LB!iFkphNB5xo z0_430$Mza?X3Y%d7dQ^)7r60tEFKIq-&2L~iRfu08=8&m5Y9g0Nen^^J9I!X{+-W1 zWWO_)j+{qF&ZWbR?=CQ&r#Zf}I2U0nMw{ezITRaMzT(Ie>{HMxoLYt2VuPeKN*g8K zC>1ME`JZCtU(8f~SbmXSX1{o~{j(e3MQVT-x$%>1!C``?3d6{|b=;5T%hulvM0&={ z3$($nW|NZhNy)QGapN}&G{f)nn_&|)L*2m0@)hIk8TR~~cJO06_@xpY1V6%dcsHS{b>SwsOT{L* zOEvDz7TqCw9zVq%SMDgl5Ul?F>ipIJ&}GAD;+AP^aw`F1iH|~z zxNG{VKA-Z~Xl%Cb*!Hq~-JMwsHQJ1tW7Q;vY*39BJHs%#h6N8t&~UW zNPogkzO=nd$~iF>8yvEZj*N`8#tx+twk*kfZL{f9!pK4u%2hfW9UVE4X4XW6`IK`O zAR^V3%ARgP+z-jL8|F9Y#XU5qlojkA8lNa?wiqFyX6h)uFZR4Or!6$;YDW{y1YIZ zZp_ndTi*}~@kpqlb^$fDbxm1yx3x_Tcn%r_5NYC(x=^0F+fZXhM{c;`47zQVhKBmI z9$UA!&|B(VZCOu(pexdPY;C6EZ`p~5ld?xwi*%(}*UEHOsmn`{J&!HZRwfupg-*HatgAMy5rA^#mIUHWA!N z@B)Gt61<4uW`ZpQw-DUQbf48KDV7rCk5ej9H3@ResZ4cmhPjw&4zf+DFGguH%M#LZ zyA+kB*d#PZ@5Do^3KA__g!U+9W@9>Xw%P5u8gDPk*Lb__HPv{W&TBO3anyCo5OVoR zW;_W?+o_~7h57;1ZL%^hpERCgGgC<|rWqe+lf+uXRSVD6K@3|%>EJ@2Yo%G{c0DlSK-;Mb9vYxVlE5HM51Lc8=z@osqXqhfJpoA9Pv^*Tp z5L$FUME=QWIjb@r!v3&jwdgMHS%%7bgSepxA|Fo>`HBdbT6Fb{7TsW0blLob3nj1F zZ#c?SH*c5dxz>+VKHi2Fz3y;r;1nzvl8qWZ8S zYIob7y}MM>ex~j1+`hAUi*{&uXe8FZ_52x5%w$vUyu6w?$`tO8FsZmmCed_6~uIVs6@4Y!p6@zWHg21SFM^6Py*7 zUNnEQg}#q((!Ru;t2^^!li$qrwW+JGYeM7AC?gyS;x!&`s14Tg#)hVl3L$lk07Fd( zk)xXm4E~0?kaL$gIC2#dC=KDTkp9)Yi@nRee*7q?74%V1@w=ed@VZKI>53QSew7Mc z5vt3U=*m)EU8XAqx>Bes^s!J%bfr|+R_aQvuGLwWF;teDbnv@auNrU; zz^2HhKFNBufO|m04}oUU^gXY6jPKF3T_Amrp)fAOA{k+^g0O@m^r{F;weK-V@O?IE z8kmJS`2?GcYXiD*5?p=2BJK)g{Pe5@)Ia0=_gCT`B~?vyc8=_#sGuC?>|60;U;*SX zAg9m%T?kCg~j`0YC19KT&&IpFm)8KuO2Ol+cDrl|{4v!zq)8O$fs z*3Q~9RWH9uGHhbz%gg&?W3d%yOfT}MRX-nuS#kLpv8j0G9DBwot@F)sBg}5PG)IE1 zBNJ-wJb7(>I1E!=QzNf!Yyw}nwjPZ>G|gf?a^{ibp{59`Jb`IV^;UY9m%)6)nd+kZ z_q1w8oYUMica>Nd!AwPp8`Txo6|#!g#)^c;+PGRpi56We8211y9xuX3-7A-tmsJp4 zOmGRor38Hhml5Q9TQ>?9k{L3EsdW2kq1#W+95~r%Dv3py zi^rmz%TJEt1DbKAxcs~lFF&uu%g-wzum>+X_w~wC1F~^-uQENL7_nYHGr)~F&Iu?y zu?Wx(3cCphjnN*Vb}TB(RYqznU2zJOw<1cB^j0(xEl?CdxzRM1L;SRwaY2t$Xm`Z4{MAH)xC7HLBs(wlh6i!N#2-mzuhuI4>^+PXSX zDRozO$>o6^fh~dNKwF?auq|+LV0)l5&@Jsa|LGuG;Ej0&#vu(`F@7Ww8&wXB3@iPy zBYa@w5IhVHE2%`EHk3d-?Lchw+Qg{ZH*yH}XhVr%eK>JFQcBz05!#=%zJb_i^Vr!r z-SJWQ~mge_eCYGhlxx_v;vVG+G#AqwzuB8s)HkAcglP-AeQVO`p8p_ra z>z@v*GGYM)cgM)^*g)MG#zu~QU*f&ONResPnNsCF!MsdfkuGqibh(IGw&LR4V3aN# z9qdoc;jQk5UQG0-S&CA&{tV@FW!5|QqNR^|JQ-ppTdE@$t^V8^b~X)tn9eLx8hyZ0 z$a@#dq!U|`GIQK?3_}AA3Z?ACW$2#OOFHRG-qn`G4WE*;j!_)}76|Ym2UI)t&9S(xEGzy0TNZq3&W`>C%;MUD>0nd)=4l z%B8v$Q2KRsNLLS7P$wDl*f)+_C25l+*)Nn>sXaP=kyN@(Vs_;+@BxP7a`}p@uIwS$ zOK=~-s|m&k#tHTjOeE#~g9F!)|Jq?DwUBRwty*ohO0rgtDuk3`VrAm~7#;)_(Sx=U zts&{T#z+VU-cc}+<6v*Rbm-}Etq4b|(PM*N+MDi4KYy07At`EWv!g394 zAgn|1<+dGw?SuWJvaxT97#lQ6s+tPuPaQ7gl4M-%Yd7Nl)2S0iAHb7FKfpe2B+yZf zBs!Y0A00iQ8-vICEXFl{Xp^DR2AI(F zo~x0Q;|`Xo3*_+bGv#pS+#DW2zwsXCSqjeGEbfe3CV;eY4>OzPcJRdQCHJ2`ZL*c& zc52*`v?gt-K9}(z!`5|sDwt$F#n!t&z>E*D9(yig+?{mbMPHxC_#lgWqE0F91n^Y4 zV8(|;s9*9cQI~8+7JeD8{8`-XcNSkntZH%9@AzbjXXC4v_g9vCucibI!mHhNyr;X>C7?Ym3ECs^GmuB@xE%bQ1 z3_Tw4d!GK<2CF2w2-!1cM-6WGNz|sPowP z8WVKW&tIqR{KVmcPeF%%i}kqU1yMIk^%WZbm&FVHQTN-R-2cg@{ilntYTsj?uQJKg zM`Eh;ydc?!hK!zNW17u=SC(WSAoov+*8VR4bb8*8GMR@HKOqv^L!R)JPh8yQo>JVx(?7`2w{T1n+a|pMc5dT#nLlarwL2vUkfXC*ASF39}jRk!kGSFPk&p2)(-Qf1Wnp zpQct|Qp@q%v#$cjS0Veb^piqY_6KB`eIJss0;HGuVdNC-(~S?y)KC~SK|z{vT&5<) zphqZ3MPXZyIQofeaebRd8~5}%jE_OJKLlIMWx3j$&x@zpw;+|67|Z*28xXTQqr2vmjJ0hV-9~+Cfmwj zkpErjEyq)(fpX&?h^46(Rhv`*?KV=hdjd1Pjl*}2Jqhq)`6+r z9oo0KaR(>fMbg>+Zr)qr8>leu=CeP8IHTMPvB+0BPyt`L`*^$Yem;c;{GK6|=O5(# zLooSH!E76?WT-IyLqLTRKAfBI!@Qm5`$r(LC+T@cpgfw3@)*#53I`ZPtvHT(#jFg`;n45p)tng2BPEe+afm@S}Valk*zXTAbo z@Xzu%7g)vk8h;)iVP@kV*kc=CN@GBysyCET}K(qk_Hw1^pzC zYcLmTFuv5112D0DgU|Sx1988Zi~D~7_uIT@nel(A#8^(_J3QxGwS3z$WqcWo?C<4ot+jYKF-8W!1{0~8u4rqxG1SmK(sykl zd)<;;kyY6X*y~N~4f)t@=d7AIC&!I>H1O_YU?erh4~~qEmGq+lpHWlyu6f9pwn3-G z4<#Yi+z*G&p?vvu!|ic-Is*}eHipbxyy=)$q5szmwvr8{b||3m?SfL~-vZ=aW!SrS zwqD$}XWy3QJ6A!LIn!x<(17BI}TkYS~>2?)}SnW@=1V^FDRc7OOALT5iG z$uYw;pDD87xpa>(*>l4YQmII)Z=wAMN1^r2P7oJE>A-BCiHew-nyn+lCi)!vS&ot6 zY@&7NQY4e6Q0Qwho65&F*nRDL_Ux(&tq<93!hX=+J<%4tk5iLFhf)J|=R!O!ua+q= z87E2;(z+7++io~$ziRZNtA+{qwNxTD+Be{Y-s`(It+vZW*MQB3V}o=<*m!<9XWPTk zv6IdO#3)WH3PTPh=1U(bm?uqgZ&)83A#6*>&V6)ox|AM$W`mK&uMywaK*C4wiSJ5# zk8fnyhi|p-N~LFmkB=p8n57N5>3oWw*9OJ&O%w~81KWH)8O=8aTi*zQS>u(icq8XR zXhAz==}X%)o0L9h9q0>w2C|y9>Vg0ons~UWwu#q;@ggDI6y%YHI+RLmjPP(nV+c?} z_27$ycztcK){*yK*GB3hysohUQZ_{zoq73KGn1hv0%l7O@^F1qus~&A*;`OrL?ts7{@~zwo;c@>1?$wSEm(eg>-kV&PbP*(xAIH=ZJ-Qm9U=M|Z_^PoFiW=t{pGb;8RMnx>Y8r6<|LRo}R9*MQ4B_L}i3=CRZh z+%jGzc~DDBhopM=nku#GVl>*s;J0njk|^FoNbXK~=k8ry1iK0DA-I>|B?K=ecp1UV z30^_)N`hAr>?OF5;MD{ZY+b;rO3YQVSyGw8Bu30Tc=^I5CNF80G^P~cO)&R1OPr~t z$nT>SLp0P**F`FeCZ4T@&60)L*5dt*y#Phr9A(Xb;l%4;whk|9Ty_c9%xRlMil(F9 z`)z^`XB!^(Y%^NW645qU8em3iuhPS}acMv?wogt?cgV&LY!U2wvMbRo5_V%k01o-G zQ_QJcj!ZZ)&A4Q8I;I4@}X52U#SUZ_4o(Qa)m`s*T1OgMpweyb2Xa(dv&O||OBK_AK z5?>C9Z)PI(%?wqzS&^$~GO0}ZS#%Mbh$+Tx3?6$bla+yR3!?>dkq0-3Y;r2P1c=|k zJhXWPw55Kj_}^gtdlw1cq4BpbVHdrZRB8K8VlMAxr&uGqhZ*-ES@<7liY{Y*HsM#I z%Vk)<-^ZpYvrT4Z#TTN+?F-}w7@Gg~;bJz|BCU6ln3M#gNhM5R7gQHBu z{KkW9awfWxRe6HMz$9A!AqFih+ISmmQ6L)if?=s$xD}hg8e!l^*rX3CPEv@v2F-LS zRN|x5Ol{H=4B5~G737O*bIYjYJ8wk&z<82P`HCv&^v1-UN;;>KuBqgzspRUmQnku> z8p&JI`($xiS;?W*8f`yit?encVRkIugG|C>g1kTe_OD5%Q-Q5zxT4X>%8^8qIsljCzZu z^H4x#LXe6KPU7ySavq$F?_78iw!BdToq4r3FKQgQ#UrZ?x>;o&s;>`QGij8D+6JrO zG${4ZH{Ry;C>q(NgAcdEWUoawDmQ+!3yDvv0$HdmOW?~*yar5GtmC?@DRRNM9VVV4 zGWyO-WN%q%Il)B)7ZY5{Y>E{b6zK9n$IAx`@|-d&UO~u=GaG)Blsx8vT*+x!;kB=6 zMo=&h1dZ_219Uu8dx_L;)J@^2eufTm>dAj=yU{dt3GUlvSygx!ByGo}cBvh{O$>lj zhHsopx!Bk?o#d&L#>IG&!95i?_3oI44~sfgff;nhdAo6OoPPyk<9w#%WtdlY`%ep# zd0ce?>bGQt=Fw4<70RZGOuw}RmPP%8G5cG{6IXE^_)7{<-9Y-(Os#~A@ z(=*EZp8xvI%H2=C@-^*aAO6+HvP?@!^FH>% z9p5}IfBm1Ieq8cvM-$xq%sJ;Ps``PwhlAKm?{&+Aj) ze4_r>(~ll!$L@dWOY(DH`@JFm_m4mQU;N$=yz+ka`@eePaqWxuKmLqveC5fT*#k%K z{ZDq=i$8gdedmwIpO-)TkFPzZJoA3zTgtb;|FggH@7?#Om()MK{DrS-e?0cWqxz|D z-v95qOLx})!x;7Z+pk$wm6S1vlS=oQ5O{`gyej(F>DtR=dQ2k!kn#v9-I8>Zj9_S-tf zPyA=2M(O|2FCqO`{$BGt%O0844{Az0C; zthiaFH{C1P_gg3!8T`e3B<4rk0PF)qRIYVvYfCz{-Z4z-e%#q26NZjEXoyqCM%oiM zR4z~KM)>Vb|!e$s9rMGMM^kO66E>5AE)U zQ-k}56a9$oNJ37nkQz7H=b(g1d;*-va8e&>GqXs~@tVj}96$KaRO&q=f`U8{lm|lc zKv*8Al?ULlP9CV22O8M5$T!2TXM?D$jPVUz^T(Yo0g%W=$bA)bfV9P$Q2->Vv#7 z5^S_)h9zv#Lm`fjJRGWPaOCzpuWbm2H9-uhL~0!*$YS@pVEgPVy@)=#o4psw8k2Ds zy~NxvGvZw4PSP`tTV_dI+&*iP-kTbs+LS)O1arn-4l4y!$r@X6ccQ?U31oslW zgy3ZauON68!CqFm*lI!hYkJ9M*m5z+x?5M_1Grn`@KxV!fkj0*e&;#KnW&3)s|wSY zg;j2W4X$p*{VlhMul;)b&U3Et``ByTXu?2MYB~kz8&H+84t5-Ft&O|k76|{kILGIIpabf=BMfs1L^B(Z!*@aUSi^4yOh3lUT`lYcx9h#q>l*IL@gW+wBF%nl{g`~z+*s_;=57tPBdR*IF(zvTnGY-eKIFGtvM|XW( zi+WIVFK_lK{8v^e?pv_9eQx-9;75ET@GF8}G5kv4=Y?M>{L0{04!;WcErMSq{1(G+ z3H+9#bk18&!3OrNr`SsQZKv2Ownlvi?0B_t*kG;I(aQ2V%Ta&<>pKBf z+in54-hL~<8ppd({K)xl%y?@JOPw&@R?T2#`1WcUc}#Ask@3pw9W@GGaE`NT1@As@ zV%0p=XEBbl8gQ*>-Ab-jtF;=nMyuAVEj4Kp z-PNAzg6hH=ca5i}pr){DttqQ1uc@e6R8v{A zxO!1_W%c6fCDlu-ebvjVmshW-_E)d0SyHpK##ghfW_ituZSv-ExzC1nqm#~5pWV1s zoZ>*B!+005F*rRZWbD+S>)lZ0ko!)6Vb5IvYYW~3Fj9yI1a(Ds1FSE;2Vg_Vy?A8c zy`LHHX49!Yw{a(%N%eV*yI34*USPb3#Z_b=crS}(L@PKco;sp3FWfAA2&@w*;lG(pWME7v!d+kfKaFdbDA>rN%>4R0{S$aD2%G`E~G5 z#FtJ$*(U^Lw_i?^bo-r1%k+EEpXw_^o)>rA^EiNl$DfRQ5T^RdjYn9#EM7j5>Z?G7 z>6oU-ucb*9`Ry4}MgDR@Y7w%-6vc}lj~Bf!UV>CAjmKEr8(%aLubhb6upK8va{}4L z#>ZH^1iS2U7B9vwd;(Hqmp;kjh4IA`*vn6`cmekM$64Hiqu>+B1OubuX%=4`ub9Ab zazFGR%nhYb`^_b`f1Nfy!=~fz33$JrVKZ^h1iWI;!WfEUp4|8>3?pP^fLHBvFp}a$ z6ZpD)9tKmqcmm(J=U_a=OD6E8`vMH9xOW2IyLYj;(+{-zoG>`-CCmTkG^%jN1IuyV z=Ry`67aIMpGF|}R4EeqcKA4x#`xW%6S8iyjE)KL8np3w2%Luj1@1v}F}Z--mJ8&Q6fc_aEXsr2GhA2mdk7 zL+VSYOKU1=gEl(JrijuH)9>&}<45>j`z?=PbN!gDJk7ANUSi@ZK8PFGpF+cGe)XdQ zCJUybrBYmd++POIzDJKg_5=*Smyj*RG9m8EdC9k6&i)xBJrU;+`b#!74F&u)Y2(s#P2pd|n!e7&C;WA+Bl|PfQT_|oQTZ#@k^hYu ze@@rwgz=YjolY8m6;5T zRPqg|)_=3<8B95ot<+2g{eLhrr%E#r_AiFksCC@m+o2|Zf|`iUy(PW5=SCnQq5Ae9 z0^HnJLfA6e+#i(Zu^cEglh$;OAV2bOVkmQ+NVj_FQ?-J1`8oqA(T0T*UHZms{t2oZ z7odu3-vg;xrmD_dkcDbxZUBqsAyv9S64#D2qM(pA4~h?GT#!TLb(p+_hw!p)+ zhDfbScVapj8r5}KqXROl)xv}nIvFB{C9OKn$>)%rZkGqo$avZmv79kQoVj$7fexA? zULh_lRv0TMr#hIi$}~kx@@b0U?cq3$2Zh8+&Vf>%sq9CTb2OEmX}mn09gAwtYIb^7 z!rgDyOm;rKvl_{^ZE1^kbatTasEf|Ctg|a^%Z?y>&S<*ue92~$W`q}PTmDzboz242 z?l)_9drsriKo5r-l}LS)Qd`$}HWT9RStJ%VAg+WO>eIHoOT49|!ohCZ@@7_DAr%hr zI&rVAmJvsOxtg}?4KuK9+=7a&Foe5gcY&vnU=hJ$f)xx6IpHNHNu@~|8vbEgs|0Ty zZYqUZ14W(B47g)5Xt=Uwz}@uj$s(=*-%E>BU=&SG#T27B&1dMqw-VBoO(qpnmXxoc zcUA8pRcArm9O1JCJ;WZSn})-$ljoHqHNOuT&DQDnvUusdDy}zV5Z}zD%kDQNO`86Y zWQvkwEVk+_rOsCLT&_uWzd6xObCS<3XZp@$eg)!L1>oqI~^{9MQEBHBS~sfCaFo&L_Jd$QW*WviZ9(2ldSiz3%^&p_fyboWWOp z){^H|_*@2H_y5WO%rEVkhoC(NdDb9|g#P~;ge$}#Tmjzvm5MnCi_bC$d$d{C%3Bht zzR|&WV$YF-iPl)(Kq5W*>arKOb8z0oup=t~M8w&LFwOB=Jet^#ykDcOIiZp}PRiy7 zhX%)pwaPo|*~HuaMz5~t)C@<(WjnTKt{h6|V00z=P&9VL+6Q0T6pFl>!xvT4?>-b8 z8cYr*`dibHxpzC}_;F(s2)d-cUK=HnMJT|U8Tl4e1YB-$TOgk@ys$)#*(3$tn@X83l*)X$o8j} z!qSceFw1p?w6G{X-L_m;%1B?=dYy-@VHxHsiv;sa#kgB`TRe-$7gfrVMPD|)$jc<% zKkh|6#E4@(qrR0qO)IsM(6Yk3#a11rLP;;en+VBNTfjJJzEUaJUK(tZ$}BNSQREAN$JG9Kh?>{Y<4^zeWccWhBER}pWWs_@6yYj$K5 z@Etqh8`nevYn+H2e;?i7xlFuJCZso`0&;<$(8 zDw4K#)RA>19_wFaTxKT6_{)Xl$I%}cSN1rjq7DYx8CUh_+jI#tHG1NFCgwDH<9s^i zGWHR*IFH$kSe)Z6hoUHaF%*`Z zF0Q&w1aM5w3N3y3VmFrcl%mj05CI;(cp*%DVqES#9hEm67^>+WJaBL*0rRSPqf6hI zLd~fbx@AiNY(-q~;d6K->2|ir)Y}KiHq1_D@7%kirLAkp-C{b@&h>_p7p?ywxI;&hu?JUf)b&=B8Gmvc^8yCvvaa#i)AG(T}aM5 zPapeh8||@!2NT2ntpkHY{Yr9V#A#}i6ggXmM*3nySVYS(q(P5Z($MD_M%2N?=-6N) zr5$WVJtOSkd={vX;jJ~D$YkEICebJk(L*ZK3U<*2^y#w=A3CrjK`K0~$N@+QY>>DC z?X+Ss)rE@H3na5;JJ2-uRIqEOFkOak5FSZgu7IbYvu$g0UMQ~ypE8;_sHVnZqhlE* zm}w!8;AL{~1`8>d=olVzi3UO)bC~VwGYx^93Z+F9GV7$KGbKzfY3A*3Qcd?J)xyov zKnjJpYM${yixe`=)X*5Jj3gSEHLHq=IZe@qT!Tn*C9Q2>VY5P4R_Y3B znb4JWx>Ai|3_PNM9{An&vGG1N05@7I++T^`WoYjpWqT|QuKR$zPOmE@wzqTqO0Ig=LGkB60| zzU4~?$2V@efNk;(jc-JZ(qVbzx`U$xQv}Bd9wK;{;PnJ=Ab5n}TL`|D;M)kko#2fG z-$8Jkk#m!9jtb{y;k;8g$Aoi>aBdaOZH)PSRtqdXYEa2k(F&AsC|D ztN3Nqu%{}&X1(06po%?>|AzIdevT^kboIYjujW?=v{THY{g(CWer-TM1%vK)tk>e# z2P~(c%)e*7R=;JydWzZM*K70J2W+R9!)CBvyWcTjKgFE(*I2K^?;LQPVlKz)tk>yx z4LD)3>HHJxb@|-`E?9HA{>*yae$RmW6x8T1tk>f&81S58g`U5%-U5H&K*1?iRPayM zTNo%_9Vl77R~{%#FJ+G^uaz20CxdHn1zRR9J;llyfC_mTECrS2usAE)RwNxeY51p2 zbr>2+{-QRF9#|Q!nwg3gOMzw45*d)zOhvttpG_Qsr6~%V+fZnHCg6{jFo<0{6X$8n z0N!FETJ;>X^?)XPA;_~Bm%+6&fmI@?KED`f59U*V&^Q$>BXUi1$Zfz}t3H_Flylt^GzIb4XaRn~hc@bA%Qz6kP zN`fry8pjY@;-Kifv+} zC>R3ZLS^g}yNJKVI6UPmMs+RM`*7L60!66D`c&hsaTU!SBwZBwHi*2@4AF`!$@Kix zs_06F1v75KyXNRBRt0+lWWhehPzpQ{jjk5)w?OE0a!sttxHW@$J2S~C#SbC-$2Rp2 zcn>eukjG`ajyx_qEO#;E4%V|axpvBjnjxd>6l?-in4%>EB=mhJi|fg1Xbs~oMh)WG zLJUw{R^*B4w%yH;$3>4@lk1_SjJsLS@_;vP+qPWBMl}L{kMToNM#rv?Vd+n&#YGwfKi9Hy7mQG;{j^i@P8g_HSz8QaHqdK4#SrljN!Ey%2*q4& ze1c-G#7twJPeG>fg3mDHQ*0_)C!xlY&p?1*^2^bB$g2>wrW6JeS=}Cmfuw0$<+H4( zAzlz|V9`biNupYWFF<1S;~V~Elcd}D8jX#(JKBU}!-L!!Jno?(@l8g%T8?ka_ZW=) z@6bHGQTh%uzAH*Dw$0yTqPFeEBm{3rZV?`rCl`z0 zABbSB9oaXqO-1lY5e%dFMF?J&Tqc5lD1!BN`VGY@J~cA zY@}aFXHH5f#Gbg+DDAl*SLgG9AHu|*_*qNdo;Yi8Abr}pvp}pFH{?WJaGu+}joGw0 zNAZ?@rl)dF4mssGi#>zIbJLnQcu%@!p4c2E`>DiO+AIPdC))RoX4KaE=BCU>lBPVt z3U6vet(+I#G=E@jzN{Gn{NSO~z}dH~OXd=d_4m(KDVnQfRP1x+NjDHnWp&J&y8Ai!kMKkyJ(l# zV;&Lu0Y&U^;(CExAogN=5B8@GAmj_uuRiOT6LcK8eR;;6)dlCfv&wtjXg?LHt#7jB z4EJztIEW{~4Llrd4B2ym9k{g-2l1#lv-xur2!v@Y-;sA;$m)k2JzgtTqy^ z%b4MH9n5P+UfWPt$Lr8?L$-W*oB{56b!2cnq9A$w#hD&jKTi+wP;HRJ({-UfZTsZ!WUEwk%t=wY#b=iDX-Ax!aPRMpj~1+O-thlF`aeOvs%` z;v}>bLIMdPao`|8E+HfVjvgSP7q3KY-~!};JIVo`99Q5DqTlB;^WGLomgT_rkDn9G z&YStnXZp-%Wtp*Qps)<|%QhzQAqZb;i z81JO<`njr_7@oz3cbVY}7<7fKCRUc=HY5{euy1<9b3WguPtkUr!#a#(L-;(iaLW^qAHP()=7NX=c%s{l{ z7=u_Z+>JTLAfy?H4rvBr3#pbyAUcH`*`e;-wRN}f?;#5pnTA3+|HX zQK*_;^$O*Ul7*>}HzO6=(o52Vgts~-NxcBE{Y(SjiF_8wt&Yh`A#lG;wx9RN6bBrG zqnKhCQXIo)M0qES`kkn_6UOUeY1vdqL?H-%m)O>ely?d7WJps}f_LffhLhG6${<5V zVF*k|Oo9~BHlfc4?Uzy%H*P@7r4QqXp@tUoh2wA-@FAp|ZHV5&+Hj<=hf{ z#VNrHSb{>q|2n+{-w=|+8rAeYP=fCY$?@W|=gDg2y96jCZ2olR8qBepOb{TBkTyC~ zzd}SrN*DkGktEH^exF23C*bH(2UHPYbvqBnl-ETUqspZQB;SN19*h@enA&2?W?`jt zOvY>(8BU==bwR~w$`t%7xT986lz$})a|w#|GZJinO^lNprsIKycZR~;Y1(f+xw>)j z)_MDIY7C7{u)ZTBhbr@mX|LNIhtT-Vu8~7{+X_G!mro!$`J)P6fP-vYeKAZW-f8=t z(#_chGg?t<1vdMS;AQ{zfkG&CVyx$QJo8ZOO39CSV!(ZTIP>97;U%n0bP3zIl|j%n zcR8o+t4>yem~&J$4EWDCYDUZ^wp(exE-oCk58nq4BLu(&||t_aqKM zbDv1eS6{TZWAu=C3=vE(g}KEQO{EPaj>JwD|7~gk4dU+0j_dllF=PQn^=%Tn(uud{ zZi=e#v&+lNj^$A0NdR8k-T>w{PUg5lCi#<}Uzts+2b|j6|3XT6TPR zwmf_=YI2}1(n?tk+S%z36?XOEvl%R1M~|(Z8$kw6oQmXwiFN6TA@|u&g}yB#M~}va z2kh3CN3_gQQIGW>-kmyx9PCAXP;pyZ*5=sg=n$NWY!hWg9sP%gN3K7T7&w%$6BY^` zTYX*I_Z;Z!>g?Fs**)ix$v*BC+sfzHZ{K~@?p-o$?$eafFN?2^9J6qR5KB?z?t{Ay zZ13wixVdLb_x8=5eS7zHc6Z>r?4nuQV7*ga_tqZBZ0sN|$7Qo@Pk~_L#gCw+2lvd9 zbMY);`jB{PTTy#s!%ej{HwJI2iDetICOI-%le00bRc-qnMcI99{dT!udGiLBI|obT z!nm`TYve9aGc-_Bdt(T|;ow%289OyMhHql=k%5zLyS-4Ym(TXw%sY9O=4Lb0XzcFn z>FL+;x;Ds?d3d<&rwe160ONd&=9^@R^3z!Of$=RAIi=zW> zG;y6+FG|H5=k$%Od2ZYn!s@Y?JzMXf{IG18#6Ynf63H=56P#C0xhV>_3O@~YUjDv6dc1GMo%QR9v{VJd^Y8e zW!Y?VCt$hA_+U0vAuZV29Bj}+&7r0?VaHVqHiyDN zEz}T3^LwqqrY0@a)ZEalg<8WQ01P&_gtSlyQeEh>PYVV^jZIpxp}Db*wKfD>SaVxT z8*2(Twy?GkUmVnCh06WU_9S`E5hTwiW9 z+?xz~xk1|v+F_6_2JJLF+YP$I@a#00ux{enXVCqq_UkHxUTu`@wO*$hwAY}027SFj z<3@SEVI~ZkG-$-2gNA;cQE}LyM-4h`&=JFYgF#0P&vApEFv#@=y}_U-4f;ldzR93B z8Rp*^72|;V&G2_K{M|x~ic`d3w-Lj9D}28Le(xfJW9ATjh2QtV-y`t%DEz%2!2W?4m5&jl>Lc*|IAHll_yC}@+O2p~it61`cjNfjZsOhb_v6cmci*i9e^%U1?m&Z$fcR|$4YU;j zlDom@a=o1p@1}PHlv4X1qLA7J50Y^V>;E8zc|S%J#rrf7@^8zZA?mZ_ljIZRQzYa4 zr>ytWS?_1E-p^*epUZkbpY?tr>-}QZ`&`!hCGurLmVG4~@O;+$Le~4$toLhK@7J^5 zZ)CmS%zD3-^?p0+{chI#y{z|4)|<|HC$iqjtoQp_?~7UQ*{t_m*8793_lH^UKa-yl zqSU`k)PEsABddR&jrj#3!y}fdkR{P}rBETt-k9PiQIV_wXs7fA+GhC6_@JvEN@pNA^8Q!WW zbm_7{b)KSFq8p8`P`>X>1HZnP@EeeUJVH@LY&Ty0_w)*B<$6ys_iWK+UOhScbb)evbf37vC<+ z@P3uwt3nw(%kX=(dY{VgQ}KPKzP^49zh8}%Bg4|W)o8`!jtWBg0|;E=Mf(z}EU>V( z^F9@ADAW{VM?50@=~xwizbdN|7FpU=`GDG6mL4qQ|DZZm`4F1!FrBJ=3aj#I6^&1z zA#7~QQz+p6MK#-&UsU;*1Vp;{7qT8-QTbQw+)6}*o!j$jZ*_XGntwxp7hMJA`<9BV z8ZcPT2#vYlR-=oPi*p}+;4@ic2Y539f@9-^kZSmj8eJj-BTGnRDYU@>WD?2ZT?Tk3 zE*9hO?PQ`T;hQ%V{Kzjr1RCba`?)G?E(|314XbnA1joRQdl3fOPR1*+zd> z`Je4JiiilijsBwcE>90G=dWfm8%HB1X#UftP1O*WL&p?MNIkqjn7HA3C-2dIb%qpnU=cl<&5-H6{; z62;<=Qz3fOq!gjD=zpa6rd1z{HYc0$r76-v>-ZD&OpRDTo}|&%+DI$-K1S0uF_S+< zQ7LqrTE{<5{lkdvS!z$t&qKY|W83*~3VeY=!zI@T$fMAD&tJN6I%4u!rl;@Zvqrhh45ikop`8Fm`~E{$%CZc1*#zvN|cJ#x7k z*$A0`hlWg}@cUC!rfC}dOr|Jl>OTw!{7K{ngD&Ye_($#5j~i7w3S;?O(C(Gp1$H38 zZ2322V7nct`k~co(T34->Q~V}&dm_=draj+Rp7VbGWaK9_h(G`lNhdlqWsU< z;rbUCu2W*TZb@!QZcVN|QM3hu-z==c)Rcr#n>LGfCOhqZ@Q8khU`TS?~R~}B&uWch#2?EU+f%pM-UhTd6$}C_+L?pw-e=m8UM3A9R4E8 zS9Ap+zgZKzfzWGzi|`8r8Y%h&`j>`e5--$ZA}n6d@z;CuKF>DXRhKVP%h8Ng`L# zIuyI5kB^rl#PBe@@%Rzo<1ot*Sa=U&FV={~21g?R&?R_0v zu@q<4CTPTS8usXJ<%b&op=OWm7x|C0v|Q+5Z2z++BrajgcnN%Rl>b;u!;V}=Z6fzK znlo)+X#7UQx$;|$|5nS)mEXyhPlf^C@4+weo!6XM^9L<0$kP9W8m|_R*QR4@`G0Gu zoT?mkb&q3@kL#Gvmb2L7<2t`ZN9xhBx#h!2bgLeXCZibq)QO@L_WT&RL+7{Y_7J*V zmxJ~WJ-TJb76owex9Ah~50O|ef2%%W(}WKb{x%(m!dM@FdnWKS;qMTEujh9{pja7W z5q_5*?Gj%RTm$dcxAA**F+O5)n7>OGXBXRWR5f9>IC|erO2(54y9`;p!$9a#*R~2zfpx8%7$M z!_}Y;b3zUu+*0{R@(TD-S-=nH7w{>)w=y~qAUg)gU?u;!EN*|YKbeRolgY>-DAUs- zFfs_u`i$Ni4JddP_+I}h{g@-N67 zR^jWb^Iq@sf&L2347v~qOq9oC{fCbq>o|7o$WXs{E!aA8G&VH+S}dJsO1UAwlxt%t zO^6NJkGOd}I@9h2&3G&&q!YdN9lb10R{erIF5m>d!WqT3Z^2V1Qz%|Ir`2*2aQ9{9 z9(|5zqtwJ;$y}hkdfdLR#2f#`TQZL=$)Vwa8mAUD5~ya)9DRk)^Z6l;zHYn()dxiR zNxye6mdfgd@aAcW2+f5)N768-A}(1nA^6$XKLV{WJZALCzIXR!BT-~`i;P}1S1$RV zbAo1(W7TWt0<{ZGBm<*A6Ed}$$=B~H- z*4Cu^40TpvrxIW_{&HABNQ z=Gof$OoVLL{;iF;XR^L_#yAo0KTYAbVBw7E?%J9-Hkv>S?E~)7#IYl=1|i#3aN66- z+8n0Em33=ppjla`rG_AmLV;Phr9tW)3AVMiuwZL2Trj=cS{p*Gtfg7J>a>KiTw!$= z%~!%fe!*}skQBYg3 z(lF`_60*X?plt?SZ*_oYvq85Q-mTSuYnwrLil>$Xs3cR>tX^uUwfJs?FGfR#x>CFq zX$DPM9$J7p{#54G7UG+T*QcspEik^gMpeAtRcN-&lMYj27cEnYMHmJ z^$y~8uWKOX-VNjHh}XLj+)8g3xYWB{xO>LeA@WM8(f*)%#Z^~couj}0bvat>qr&YI z?(2mcL->9PKOo!$h8&V1gXq6b`VR~D2!;&HkP+b?6Yd*?JBqPmGWNJ|PY?#JPL@$` zpk47QMEAF&W>BLTdGgKW9g0h}T#Gg<8gZ}aP)yb1t?f|Us;^+B0Qc8*C?2)2sH8*j zlHygH6`hnUMh^bc)g6kZmX#}-3-#J4HTx-Q9wiatWrWZr?WhBhEp1l;iAG=mpa644 zfiSvLF+;OW7~#8cefjBA=lJ2MYjPsuQiU0~qj7e>xV{@n z%h+SNu_=tjbLsIkM4iZuItfuo-4`KsFEex7nYm9C?SnKo+8Eyi$)-a%SpE((SSICB z0rbse4%ky9&Q27y;i0OM-A?%J@Vyz$ZfpDwl%ND!UK~l!lPc}41g*6tl(^PGu-*9E zNL=sYcaf;4enI;54i7;!vMQtOGHB}i#0!E7C;7$7eb65@1l=X-dkBA!Or#?|QiKSw?g@w zjuoPKfeb5>zZ0<{{sl-T4vdiUi$q#FVp=sIbe=%+k|c|=ntV+DZwT@$=aocvQvMNx z|94segpwekeAx>icjA5b-ReO_%3&~V2i8i(TCG!_RL_$Jf^JZKO65IfOHk_VOYrFWf@Yy0hKcTMZ;-6CS7;RCNX$t^j+Qyhx@h-mH##4^MDlP}+ zw>HdgRsMT5>a}6KMBKw`OdH1HQVDY>Jx?}~yTQFoeJ8k=(|akuo60ox?U4#HUU`~HA=~@1H3RATL1!^e_#9c5Wck}1y zX}s|fW0HSaWae{3O-;TmTAydwie*e+|IC=Kg;*;3%TjmFLGtpdX_kf7=fG^7w{Bsn zNiUleXdX12lL~qJfpG3g45K-l6A7TE4<0)vsp*Ro&Z{n5v~?-rO?8YWI^S>{4ss5~ zY*V>IXf9eCMdDODg6`ruaA7=44ZSguF+Z1MF2|BuVvqxA4iqAfxd22_bfEN-LpLm+ z11_F8G&G#La%gN&PaRJJ@Ul686T<@%R5BwPHvPC{u5t)ShtkBvYAUV?lA5JFFA-3LY@>+-&{E-+jl{4S)O<^N;_)uNEgd1s1pGZN6zHjxRYR()FqKESieEEuguwsl2qO_qia!G4 z-2gHuK?YF?;C1Iop?a8Kmrm-(&+@|o<@hY zPL%#+YN}r4qp0Elb@E+nOGqMCG`Mr*|5(E>!{D6*dn&uM7zYU6j2K zFTHV0r{aYrHbxi`Vvx0?8itgX+H&bss1uHg7GuLUm{VugDPmT=*Oh? z1W;)|70m*~*vn)BJqG_7fwu2A{U5|8`UOeH&4`Ok1Qc*fP9h~2Fn>vaqFI5-e<^@1 zX?Ek+2pqRgBYfNf_woDj2A==B%<8wqUkG2nM0Fs?g*p&J$XaqB6vfl=e*p0~DaX>#Fz)(45G_k1V15QLfX4(#y|f4L{GZfyVWECSZ2CI{y|O~N1A0$& zp4H@|pKeRGx}=Q@%HN_oHZI)GK2Q1Tgn~>14d~!LUkG8+#>Ev{=Em68C_jt9o3qug z%?fp|p9So%xHT@=*NuGQ2d?hh($%qNTcukK+xDsd&6z4}MqN zVYuL*C-bkgth@*yETyno!DOyQ>f$9eONF~kxXXpRLb$cUT`Al;;jR{Ly>QnMT4?Et zs+;YKTOm|$S73i*F7c%q;zt)Ytw!kYoN3XX?@<7Ek+JcB3J%|x7(2jxLIsl{|Y z6xSwW2EQ(@#aYbchvQm0X7M9&4Ry~B$2DPy&q8s06Hd;UMX7=o%gPA4DY)^B2G^Wq9thH zy8+eV3dh!x?wp|>WEZjIl6`@3R@lI@3t8*PF*2fbzDA2JIi^}*mR-PjN@yM>n9X2{ zz0O=}@Y2DT58@sMd#W{e03QAZ9dwV8~?ce1Nmw zITzW^*J>#yuhYfS8f**FU{eEaZfsOrLp0RZN}HM?DA+<9TZ1&*8k)m+PX?R4Q>jfM zX;Z02*i`ZeJuL>RYC-*)1!x~e^`UVkiuO*eC9sm9@)DJzvK4Bf&ok~)s26?yai2ng zwo;1ZQKDEaDJv}(ZiR3wgrH0KQ0=- zb(W-uNg0p~S%CEpz+XY`xy2BQ9T|FKV!+=wP4$KsRsr$GoZ2-qe5fS%WABN?=;+Wu z!j}Q*85|iME6w|IfC~DKqT1+8;|thy*< zru7S^h0Ql9C+2a}F zs&ng!D4&KiC677-br+ev*@@}N9rw)_Np^wUgc^Qp47Iok9qUr}9`deGz^)CV{(Mw? zLleUT1v!gRAl%TTiQ80mG7%fa<;T(DKV1vD2~8_b&Nk19Cc4su6heEyAvKjJbn$x< z!-dvMbIG#D_z^+R_Y-jVjHm7gJ1vZNI zvgS}j6KiY>H?XFL)*uVDHU+g{sI{@lKYcM`jiJUi7HVq~>H`~CYePeWbF;vLjc_7w zZfZmQgW+buL&93y8sIG6+7x1;=1_}&dUvq4CdeA1TUfYNu$#0su*N1l-ow$JH8wXj zGoVr%SaUFlWeT;mh>L-i=1`D@n}Q+Jsn9fjKL+q2$wyIAR%q6ktI8XNiovF`%grs? zzOqK96TwE|A}SL~2E9Jw+mvJerr2Pmc>X69s5PEd3B~aX3~jN&mf9NRS*^iV8hV|r zN?u!Muy8fWQz`Gh%wX*X=`cK-4YJi>5rZu^SgXPISbJ4#ziQ|`hJL`%4;thOgI#Ip zR~z~@hWX`**_qd*QyBh@YF~&n@!jR{3+A z{JCBJ+#!G7B7fd0f8Hj4-Y$Rcls|XLpS$JHJ@V(B^5=t@?ZL@nK0fK9(=qUtCDE z)^1ZL`jQ@vLNB!I0BRQY_&mf?+toH0R<30|9v5+&?F^zkOS^SOyfyp%Fv<$My>3$A zYS$pbzkYvV0Vy>07kEk0(jG%2#qMrONJ(+K3DKq1?OymPD{03wNcpmEw?!%{+FkHb zxoUrrABJ>6d!AStzBIV>+wsoD_$Rz`F+UHk*Fw|JKG&bXEpUGf68b&Q%6lR}zxr ze6-h*LiFQ!dfXD%? z@lJ8YBc47WlTL_#50SYDK8)UibgY0sM0$N9BNRz^AHkeZ+T&p&vI^8M=Z_GXmye$& z(v%Tpivih3Ftf*<%$^Vo5_lyP5r&Wqr%W#(*w-AeZwO_J_#VPE%3dS@@I4|-O9d1m zsfWe;9^q-yTau2IpdQBJO!2;-Dc+03ZizMgtX;ffR8U=0audFCtR+7Ya;p+%E&nM& z74~QGous~@_!^l{&|NK_qv>Vtga{Hvt%D z(oL36oQ{dMA5>-S->c@-{$Uks|A@*T z7G;vP2Txw@A5n8^|EK_j+6&jN{Ud6A?LUaq!|l}mvsnAjJGK9!8m&rJA@2u1_r-8* zsB%2M0EO8=z5(t=^_wdH8j8Qhg!rqh=LT7UZ#v%_rA2~otG!jCd4$mb%dacS#N-v& z998@~SP-uc1=$7}{QwK{BNgv$?=NbACj5y&#eb@zrt{=NWGUeWY}k{|(XkaOiIabpMX%ey8>>!5fCy68?L&cd3wkS<26=y?!+974vhh z_AWyyhuAXyirQOyPckz!m*8@f1AejfCmj;@b6Gu;Q|UK`JVI> zk>thvBxf;+Qi8AE=V+h;gMJ`Nqi0I8U4Sq82@`3#{WT#=SkH33*~6JYw+LBL`DzfORK{BHF}_|41?aAoEH+(Q1(ZMv)Lrl#C? z{dwx8KTloum#O~0Onve%Q@{Sp)RI@HBCk%p`PHe(SEpWmbqav^+Zb{_`c;FndvI5H z56i9!V#9`=VJAU%hx#D6$LK>0Cj5g88t@^Ojx;OD78E~!A1uTZo=swjXO942NIT8= zBWxnh9>v*ln&E=3<1S+H_p{0RH((c>W^o;6st$dvmHsOf=R<4~abnzuMac>YP!Ls6 zuxEw9Xi9mO@lP^)jr^1ljFs$?5(0i~!-vJrt!xnwL^np8l1&Zh;H~Ti2$Qcyf6}MF z8ugE!JT^A6?#iB?PJ9ADv7S7u5A8WjRuXpoOxUgSelwCNHq1Z)M@I9w9bg`drBZOj z9MFbGhWis)y`YACtsQVV0L_i^2=6_FcO?+D2NQVk8K${W8WQtQFMgo|d%!_kfNcLF z$=0Dm5M&?YEAk3h<9uyeN|)Bx`1jdGkV!TzHAL2%mReh688*|<^f=A2d>&4}CRGFnR>Ii4D9 zpGPJ$KyrJ>i&sYx=LW&MHSa6$BBS_f__t>F?loJt9@w#C{hmGRdwM)F+P*20ALN?O z*HWk%gM#&Rbp+A+!Qg=r*%Dh`8{WL3)i@6vGeYLPvDrHBm%9ti^o#*lKQp)N8_H`2Wb?38trRn$hc~VOT`2ZY~@Hmx>>N|90Tz?VHkOo02;_*qNh+W38$TSU(d5Ag1x$4&bsw5{nFbB-z3zBW$Z?*gK@x; ztRYtlVd0>f84d5&Gf&hPl0Vo`oUz}Yjr=R#rj^c1f61Lic!8$IMqNTR>Gt7)#0|*% zEj*r~)RlunV^UV!W|O}-(O|#VX{jSa{fUZMDl9}09NC4O7g}oo2E$RvZ&X9exG4&V z$dHuVolR6X!+wZ7?bnSA4KKe?W+D^Y3UJE8ip2UM8&X3o;w3KPshKThZtXJ<2cxj< zve@XMl-`{<)Oo`(_1YWNYi}Zl971W)Y?#EW)6m%QvDu@u-nqGIF8wt{WOeOKS%6>| zA3Z{$27IA#WsAp}8k!mlXEYfLg<4x^OJlQ3yi#bUr>wHPQoK=AQC%87B3g-HS9BT7 z?Pw4cOpC1C&?->3r`VvSg<4i`&}M_S!p3b?sD>i!0qF(fFqd_G;doIo@#=x`MG&^; zR*1#Pqbd42wILJ?3%60YO~P#vZkuq|6RXIA%^cv}xX~(N(ISCY={8H*14*}3*4p7tNL;)V|o6{4M0dhK` zsa^FNZ^f-v(3U6aS_@T6$aP)Rk7vmeb;o&9 zN_U+nWo$R!0p&6Ypy0bElMIiYyYW=1NtXY;lW`4s2jM5_invM4#dpUwI9_Ua6@ykC zd3PLg_94Y_U~&TXY_ZcjTl_n*j04zKi80=(6~++Ad+UF_}JFznBkB*!Kh5 zq4{cHIbH#w0BKS z<^B&rKuj=bzAt0Z-YsMs4ZN#06tsJ}f}mTfJ_K$peIN33vJVsf0LgalLu4Y!#?JAF z3G~Y2jy|r5fFju~QMnw{>@>-Q+>ROWM@gJvI$=KYgJePkewfI{UWqM(rY(K-bx2sP zI$ghdhfj?&(e4E*G%DJ`lnp;wnud0Nf~2#8jkvttWx- zAL`FUd$U;&C&rNN{SYj=Dc8vGKHEEkt-%-?5fp+oGQ54S@Oe{-{^O%VV<*K|!N_n= z?sxM=YL~A)BNHWG)$=Xl1TT(Co{BR?6RbdaEFB&@Mj&jNKf=5^73F;iRH6B!a+=ob zcm#qq7ekQuHRtBlF>ms3)`6KhRW=GU>!CJJZpWauaoEqA!cB!UO6<+U<6TMe# zpG5{MF<6KtY(#3y>P)I z;Vu^L65%dgsn)IXtVY*WkFK#sgs&wYucav()6jgM!aDE;)ZGD;vZ|tObXXH%&-4KO z%<#l)aib)y{cL=jJc66JkSJsr{EbohFqW!H|5%jh^CaH11JINXjtB%=@UAt(B}ZDRe@ z4Ude5zs%xktF77(^t~_XYryxQhNw5`6^>L}<;hU_?`PAf{H+OF!#)g^Eio8C-3b`i z1I|iXnKW-Mi*o zw7Op_#eLzPk>qz{Fl1t3kXO!O^9nY#1X-}5sVQ{fgCMjd6i`+`)^?q!tvjc&SST23 za_3Z^g~Dx3 zEHnrM`d)P#rUxm1wa`$dIB%t)Rv|mRwaBn)40EaB3Rp{3P3pbZa31-_b)qZ&aUH{q z61B9vtU|ce!d)QT#ll^(ToJ!3h_Aq8QkKXB99FyHf~ANEVItKd^q_lDz6fV3BfhPI zhSu^9{IGD9!Ia(s3qfr!If#nHccEU2-FW1uRMR^gSz2AW3g|_04ZjAp52lmq&1dCsR34v@`Y<$oha+*Tqr`0iIm)j~BiOS-8|>i~UHoV+ ziV=w#eY5Smk<{g~KosiB%K%Pm~5a0_9;;k}bE zflFXVrSg}E5h&E)s5JNb*Ab2gz_45{_a`-b54kidbT&4iBNbp!A!qT$k|E;)eZ6nb zHv7Rvbhh!O){KXl(W8P?+EuUo7Br2`NR_&@bK z_bq~~hQtwe97d$e`3i?jC@mVrN-dqEG1ke)EUzpa z9utnlPP$-Z9gQ8^8XJoVauV5_W8!KnLHfxsIXq)5+9S}uM>ApYipk*0R3POaO~eMA z8e_=Xxk}|w`PpiVBgl%m(qz4JTM)n0X_?>0f}(E?H`%X%uyeJxWNzBREzPa+dJw#! z7FRYY3$}(^Trf91Wvr~aJRo+aAh#8>SwPfUCxvgj6+LEXw*qUsJ+8CTEpwuyBl zLV*NcKe0x7HrjFL_@>D;GCe}rW#H3=@AAntssL-B3@8x;JRMPUVhx>)n6!>>vD5Z5 zzExgld|DWMF4nf4Cnb6pkKh%NNVYwlwC*q34m;Tngf#p?y!hCejvH|;;!>dsd{>fEnDtxGS1fUDvx;#KPS)mT^LJi^Mp4nOo7;g3#;yEr#x zU!~9s{jwKKbS!jSc&pTZo-8E&s1%|fbwZqgc40T3CpFr*U{k$?@C0t?_ZK~emvc)D zpa_TND)LU?c5-Z?C0;&IvqG6X=hxv7J3$jA>9FUJcg0(*qHv{CuCyG$* z{n4m9>RzWpW%)3)0Yp3o{*S^Rq!LOTj%9-dqPXiGz!Y}{%+jZ!@+qVr;#S;@`T0=X zf;cN~Egx4)Z-U4Zm@DJgPu3LUZPpEw$wK^oV_G~f*6|zD$)d4-jlW4;de-rqY{0)u zPezK-xC0RYI)5`s$F*1yznQF~Sc+SS?9I!uKDUyn8yzSJsy8#!krL&j{5A-MK>@}7 zaMCa8VCGZ}FgX2+3^0$DeiDj%2SGS!51Iq`7RXwMtlugWYhWqgCZwz7v!8~ymU6pg z&UUNuRd5`vN>(+XgWGN8E1JFCzN38F5%6I5uH09iM~FXjQn8~7g$=*%zC9hgJNpjo z-PyTE@!lvbERL?lv(`-xz`niR2P8ly{@BRq*iCr|x;wXZUS+>O6kMB&2VWxcPzlg1 z4C1=>rj3_kid-Hw?Rwy%eSGwYw0dW6P-LAkgs(+=lNWy*%IcR|F};a|>QqrmJQSho zp?y$T`*5VDj%ng`sB~5+5+&;w&5e*@)yXkO;AbecC$vJ($JAZ?%~As&bK=!&UwwMnSsEL$N(Y&>?e6y zU|}ow;NURO*Eu|p;Wk=uK~w-}$-7{P5f}s)h)3SqZ5bI(4jsxjm)kGGd@_+!6uo15&GzW!NXQ|*>5@w}NX~dV4*}55p z$qEY2R`{%z=Cv11nU|3+mlA6r;k3^P1zhsQSU)zD=uf05Gz2+Ht}AkYvegsXuNkV< zF<@E3+Y&l7aKp@|l(`%jk)@uwVA#Kv)8{}$3 zeI4Fu#jSS8;gCTF4LWL#g8zC${X0WNiMBi7?`=}DO}z*H-UWZ}fxicdwVW0!$YWxf zrQ<$u7l7+EmyY{X(=_YH13pr0t{X=;DB_!C%!cunR`~UHjJIrr&^-`ZY??jed-o~D z2NY^9HjA&hL%o)`-3PC@lEJ50JT!jriYWM(f&b|Eb>OEM{3Z!De8q^O+@xSxO8;Kn z@n$kkZYH+p7RPg|s-sgB8Cd9YcGEi)=WaWOJ2M$XSVlp^MRpGHptwRlabP)=yu~qoQuUUA| z(pRGvKBIoW*Grh(F-+&tX z3JZ{TuSkukkOe6wMdCt{loaEG2peiZ-$SFh_0s2 z@s`QJ)Z-{z1Vpz%P9bMOdSWsH<5Do^0m42&*e(&aqq@A!=ShXy$u~!>bi^X3&hpNQ z`YJ#T$RdEu=TVf2`sztUkJ!MEkr3Mj$3P)quzdp6^cg76vqM~O;>-Gd1oG)Yy?7dC z)q`0b#H_A_qY%BCAI#);WhTF?=FIPEdEU4NvlZr^7O`vjwNaPki!eyUMUKO9BMM}` z2IT$y_#)4HqaHj95=wjVs6;>E$0FvUfi~_y>ujXm2T+-uVzU+zko7$2$>VI0G#yjhKFFt|4X+^wp-W8kM$Xd4)v z2%+=a(V``M87jX+orshvr}NRG)bXlOOb=-Tkwf*&SGeNTg4f52=mybeOKk*wNq9TyqEZ%Y_DQrQ!|aX>(F9| z1n-&ni>g#t3hiB8g2HKMu}!50Q&lKQ#kuWoF@-LTt~K#5R#k-wQbJ#;^6?$$KQ8X@i)2(|b`yqwIk5e%+jGFPq{U&%U#Pqnp zgl<%QT$tfR_bT=TxV_qw;4adiqA>BEpxBpB(iJD5W1d2*lCJd4{cisdQLMN-?pkyT zFFpH=PeYQ|o1dZlX&TqXI`J&6g*3tt;-_E~z=|nk3e#~TDT=~BLnj6I)?|I`blf<7 z3Wa6k#wjQv|14BOh=G5OMwi5`$P$8~U!ZXlg}t9CS|el*<67LR?>`NoFzom{kdpd41B(yaQm)V2WkQWzPuSv{ZELZ$n7e8$E#DO+jQ|CQKA2^KzCF2UF_i>3-hdt`z`2Q*LiZC@?+7vKNh|F zW6`@m7QOpZ(Yr5$dszP&xJQhiV;}!i^zqBGkAFsCJg52%{&S&?-t=Ef@Yb`>{4Msd z^*gk|Y4`9ivpxKqOb`DSde{^_Z1LYw(YGc1i)2CBekPG(dEeuj* z`t%eNeQMc#>dNoaw=mJCmW;6b^yjurFKYNLedyIG{thO()lZ8kyG4U;{gAM@xlB%4 zY)}_EZkU1|`19h2526a-&yOF4=gF}0A%Q~AaNocl2lue{ad405Pc!}z zb`YD2@y8hutjh^xqw$X;!($=tSWh!~6Z~7z_bKC9hO_$<4CPQi4eprhyWk#or@=kp znPB``NQx7?zCW@8k(vAxEN%vrB$l0jl1+-9{}hYXLNC>d+5Bk)AY!Dr_-6nDJM6Ov z;gTIzOGMP?8T3U$?DSt?D=-KR((*52a8gPivsw{+0QZv{ykBAbD-6g_7m%OWM*Mje z_rcJJyM*297vM{PFNcq>v#1LIT@vsc89-dCzi9*V@3J_UtWQpkVE;)Pf~e+j-J{79g^LW$M*aW=jrJ`cht|B0QUDD(u2 zdtsn??K}ax8%5+xUpF`%({##h){=i4@{>ybp%r64;xTAv;C@ zPztkWgXu997&8Nx)Z5mBg3hDh0#^v3+a&* z*FEcJPkit-sy7t{+Au55wXu|^XQcmdVyr81K;hg0v+_HD~zFnOM@KvB^-`+hv zo!ehSJ!WqjbJYH_`W#>TYeDWLp00oOuS0eyF*nP|!PlyU^ul8$qm;CUv4a@;4UGAn<5O>+j#c=1w!^CglmOwLC0;f0+ZvB_J?rl0*xVV z!PGj(+_wk3Pu|rYBlX0tFMLx^1-7js{LIy zp;W(j6Jx+jk4%x?UUge>x(ZYlUBz4$O7TbCdb_yi=ALQ+%=&91rIUw=h!t*h8UOX0 z{AV-&h$O`X&BndRkdWRB?VLj5bu&1&mi%rugefAv)G`K_qdRl;t`m4_!zoNQJ(ni0 zEporTS^ZH}#+n>qsYmfOtM{CGDs_Dw3^rD%FI(BiO%R0y*kJp31n7*!kxH!HeLz)y&_U|T^i9(dGj*+SV@Lw3Zr32O&FAZ?Wi$piRK-hfo#Z}Fb-JgKCb z)Kax&PSiE%&!L#q&hNvHBO$;M=biK2NEE5CX4o_9M?* zTaaKkQbFE=f29hzP~=;H)>7>ZRA8JLCvOf7s3X7TWqx6PVRy2F>mo?sq3{sp?>>AulOt!;75b1dETGyAx-m!1w+_OUdix+6 zku^1qpNhdJDwTTDdd^__YLV=Sj4bsnW7d?a68+#( zS4xdNvKM=x^kJWV(DoQvYnLV4ykMNAydaq}#8V)}0w49&k)-ujlx;ry#a1TrB`Zu% zQc26Yj-DI4pVRMSLXUat>)E?ukpWwVl?JczHNGouI)=x7el5N}s>J8+M@I`&sH3&6 zns1juBE2#)kNq1+kAW!P!_|IbZ{~xjPMC=f*Rq$#yg=uU!quhR^0^$YAN1&8?Lwls z=2MFhuf>ja>)m$SZddC*R55JnOFBMxUoXokuS7kGh+vdrvBR~Saz>AK68{3-o5RMY z)<>`D6-kx}>0K?92*O3NcS?0T16qGAd?$Z{*XZ_<#h3s%jpa2!ioGAH-J;nk2`Z*5 zCmG|a!f>U9G*S2@HDdv{u`kX7U4P(4!{T8FX8mc4A4FQUye~L7aB#$gSKdBQ+ z^;tS5oq?ZUk{04kK`XJg{TG|62k|W(Eu?v*(+Tv#ZWEv&_Debn_4U|2F&<%?{!8=p z?4#J_eZ;_w#-~ z^v|KB7m!9PNFu5zqP$JGyNm4tk`}U%xrR;u`MFb%IHd7B7sGBM%6-LczscsCnjLfw z4l?PX^Umi2&6k1vdc=00>jWQt3zEaQDjHhcv8tmu{>CUiHOge&<63fWNt*wHIZ8vi z<%?WW(#+gJ`Y^tmE;tQw!1K+6;n$06nV`?!2m8u=_NyTlmyknIINZ}NK>L!BBg>KL zz8WQbrNAa8F3OKnId+a>k`h6VQ)#g%(b59Rf#kX@tbFbp2_*xHLvai5gz$~!gTNw* zpug-xuN($s2ORSF_ERzdqz5^KRYLv9{@^5iJdMO2;McS(FrP3z%U`L_`hwpND=*Ns z8K%72I^`G@l=^F%4WLM7u!}ebq`@fg%pBYst^alq4rlC?&kg5(PDQUWdzY7-c+R{g zEe$&`ea+%(Z3~&E(r-%UM1r_q7JoieObM43<`ipp?(06s47X#?Xua*hxXm+wBm6Jf+yb4;$##ZqE}Q?-3e{KHL%c{+lTbfCJ;U7gou(+R8dXW^)rZ$<;iY_p^DatOb``EfVonvTO75aF zMDVr|T?u-Z0h?u_t5-@^uMZ8MrbCP2&gMWrlH#8#dX?)vhV^b8=EAO&UzF{xh>q#0 z5JEt07cbYB=t?|+Ux|kx`O&XFcWOwCM>C#Zm4{4pyLO9J-|D9XZlAv9Jbp75+W0+Q z7Za*JVkJHqiX>zuu?knN&T#l%g6?a^j4-xv6#60efO#VP(2A0~?Z~&8PYmgYXW%u9 zl;ioJNQNt32vn!fwSN>J7Z{Rx>ab$P^cv`N% zOFeB0N-Q*Zz`loMm%k7F54AKVj6sp;Om6nJrhec#N`i9|ddV1xuXkRgvykdz`!Y>^4Q5Ynsk` zZrNvI(R4q45_-tG{S3rTrso|caK}o=A9D>!2dpB7A8KtP1@0+OK4-~k6wT(39@unxbt zMq~E3PAwwYgy|I44jzbFEc7}qbquiByD0KnNw=XuHjP(67*y_i) zEKZJ{JB+8Q*>fC0?A(eOwvqFRh^3t{Vj4%=8$8J#dG*k_e)OFMn;+xy1+F@ap?g%2 zgG!4|&lF+b-}|xkOM8;n#<#ePEODrw>g*-XBU%}mlvh+)Yj=AT-DGtRIp{VJ@2Muq z+f2UB4ioRqmK(O;37Pm16+=u4o)12E7o92-k}9&9nVi7vIbxp2tcBkbg4G)ln-*}v ze!h(UJEZO`$fO&ey_O|K1YcJT@e9THE9!K^Nu^Yglp#uJ1~c4|5WW<5K-0E%6i0uc zrGpSrL2Rlt4MI8VTbjwzFDera<1q`_CegxN`Z4^eR#KPijSqEAt_kk!GUHwj-&g#( zRP<88BaO{0cU3A0-UuG(tDv$NJ92`;aB2Tn<* z_S#p{JNOK34$#?G8xtY!Ft@&uw?k`j8u~;D9NO=192~q1o=u<48g>TmjTEaFz!`FJUqQPKBJbtyxzLSR*lN@!*ef;>#bTD_C#&L=_?-w-#jl@Y&x*b~l zMNv#MI9y+&K%*>%K=(kcpVk+)wsJoN~EGJNRA$RHRHpmwpKu>io91``UXYFeiS=cXfRL&8dftO*@uB?*83wn$Oxf zO1kiNLwfvHZ^K&W9CI>3x%-r^-8<*)VC-A+{9x^_Kvb@JA=|C=q%)#H%6I=VPiwEN zq1n_z#!Vu7qnnVKXdA+iWxx2-T{)y$5N76*n%zw+I1*t)0DhF;#^0n_-K(_x7P+-; z#^fQ)$z%4!Ce}(-!LBq7-+%pQnd5~*c*-l@bvrE|uvG+}U2cjPCM%AceI`)S4xS^1 zWjm!;LP*_WXSer8i%AJ+kONtlGwul>#nC6UI)h#g{mRR6UEc^e`i( zh!Jb;dP==wd{)0qio6P5dhLfLugmQpPIQvlX;#>H@F^%|{DALzQaNxDdPU&gSb4+x zCx`~TTQ_{N95I>`y#$RhJe!7X3qRQGk~*qq-7glxhU!^! z-gBH1wa?Rs8w9-ZOf6~(vp3lf_cA}2yQ6Ikd~3Hw!^TkyjpTdNa2@Hbz|R%@1G_T4 zU)9N^yCSxxOWbs~G}n9BAPju2Orne6pfqHQ#~6nbC&y2G6q-rwDUQI^nzJP|y?FK8 z-_@@T&zc+KYeQEfvZcPQ{sPZVP`dd~`R=UwnAe6vfnag8#9(+P>$sQ8|b zSUA(Xk56l7QmgfSe0-FaK;;?)ffzROx^i?;OT2nsHLKU^Z)5n*Q7T-VieI3vT446V zq2ZxH?P6Vv#n6nT>-OS{ohPF{Db{pp6^OL>9 z^_dxE1SwZ(?`>+&vEd21QM{aGMfFcPm3axoOCO}2o)hwv8=v2^vHT-f+b3e$Iov96 ziKOKu)12LGd|j`f->-WYl*bdk588T3d6lFp83hEj$9+@!tBi3$qBg$Nx(oZDFr+Uq zrc%GDpG+&g+*E?)HNWQ?NK6j5j14w3F}T^g+1rSNn_eR@8RZ+rG%GJ7@k~Z4tKA^v zy&7mTveSuPO>0lDgd`zIlh}z@mM(PIzoMS+}^vz4xy zKD$}$q($ZQ?J#Wgu=CoVrKATso^cp4Y67mC4{{F@Nob8UIK7~+`@tct?G4}MpOlFG zPMXh^%O04p>yChug(U1UBEl5UAukX=f~p_)>gP;`nw@HDQFBMZUpQ`?QRubbacB6d z=>iT(k`bW~q)su&F8eph@ddhhU{ z=6QZ!lWyw0+*y`xs%8H3$)#J8?M!lfr_pOCM!nZn)d!20wIi1@9{lo;Lh>~(*;{tM z{b>kAWu{+@c;Ae_9K9z{mQgc2g{`j+sbtt2EJ+5D?xt{%dydEm-x`JK$tSVOAt9&Y z!Ck}DO+cNzVtRA^U%jhYf_kZ!E4l~W)w49WKWADZ{am39WOsGEi#X0+Nz2J6QA4Fd zw;4^6FPF0B*xdl{>OxR!@+G3O_MhBH0EoivJM-_8O3 zd|%IxB!NPvyTqSg0uRG%Ztw~+@;sc-{~N~d%aEBMT6p=VjQ>RHUr-aT+%Ww)`2p0Dz ztgK5SRu>yI3;&j+8IOOv!=8Phsl&v z%rdV(JHdFd+aAxbc8s74dHgpNxAd`-lRQg|OKBZXx6P#>GWoV)NChkMGH2IsF7AoE zZPvA5&fk~H!@v8?53E0_7-^lEtt?s@%iCYZyrW9{S^$$6PJwwfsr^v4`KW{@2+ zv0b?zi}1st)1nJJ{=Jd8esn-hagyn38G?2DH)u(_>pDtXvpa^^fp)6ubZGRRrhTM1 zk2iX*|Eim@U!s0>XS^Uw?)ZJk=&{d(;7QwZ7z7#7r@vADcIfessso#*;=hv`g~BSD7%%P)t(6{?b$Pxs&rCEd1QQ4 zyMy~qTF8V8Lx6n3b})ouTBio;DT1e9N3pmM>%I3SA_9x^x{yYQGmb!g3MrP%Yu#j5 zc6hu|*jHV+@J0#WH-CNKBRVo}+mbJ}1DoU*?{{(1tc(0&exD@U7hDC@CEG3MGHCOR zoX76@`OYR)6tM#;g|EQze&(;E!{|%(^mQz*v`#2tHQCwA-e_L^5 zsydf;YH3^Ipt>K&>L?p+&d0-H$!9~FI;@_&XGNWGzzEg)J&b(Gb-4Up*!Cfw zrMSu}){5h5*F|$4K1wnD%hrl^GHJ4sg3@#h8R)w_)TjB|m#fS<1lBDkq<+pYDLIKf z$uUV#-3om2-jXwhoGQHVtS4BUrM+@@7y(o7BD{N|WU4=>Wed~YszA*ONkO(Gfg&IK zyzSNvW-p&7Er;5ZpqF0PS(=oB7vbadp`l;tRAPSiFcsoT#UJdmnYR5{4``t@jwe*zQ!UpCJ@;;}LLqurRg|n1`5iaLQ z=V$G>Md3+2{SLZ;o?m#O6HmVOWbtF8eoYV;WGH!12F~R}O}C=L7eAQ@U5ebHbJ-y% z9$d5wk5)*NMC9u~aPbfFFMpK)LDN6e%h%)j6+Try@VY5mbt9jFb@2|)d{1*R{8rf4 zGUGWA6T7qg)!j4EG|9wUwg?Gy|2AgCw>8#T0nGTLGNc&n@;5)J?)TN3CUf0l@9y1f z{{dS%HaY~JepXkUHa(RaTic9XY_8`e4~ z&Rj!1^6t_Jm>_Iq6#LGku0{UF9W~OS zqfF})K3nP1JvEb>02>n!bjy@}-foU-aq<#QRAn%6s6Dg#m)t0+BTK7&e=v_rEhfel zFIiShG+iHM9Kb6@cO@-d75E#VwYgv^1`Xfdq(rwgZk>@Ub<#40VPr9HZivkdFFObM`D5y1jp0tNhJM(lx5bZ z&|0PM2JgtN{;quudfM;u>CU(Z-@LpYlyrA*gQ6|{z?J%#HBf~iL+~WHh2iZ_@kn)_ z#gr;vx-46U2j-}<8kFu!T)YYe?K@Bb7JwCf>b}IlqySI=@X*68U0m|w(D!~90{~FM z1^~DK|2^EGcD8O{K`_MH$UxA*$rc8-*9Ut+ePDKAF98o2)B_Cjb_RR>7rI5&nn8{U z0Jxx`Z2w})q3`|+>Hvkg+j@J0VgHL~gf=qJ`Cbi*2LNEx0syT4;uWE1_!rL|?B!+a z=nQfEKg=_3R0&~0`z(YuhVfrG5Yc~dKHko5|I4y}!sn3ndGP>^>cav6nE!cDCNOXoi5lyW4-`t^TGXwH@sY2Mz$h z{;wBLrT$}u9n{SYZ0GF^h5RqK{t5VYiE!fy8Wv3k0MP#ncrW`OAk4$=e}wuUm;V1x o@82#-Dx*QpuVJ>Z00A#Q2i=!I^n3uoBlO5dyE49sjws;&0sqX_qyPW_ literal 0 HcmV?d00001 diff --git a/samples/client/petstore/flash/flash/lib/ext/flexunit-4.1.0_RC2-28-flex_3.5.0.12683.swc b/samples/client/petstore/flash/flash/lib/ext/flexunit-4.1.0_RC2-28-flex_3.5.0.12683.swc new file mode 100644 index 0000000000000000000000000000000000000000..e41bc68abd969ffbbcc736ff8543b6740cb94ee1 GIT binary patch literal 194680 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

h-lptIpe;z<>mXEWr^6cO2Du~P4-yR#jS!6z zjS-C#O%UxQx{>G&L^l!L!s_aw$~ATeIUSNJQP-Z;c1boSSD-GMVna~~YTR3yrfq?B zCbKB0gT_6mw`LXlPg^-kK~N>#!Rp9=qjRn{8R~rrb3p-@B%69)+aWNCt2d$dl~*U* zO)yGYMniQnMOHPxP$xr``osE>94_iIv0~);)9+1bYcFQBZw;t3{c4|PRjrDC8YLTLR^ci#St$uOkyd1TD``pzzHes8 z_z|W*!irfx#!TL4*aFPo!iYOUEWDK&>`AT7CabEp75G2RL{mJ?^!Kn_!R=(#*;8c= zknAk7y^zsJkxU~+viGu7b&e!3q^D-bH;2aw<L4A7STBu<~=HLRTLAnYhG) zWDpj(BYme`+r-t-3?lGdyBW1>$tGKbe;2Lo9byeiA(6{xQk2S7bl)`@yDA=ClcnNU z*T@J3jHgY@%gg6fl$Ms>c69J?#m!SlM2b~z^LO{@J@7Mr<%~o^0j(3Yup2&m~uM>1$lkEi?@toi_~{W;KDR z7VrlGQ8nfd#neb75?AAiC@kj^iKvQGK!abYYECUV0Xd}N$ z1C~MtCR-g=l!0xkX42|{VWVnCZyk8{L=rHqk}FkQtL9oQS}7eW%}why&4nHpOS5j-YPEZ_?h5!-1FJTx zy)IiJxf@Uo#FvH8(#Gs6X16v&Ot;nEmUXvC_H|Nz1-D+_;O__!4H69z4HJzJjS`I! zjT21}?IgO9=oYrpXR}JMmULM5qsO4i{VoS%UW5~st8U>MQ>qd6Q>`IL(OLuowbUW_ zC$C4CPHV$0RtvMOxW%F}J9Dv>XtnNe7mE*IA*Zz!oDFS2(VpR5C@D)>vHvlY)Z- zIcWG47a)((TBbsJ3>_7U2u=fvQ`JzO@pg!S&IaL8(j}Qz1?JiXlRm@HT{R^wVPsEW zM0k!OtdgEXAJrm)2P4?b2-C(wYMSXYMuakqV8{BQ63r_{gjZlC*TP;w07#>b2rBsZ zv{J%?mO|W1SWsPfwXOgrPE-H>lCj46cVQt=kbI`4)T+!Xf6ABf5usB}v>p(6SXue< zlrIqGd5-2q$-3oa^Tmmdzh-I|MY+K261##z71wGx6$eLA+^dnvzaC1F3+NuqZX7Z7 z#uFrLguQ4r^U5gH6O*FN!nkHrX!ep+VKrr!9WEytZKIPSiC}jbZrlhqrZDo2Uf2P> zGl1Pt0PYsa-xc8{NY2Pas28&QBL9}MMO_8q+OEh@8UEhN8WupVFN*i3*WdF`A$Nqd zAffgcsc7d7ob6kM@;tnEcfR;!ifJQ_V?3ub3;=AVE$##wo+9gs)+K9P)JRrRIf8Dd z4UR!qT(xvMU@t`T^P^c08jS3NV~96DJUW$bTbkQ|5e@Qn>=S2kB$>>g%b6@WSd)}R2&*`4=`$8x{4+{ z6~lzK32w5C;=kyg zal|gUOf!p!X1eBOr!XqLt7vj)@;goz<{x8Uu#j0cH=-@%aH(hpt2j0?HZa%4$81j^ z+_3QvT<);W7gig<;=75Olfy*SB5Ycgd%ebVxn`M;EGExoCbPbIp4ygN#JuVC_XsoV zvrCJckUtVov6sW{(H|%PH^f3=znX~p0|-W@2E(BU>^5TwH57&2W;~n-+6!YzjRu1; zHRzAV-LtzQY*k?&nuvx&u34i&jYbkNN73g`4FXFw5|4z`L?{+h!;wf>jraq8H5Lg3 z)I=m21QLY1Xx#588YC+Gj;N7vJm#4@DX39@DC(X)1*wr}G^&P!ekfHq9<&$QBM

c+=2zb8*`tZoifDYR)0wel8Dk`8bzH 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

=VKvD_j_= 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 z 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�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

8a+^k&lv zJI>ziUkcJ1dxiXgPfuNOoUNF|9^Bt<2zB?aN}R9~fR8&ay`}zJI$1k2a?l@x_2u>? z<3;6=T3a%U?z~?|Rx!NShvIWZSrfc&8Ch&qEll`QpK zU8D`UJ~cWK8aqwKW$)0CJ~(>u>ln^}H9YR9t7V#8R z`oZ2TW=hd@*!wd5w173@mhRSp1t&wOc-U0wsXVs@*j?A^GP7P($J(2qo*&;QOkFgp z&*L>J&uZtO{0LwD^0`mxZRkW+;$Gw>u@2Ea literal 0 HcmV?d00001 diff --git a/samples/client/petstore/flash/flash/lib/ext/flexunit-cilistener-4.1.0_RC2-28-3.5.0.12683.swc b/samples/client/petstore/flash/flash/lib/ext/flexunit-cilistener-4.1.0_RC2-28-3.5.0.12683.swc new file mode 100644 index 0000000000000000000000000000000000000000..b69064ac765f0f18a653b41d75eeced098798172 GIT binary patch literal 11827 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 literal 0 HcmV?d00001 diff --git a/samples/client/petstore/flash/flash/lib/ext/flexunit-core-flex-4.0.0.2-sdk3.5.0.12683.swc b/samples/client/petstore/flash/flash/lib/ext/flexunit-core-flex-4.0.0.2-sdk3.5.0.12683.swc new file mode 100644 index 0000000000000000000000000000000000000000..a90af750bb5d351e5f4b937975b86b9c0e69dd25 GIT binary patch literal 165338 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

;oB7G##fs?TY%1uw5tp` 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�~c8v?UGd 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 M!Xh9Y)XD@T0fItD@c;k- literal 0 HcmV?d00001 diff --git a/samples/client/petstore/flash/flash/src/io/swagger/client/api/PetApi.as b/samples/client/petstore/flash/flash/src/io/swagger/client/api/PetApi.as new file mode 100644 index 00000000000..b35cd5efdc9 --- /dev/null +++ b/samples/client/petstore/flash/flash/src/io/swagger/client/api/PetApi.as @@ -0,0 +1,336 @@ +package io.swagger.client.api { + +import io.swagger.common.ApiInvoker; +import io.swagger.exception.ApiErrorCodes; +import io.swagger.exception.ApiError; +import io.swagger.common.ApiUserCredentials; +import io.swagger.event.Response; +import io.swagger.common.SwaggerApi; +import io.swagger.client.model.Pet; +import flash.filesystem.File; + +import mx.rpc.AsyncToken; +import mx.utils.UIDUtil; +import flash.utils.Dictionary; +import flash.events.EventDispatcher; + +public class PetApi extends SwaggerApi { + /** + * Constructor for the PetApi api client + * @param apiCredentials Wrapper object for tokens and hostName required towards authentication + * @param eventDispatcher Optional event dispatcher that when provided is used by the SDK to dispatch any Response + */ + public function PetApi(apiCredentials: ApiUserCredentials, eventDispatcher: EventDispatcher = null) { + super(apiCredentials, eventDispatcher); + } + + public static const event_update_pet: String = "update_pet"; + public static const event_add_pet: String = "add_pet"; + public static const event_find_pets_by_status: String = "find_pets_by_status"; + public static const event_find_pets_by_tags: String = "find_pets_by_tags"; + public static const event_get_pet_by_id: String = "get_pet_by_id"; + public static const event_update_pet_with_form: String = "update_pet_with_form"; + public static const event_delete_pet: String = "delete_pet"; + public static const event_upload_file: String = "upload_file"; + public static const event_get_pet_by_id_with_byte_array: String = "get_pet_by_id_with_byte_array"; + public static const event_add_pet_using_byte_array: String = "add_pet_using_byte_array"; + + + /* + * Returns void + */ + public function update_pet (body: Pet): String { + // create path and map variables + var path: String = "/pet".replace(/{format}/g,"xml"); + + // query params + var queryParams: Dictionary = new Dictionary(); + var headerParams: Dictionary = new Dictionary(); + + + + + + + + var token:AsyncToken = getApiInvoker().invokeAPI(path, "PUT", queryParams, body, headerParams); + + var requestId: String = getUniqueId(); + + token.requestId = requestId; + token.completionEventType = "update_pet"; + + token.returnType = null ; + return requestId; + + } + + /* + * Returns void + */ + public function add_pet (body: Pet): String { + // create path and map variables + var path: String = "/pet".replace(/{format}/g,"xml"); + + // query params + var queryParams: Dictionary = new Dictionary(); + var headerParams: Dictionary = new Dictionary(); + + + + + + + + var token:AsyncToken = getApiInvoker().invokeAPI(path, "POST", queryParams, body, headerParams); + + var requestId: String = getUniqueId(); + + token.requestId = requestId; + token.completionEventType = "add_pet"; + + token.returnType = null ; + return requestId; + + } + + /* + * Returns Array + */ + public function find_pets_by_status (status: Array): String { + // create path and map variables + var path: String = "/pet/findByStatus".replace(/{format}/g,"xml"); + + // query params + var queryParams: Dictionary = new Dictionary(); + var headerParams: Dictionary = new Dictionary(); + + + + if("null" != String(status)) + queryParams["status"] = toPathValue(status); + + + + + var token:AsyncToken = getApiInvoker().invokeAPI(path, "GET", queryParams, null, headerParams); + + var requestId: String = getUniqueId(); + + token.requestId = requestId; + token.completionEventType = "find_pets_by_status"; + + token.returnType = Array; + return requestId; + + } + + /* + * Returns Array + */ + public function find_pets_by_tags (tags: Array): String { + // create path and map variables + var path: String = "/pet/findByTags".replace(/{format}/g,"xml"); + + // query params + var queryParams: Dictionary = new Dictionary(); + var headerParams: Dictionary = new Dictionary(); + + + + if("null" != String(tags)) + queryParams["tags"] = toPathValue(tags); + + + + + var token:AsyncToken = getApiInvoker().invokeAPI(path, "GET", queryParams, null, headerParams); + + var requestId: String = getUniqueId(); + + token.requestId = requestId; + token.completionEventType = "find_pets_by_tags"; + + token.returnType = Array; + return requestId; + + } + + /* + * Returns Pet + */ + public function get_pet_by_id (petId: Number): String { + // create path and map variables + var path: String = "/pet/{petId}".replace(/{format}/g,"xml").replace("{" + "petId" + "}", getApiInvoker().escapeString(petId)); + + // query params + var queryParams: Dictionary = new Dictionary(); + var headerParams: Dictionary = new Dictionary(); + + + + + + + + var token:AsyncToken = getApiInvoker().invokeAPI(path, "GET", queryParams, null, headerParams); + + var requestId: String = getUniqueId(); + + token.requestId = requestId; + token.completionEventType = "get_pet_by_id"; + + token.returnType = Pet; + return requestId; + + } + + /* + * Returns void + */ + public function update_pet_with_form (petId: String, name: String, status: String): String { + // create path and map variables + var path: String = "/pet/{petId}".replace(/{format}/g,"xml").replace("{" + "petId" + "}", getApiInvoker().escapeString(petId)); + + // query params + var queryParams: Dictionary = new Dictionary(); + var headerParams: Dictionary = new Dictionary(); + + + + + + + + var token:AsyncToken = getApiInvoker().invokeAPI(path, "POST", queryParams, null, headerParams); + + var requestId: String = getUniqueId(); + + token.requestId = requestId; + token.completionEventType = "update_pet_with_form"; + + token.returnType = null ; + return requestId; + + } + + /* + * Returns void + */ + public function delete_pet (petId: Number, apiKey: String): String { + // create path and map variables + var path: String = "/pet/{petId}".replace(/{format}/g,"xml").replace("{" + "petId" + "}", getApiInvoker().escapeString(petId)); + + // query params + var queryParams: Dictionary = new Dictionary(); + var headerParams: Dictionary = new Dictionary(); + + + + + + headerParams["apiKey"] = toPathValue(apiKey); + + + var token:AsyncToken = getApiInvoker().invokeAPI(path, "DELETE", queryParams, null, headerParams); + + var requestId: String = getUniqueId(); + + token.requestId = requestId; + token.completionEventType = "delete_pet"; + + token.returnType = null ; + return requestId; + + } + + /* + * Returns void + */ + public function upload_file (petId: Number, additionalMetadata: String, file: File): String { + // create path and map variables + var path: String = "/pet/{petId}/uploadImage".replace(/{format}/g,"xml").replace("{" + "petId" + "}", getApiInvoker().escapeString(petId)); + + // query params + var queryParams: Dictionary = new Dictionary(); + var headerParams: Dictionary = new Dictionary(); + + + + + + + + var token:AsyncToken = getApiInvoker().invokeAPI(path, "POST", queryParams, null, headerParams); + + var requestId: String = getUniqueId(); + + token.requestId = requestId; + token.completionEventType = "upload_file"; + + token.returnType = null ; + return requestId; + + } + + /* + * Returns String + */ + public function get_pet_by_id_with_byte_array (petId: Number): String { + // create path and map variables + var path: String = "/pet/{petId}?testing_byte_array=true".replace(/{format}/g,"xml").replace("{" + "petId" + "}", getApiInvoker().escapeString(petId)); + + // query params + var queryParams: Dictionary = new Dictionary(); + var headerParams: Dictionary = new Dictionary(); + + + + + + + + var token:AsyncToken = getApiInvoker().invokeAPI(path, "GET", queryParams, null, headerParams); + + var requestId: String = getUniqueId(); + + token.requestId = requestId; + token.completionEventType = "get_pet_by_id_with_byte_array"; + + token.returnType = String; + return requestId; + + } + + /* + * Returns void + */ + public function add_pet_using_byte_array (body: String): String { + // create path and map variables + var path: String = "/pet?testing_byte_array=true".replace(/{format}/g,"xml"); + + // query params + var queryParams: Dictionary = new Dictionary(); + var headerParams: Dictionary = new Dictionary(); + + + + + + + + var token:AsyncToken = getApiInvoker().invokeAPI(path, "POST", queryParams, body, headerParams); + + var requestId: String = getUniqueId(); + + token.requestId = requestId; + token.completionEventType = "add_pet_using_byte_array"; + + token.returnType = null ; + return requestId; + + } + +} + +} diff --git a/samples/client/petstore/flash/flash/src/io/swagger/client/api/StoreApi.as b/samples/client/petstore/flash/flash/src/io/swagger/client/api/StoreApi.as new file mode 100644 index 00000000000..061878ad257 --- /dev/null +++ b/samples/client/petstore/flash/flash/src/io/swagger/client/api/StoreApi.as @@ -0,0 +1,150 @@ +package io.swagger.client.api { + +import io.swagger.common.ApiInvoker; +import io.swagger.exception.ApiErrorCodes; +import io.swagger.exception.ApiError; +import io.swagger.common.ApiUserCredentials; +import io.swagger.event.Response; +import io.swagger.common.SwaggerApi; +import io.swagger.client.model.Order; + +import mx.rpc.AsyncToken; +import mx.utils.UIDUtil; +import flash.utils.Dictionary; +import flash.events.EventDispatcher; + +public class StoreApi extends SwaggerApi { + /** + * Constructor for the StoreApi api client + * @param apiCredentials Wrapper object for tokens and hostName required towards authentication + * @param eventDispatcher Optional event dispatcher that when provided is used by the SDK to dispatch any Response + */ + public function StoreApi(apiCredentials: ApiUserCredentials, eventDispatcher: EventDispatcher = null) { + super(apiCredentials, eventDispatcher); + } + + public static const event_get_inventory: String = "get_inventory"; + public static const event_place_order: String = "place_order"; + public static const event_get_order_by_id: String = "get_order_by_id"; + public static const event_delete_order: String = "delete_order"; + + + /* + * Returns Dictionary + */ + public function get_inventory (): String { + // create path and map variables + var path: String = "/store/inventory".replace(/{format}/g,"xml"); + + // query params + var queryParams: Dictionary = new Dictionary(); + var headerParams: Dictionary = new Dictionary(); + + + + + + + + var token:AsyncToken = getApiInvoker().invokeAPI(path, "GET", queryParams, null, headerParams); + + var requestId: String = getUniqueId(); + + token.requestId = requestId; + token.completionEventType = "get_inventory"; + + token.returnType = Dictionary; + return requestId; + + } + + /* + * Returns Order + */ + public function place_order (body: Order): String { + // create path and map variables + var path: String = "/store/order".replace(/{format}/g,"xml"); + + // query params + var queryParams: Dictionary = new Dictionary(); + var headerParams: Dictionary = new Dictionary(); + + + + + + + + var token:AsyncToken = getApiInvoker().invokeAPI(path, "POST", queryParams, body, headerParams); + + var requestId: String = getUniqueId(); + + token.requestId = requestId; + token.completionEventType = "place_order"; + + token.returnType = Order; + return requestId; + + } + + /* + * Returns Order + */ + public function get_order_by_id (orderId: String): String { + // create path and map variables + var path: String = "/store/order/{orderId}".replace(/{format}/g,"xml").replace("{" + "orderId" + "}", getApiInvoker().escapeString(orderId)); + + // query params + var queryParams: Dictionary = new Dictionary(); + var headerParams: Dictionary = new Dictionary(); + + + + + + + + var token:AsyncToken = getApiInvoker().invokeAPI(path, "GET", queryParams, null, headerParams); + + var requestId: String = getUniqueId(); + + token.requestId = requestId; + token.completionEventType = "get_order_by_id"; + + token.returnType = Order; + return requestId; + + } + + /* + * Returns void + */ + public function delete_order (orderId: String): String { + // create path and map variables + var path: String = "/store/order/{orderId}".replace(/{format}/g,"xml").replace("{" + "orderId" + "}", getApiInvoker().escapeString(orderId)); + + // query params + var queryParams: Dictionary = new Dictionary(); + var headerParams: Dictionary = new Dictionary(); + + + + + + + + var token:AsyncToken = getApiInvoker().invokeAPI(path, "DELETE", queryParams, null, headerParams); + + var requestId: String = getUniqueId(); + + token.requestId = requestId; + token.completionEventType = "delete_order"; + + token.returnType = null ; + return requestId; + + } + +} + +} diff --git a/samples/client/petstore/flash/flash/src/io/swagger/client/api/UserApi.as b/samples/client/petstore/flash/flash/src/io/swagger/client/api/UserApi.as new file mode 100644 index 00000000000..06b0d079799 --- /dev/null +++ b/samples/client/petstore/flash/flash/src/io/swagger/client/api/UserApi.as @@ -0,0 +1,274 @@ +package io.swagger.client.api { + +import io.swagger.common.ApiInvoker; +import io.swagger.exception.ApiErrorCodes; +import io.swagger.exception.ApiError; +import io.swagger.common.ApiUserCredentials; +import io.swagger.event.Response; +import io.swagger.common.SwaggerApi; +import io.swagger.client.model.User; + +import mx.rpc.AsyncToken; +import mx.utils.UIDUtil; +import flash.utils.Dictionary; +import flash.events.EventDispatcher; + +public class UserApi extends SwaggerApi { + /** + * Constructor for the UserApi api client + * @param apiCredentials Wrapper object for tokens and hostName required towards authentication + * @param eventDispatcher Optional event dispatcher that when provided is used by the SDK to dispatch any Response + */ + public function UserApi(apiCredentials: ApiUserCredentials, eventDispatcher: EventDispatcher = null) { + super(apiCredentials, eventDispatcher); + } + + public static const event_create_user: String = "create_user"; + public static const event_create_users_with_array_input: String = "create_users_with_array_input"; + public static const event_create_users_with_list_input: String = "create_users_with_list_input"; + public static const event_login_user: String = "login_user"; + public static const event_logout_user: String = "logout_user"; + public static const event_get_user_by_name: String = "get_user_by_name"; + public static const event_update_user: String = "update_user"; + public static const event_delete_user: String = "delete_user"; + + + /* + * Returns void + */ + public function create_user (body: User): String { + // create path and map variables + var path: String = "/user".replace(/{format}/g,"xml"); + + // query params + var queryParams: Dictionary = new Dictionary(); + var headerParams: Dictionary = new Dictionary(); + + + + + + + + var token:AsyncToken = getApiInvoker().invokeAPI(path, "POST", queryParams, body, headerParams); + + var requestId: String = getUniqueId(); + + token.requestId = requestId; + token.completionEventType = "create_user"; + + token.returnType = null ; + return requestId; + + } + + /* + * Returns void + */ + public function create_users_with_array_input (body: Array): String { + // create path and map variables + var path: String = "/user/createWithArray".replace(/{format}/g,"xml"); + + // query params + var queryParams: Dictionary = new Dictionary(); + var headerParams: Dictionary = new Dictionary(); + + + + + + + + var token:AsyncToken = getApiInvoker().invokeAPI(path, "POST", queryParams, body, headerParams); + + var requestId: String = getUniqueId(); + + token.requestId = requestId; + token.completionEventType = "create_users_with_array_input"; + + token.returnType = null ; + return requestId; + + } + + /* + * Returns void + */ + public function create_users_with_list_input (body: Array): String { + // create path and map variables + var path: String = "/user/createWithList".replace(/{format}/g,"xml"); + + // query params + var queryParams: Dictionary = new Dictionary(); + var headerParams: Dictionary = new Dictionary(); + + + + + + + + var token:AsyncToken = getApiInvoker().invokeAPI(path, "POST", queryParams, body, headerParams); + + var requestId: String = getUniqueId(); + + token.requestId = requestId; + token.completionEventType = "create_users_with_list_input"; + + token.returnType = null ; + return requestId; + + } + + /* + * Returns String + */ + public function login_user (username: String, password: String): String { + // create path and map variables + var path: String = "/user/login".replace(/{format}/g,"xml"); + + // query params + var queryParams: Dictionary = new Dictionary(); + var headerParams: Dictionary = new Dictionary(); + + + + if("null" != String(username)) + queryParams["username"] = toPathValue(username); + if("null" != String(password)) + queryParams["password"] = toPathValue(password); + + + + + var token:AsyncToken = getApiInvoker().invokeAPI(path, "GET", queryParams, null, headerParams); + + var requestId: String = getUniqueId(); + + token.requestId = requestId; + token.completionEventType = "login_user"; + + token.returnType = String; + return requestId; + + } + + /* + * Returns void + */ + public function logout_user (): String { + // create path and map variables + var path: String = "/user/logout".replace(/{format}/g,"xml"); + + // query params + var queryParams: Dictionary = new Dictionary(); + var headerParams: Dictionary = new Dictionary(); + + + + + + + + var token:AsyncToken = getApiInvoker().invokeAPI(path, "GET", queryParams, null, headerParams); + + var requestId: String = getUniqueId(); + + token.requestId = requestId; + token.completionEventType = "logout_user"; + + token.returnType = null ; + return requestId; + + } + + /* + * Returns User + */ + public function get_user_by_name (username: String): String { + // create path and map variables + var path: String = "/user/{username}".replace(/{format}/g,"xml").replace("{" + "username" + "}", getApiInvoker().escapeString(username)); + + // query params + var queryParams: Dictionary = new Dictionary(); + var headerParams: Dictionary = new Dictionary(); + + + + + + + + var token:AsyncToken = getApiInvoker().invokeAPI(path, "GET", queryParams, null, headerParams); + + var requestId: String = getUniqueId(); + + token.requestId = requestId; + token.completionEventType = "get_user_by_name"; + + token.returnType = User; + return requestId; + + } + + /* + * Returns void + */ + public function update_user (username: String, body: User): String { + // create path and map variables + var path: String = "/user/{username}".replace(/{format}/g,"xml").replace("{" + "username" + "}", getApiInvoker().escapeString(username)); + + // query params + var queryParams: Dictionary = new Dictionary(); + var headerParams: Dictionary = new Dictionary(); + + + + + + + + var token:AsyncToken = getApiInvoker().invokeAPI(path, "PUT", queryParams, body, headerParams); + + var requestId: String = getUniqueId(); + + token.requestId = requestId; + token.completionEventType = "update_user"; + + token.returnType = null ; + return requestId; + + } + + /* + * Returns void + */ + public function delete_user (username: String): String { + // create path and map variables + var path: String = "/user/{username}".replace(/{format}/g,"xml").replace("{" + "username" + "}", getApiInvoker().escapeString(username)); + + // query params + var queryParams: Dictionary = new Dictionary(); + var headerParams: Dictionary = new Dictionary(); + + + + + + + + var token:AsyncToken = getApiInvoker().invokeAPI(path, "DELETE", queryParams, null, headerParams); + + var requestId: String = getUniqueId(); + + token.requestId = requestId; + token.completionEventType = "delete_user"; + + token.returnType = null ; + return requestId; + + } + +} + +} diff --git a/samples/client/petstore/flash/flash/src/io/swagger/client/model/Category.as b/samples/client/petstore/flash/flash/src/io/swagger/client/model/Category.as new file mode 100644 index 00000000000..6aa73414387 --- /dev/null +++ b/samples/client/petstore/flash/flash/src/io/swagger/client/model/Category.as @@ -0,0 +1,32 @@ +package io.swagger.client.model { + + + [XmlRootNode(name="Category")] + public class Category { + + + + [XmlElement(name="id")] + + public var id: Number = 0; + + + + [XmlElement(name="name")] + + public var name: String = null; + + + public function toString(): String { + var str: String = "Category: "; + + str += " (id: " + id + ")"; + + str += " (name: " + name + ")"; + + return str; + } + +} + +} diff --git a/samples/client/petstore/flash/flash/src/io/swagger/client/model/CategoryList.as b/samples/client/petstore/flash/flash/src/io/swagger/client/model/CategoryList.as new file mode 100644 index 00000000000..342cd70c001 --- /dev/null +++ b/samples/client/petstore/flash/flash/src/io/swagger/client/model/CategoryList.as @@ -0,0 +1,18 @@ +package io.swagger.client.model { + +import io.swagger.common.ListWrapper; + + public class CategoryList implements ListWrapper { + // This declaration below of _Category_obj_class is to force flash compiler to include this class + private var _category_obj_class: io.swagger.client.model.Category = null; + [XmlElements(name="category", type="io.swagger.client.model.Category")] + public var category: Array = new Array(); + + public function getList(): Array{ + return category; + } + +} + + +} diff --git a/samples/client/petstore/flash/flash/src/io/swagger/client/model/Order.as b/samples/client/petstore/flash/flash/src/io/swagger/client/model/Order.as new file mode 100644 index 00000000000..d6e4e6dc4d7 --- /dev/null +++ b/samples/client/petstore/flash/flash/src/io/swagger/client/model/Order.as @@ -0,0 +1,65 @@ +package io.swagger.client.model { + + + [XmlRootNode(name="Order")] + public class Order { + + + + [XmlElement(name="id")] + + public var id: Number = 0; + + + + [XmlElement(name="petId")] + + public var petId: Number = 0; + + + + [XmlElement(name="quantity")] + + public var quantity: Number = 0; + + + + [XmlElement(name="shipDate")] + + public var shipDate: Date = null; + + /* Order Status */ + + + [XmlElement(name="status")] + + public var status: String = null; + + + + [XmlElement(name="complete")] + + public var complete: Boolean = false; + + + public function toString(): String { + var str: String = "Order: "; + + str += " (id: " + id + ")"; + + str += " (petId: " + petId + ")"; + + str += " (quantity: " + quantity + ")"; + + str += " (shipDate: " + shipDate + ")"; + + str += " (status: " + status + ")"; + + str += " (complete: " + complete + ")"; + + return str; + } + +} + +} diff --git a/samples/client/petstore/flash/flash/src/io/swagger/client/model/OrderList.as b/samples/client/petstore/flash/flash/src/io/swagger/client/model/OrderList.as new file mode 100644 index 00000000000..bba3d8a4724 --- /dev/null +++ b/samples/client/petstore/flash/flash/src/io/swagger/client/model/OrderList.as @@ -0,0 +1,18 @@ +package io.swagger.client.model { + +import io.swagger.common.ListWrapper; + + public class OrderList implements ListWrapper { + // This declaration below of _Order_obj_class is to force flash compiler to include this class + private var _order_obj_class: io.swagger.client.model.Order = null; + [XmlElements(name="order", type="io.swagger.client.model.Order")] + public var order: Array = new Array(); + + public function getList(): Array{ + return order; + } + +} + + +} diff --git a/samples/client/petstore/flash/flash/src/io/swagger/client/model/Pet.as b/samples/client/petstore/flash/flash/src/io/swagger/client/model/Pet.as new file mode 100644 index 00000000000..a4a7d04830f --- /dev/null +++ b/samples/client/petstore/flash/flash/src/io/swagger/client/model/Pet.as @@ -0,0 +1,75 @@ +package io.swagger.client.model { + +import io.swagger.client.model.Category; +import io.swagger.client.model.Tag; + + [XmlRootNode(name="Pet")] + public class Pet { + + + + [XmlElement(name="id")] + + public var id: Number = 0; + + + + [XmlElement(name="category")] + + public var category: Category = NaN; + + + + [XmlElement(name="name")] + + public var name: String = null; + + + + // This declaration below of _photoUrls_obj_class is to force flash compiler to include this class + private var _photoUrls_obj_class: Array = null; + [XmlElementWrapper(name="photoUrls")] + [XmlElements(name="photoUrls", type="Array")] + + + public var photoUrls: Array = new Array(); + + + + // This declaration below of _tags_obj_class is to force flash compiler to include this class + private var _tags_obj_class: Array = null; + [XmlElementWrapper(name="tags")] + [XmlElements(name="tags", type="Array")] + + + public var tags: Array = new Array(); + + /* pet status in the store */ + + + [XmlElement(name="status")] + + public var status: String = null; + + + public function toString(): String { + var str: String = "Pet: "; + + str += " (id: " + id + ")"; + + str += " (category: " + category + ")"; + + str += " (name: " + name + ")"; + + str += " (photoUrls: " + photoUrls + ")"; + + str += " (tags: " + tags + ")"; + + str += " (status: " + status + ")"; + + return str; + } + +} + +} diff --git a/samples/client/petstore/flash/flash/src/io/swagger/client/model/PetList.as b/samples/client/petstore/flash/flash/src/io/swagger/client/model/PetList.as new file mode 100644 index 00000000000..ada0846c5ea --- /dev/null +++ b/samples/client/petstore/flash/flash/src/io/swagger/client/model/PetList.as @@ -0,0 +1,20 @@ +package io.swagger.client.model { + +import io.swagger.common.ListWrapper; +import io.swagger.client.model.Category; +import io.swagger.client.model.Tag; + + public class PetList implements ListWrapper { + // This declaration below of _Pet_obj_class is to force flash compiler to include this class + private var _pet_obj_class: io.swagger.client.model.Pet = null; + [XmlElements(name="pet", type="io.swagger.client.model.Pet")] + public var pet: Array = new Array(); + + public function getList(): Array{ + return pet; + } + +} + + +} diff --git a/samples/client/petstore/flash/flash/src/io/swagger/client/model/Tag.as b/samples/client/petstore/flash/flash/src/io/swagger/client/model/Tag.as new file mode 100644 index 00000000000..7387e2e2745 --- /dev/null +++ b/samples/client/petstore/flash/flash/src/io/swagger/client/model/Tag.as @@ -0,0 +1,32 @@ +package io.swagger.client.model { + + + [XmlRootNode(name="Tag")] + public class Tag { + + + + [XmlElement(name="id")] + + public var id: Number = 0; + + + + [XmlElement(name="name")] + + public var name: String = null; + + + public function toString(): String { + var str: String = "Tag: "; + + str += " (id: " + id + ")"; + + str += " (name: " + name + ")"; + + return str; + } + +} + +} diff --git a/samples/client/petstore/flash/flash/src/io/swagger/client/model/TagList.as b/samples/client/petstore/flash/flash/src/io/swagger/client/model/TagList.as new file mode 100644 index 00000000000..25ebadb27fb --- /dev/null +++ b/samples/client/petstore/flash/flash/src/io/swagger/client/model/TagList.as @@ -0,0 +1,18 @@ +package io.swagger.client.model { + +import io.swagger.common.ListWrapper; + + public class TagList implements ListWrapper { + // This declaration below of _Tag_obj_class is to force flash compiler to include this class + private var _tag_obj_class: io.swagger.client.model.Tag = null; + [XmlElements(name="tag", type="io.swagger.client.model.Tag")] + public var tag: Array = new Array(); + + public function getList(): Array{ + return tag; + } + +} + + +} diff --git a/samples/client/petstore/flash/flash/src/io/swagger/client/model/User.as b/samples/client/petstore/flash/flash/src/io/swagger/client/model/User.as new file mode 100644 index 00000000000..2b6474de90c --- /dev/null +++ b/samples/client/petstore/flash/flash/src/io/swagger/client/model/User.as @@ -0,0 +1,81 @@ +package io.swagger.client.model { + + + [XmlRootNode(name="User")] + public class User { + + + + [XmlElement(name="id")] + + public var id: Number = 0; + + + + [XmlElement(name="username")] + + public var username: String = null; + + + + [XmlElement(name="firstName")] + + public var firstName: String = null; + + + + [XmlElement(name="lastName")] + + public var lastName: String = null; + + + + [XmlElement(name="email")] + + public var email: String = null; + + + + [XmlElement(name="password")] + + public var password: String = null; + + + + [XmlElement(name="phone")] + + public var phone: String = null; + + /* User Status */ + + + [XmlElement(name="userStatus")] + + public var userStatus: Number = 0; + + + public function toString(): String { + var str: String = "User: "; + + str += " (id: " + id + ")"; + + str += " (username: " + username + ")"; + + str += " (firstName: " + firstName + ")"; + + str += " (lastName: " + lastName + ")"; + + str += " (email: " + email + ")"; + + str += " (password: " + password + ")"; + + str += " (phone: " + phone + ")"; + + str += " (userStatus: " + userStatus + ")"; + + return str; + } + +} + +} diff --git a/samples/client/petstore/flash/flash/src/io/swagger/client/model/UserList.as b/samples/client/petstore/flash/flash/src/io/swagger/client/model/UserList.as new file mode 100644 index 00000000000..e8a1fdb27f6 --- /dev/null +++ b/samples/client/petstore/flash/flash/src/io/swagger/client/model/UserList.as @@ -0,0 +1,18 @@ +package io.swagger.client.model { + +import io.swagger.common.ListWrapper; + + public class UserList implements ListWrapper { + // This declaration below of _User_obj_class is to force flash compiler to include this class + private var _user_obj_class: io.swagger.client.model.User = null; + [XmlElements(name="user", type="io.swagger.client.model.User")] + public var user: Array = new Array(); + + public function getList(): Array{ + return user; + } + +} + + +} diff --git a/samples/client/petstore/flash/flash/src/io/swagger/common/ApiInvoker.as b/samples/client/petstore/flash/flash/src/io/swagger/common/ApiInvoker.as new file mode 100644 index 00000000000..6d8466390a6 --- /dev/null +++ b/samples/client/petstore/flash/flash/src/io/swagger/common/ApiInvoker.as @@ -0,0 +1,276 @@ +package io.swagger.common { +import io.swagger.event.ApiClientEvent; +import io.swagger.event.Response; + +import flash.events.EventDispatcher; +import flash.utils.*; +import mx.rpc.AsyncToken; +import mx.rpc.events.ResultEvent; +import mx.rpc.events.FaultEvent; +import mx.utils.ObjectUtil; +import mx.rpc.http.HTTPService; +import mx.messaging.messages.HTTPRequestMessage; +import mx.messaging.ChannelSet; +import mx.messaging.channels.DirectHTTPChannel; +import asaxb.xml.bind.ASAXBContext; +import asaxb.xml.bind.Unmarshaller; + +public class ApiInvoker extends EventDispatcher { + + private static const DELETE_DATA_DUMMY:String = "dummyDataRequiredForDeleteOverride"; + private static const X_HTTP_OVERRIDE_KEY:String = "X-HTTP-Method-Override"; + private static const CONTENT_TYPE_HEADER_KEY:String = "Content-Type"; + + public function ApiInvoker(apiUsageCredentials:ApiUserCredentials, eventNotifier:EventDispatcher, useProxy:Boolean = true) { + _apiUsageCredentials = apiUsageCredentials; + _useProxyServer = useProxy; + if (_apiUsageCredentials.hostName != null) { + _proxyHostName = _apiUsageCredentials.hostName; + } + _apiPath = _apiUsageCredentials.apiPath; + _proxyPath = _apiUsageCredentials.proxyPath; + _apiProxyServerUrl = _apiUsageCredentials.apiProxyServerUrl; + _apiEventNotifier = eventNotifier; + } + public var _apiEventNotifier:EventDispatcher; + internal var _apiProxyServerUrl:String = ""; + internal var _useProxyServer:Boolean = true; + private var _apiUsageCredentials:ApiUserCredentials; + private var _baseUrl:String = ""; + private var _proxyHostName:String = ""; + private var _apiPath:String = ""; + private var _proxyPath:String = ""; + + public function invokeAPI(resourceURL:String, method:String, queryParams:Dictionary, postObject:Object, headerParams:Dictionary):AsyncToken { + //make the communication + if (_useProxyServer) { + resourceURL = _apiProxyServerUrl + resourceURL; + } + else { + resourceURL = "http://" + _proxyHostName + _apiPath + resourceURL; + } + + var counter:int = 0; + var symbol:String = "&"; + var paramValue:Object; + for (var paramName:String in queryParams) { + paramValue = queryParams[paramName]; + //var key:String = paramName; + // do stuff + symbol = "&"; + if (counter == 0) { + symbol = "?"; + } + resourceURL = resourceURL + symbol + paramName + "=" + paramValue.toString(); + counter++; + + } +// trace(resourceURL); + //create a httpservice and invoke the rest url waiting for response + var requestHeader:Object = new Object(); + if (headerParams != null) { + for (var key:String in headerParams) { + requestHeader[key] = headerParams[key]; + } + } + + resourceURL = ApiUrlHelper.appendTokenInfo(resourceURL, requestHeader, _apiUsageCredentials); + + var bodyData:String = marshal(postObject).toString();//restRequest.postData; + + return doRestCall(resourceURL, onApiRequestResult, onApiRequestFault, method, bodyData, requestHeader, "application/xml"); + + + } + + public function marshal(source:Object):Object { +// trace("marshal got - " + source) + if (source is String) { + return source; + } else if (source is Array && source.length > 0) { + var writer:XMLWriter = new XMLWriter(); + var sourceArray:Array = source as Array; + var arrayEnclosure:String = getArrayEnclosure(sourceArray); + writer.xml.setName(arrayEnclosure); + + for (var i:int = 0; i < sourceArray.length; i++) { + var o:Object = sourceArray[i]; + writer.xml.appendChild(marshal(o)); + } + return writer.xml; + } else + return marshalObject(source); + } + + public function marshalObject(source:Object):XML { + var writer:XMLWriter = new XMLWriter(); + var objDescriptor:XML = describeType(source); + var property:XML; + var propertyType:String; + var propertyValue:Object; + + var qualifiedClassName:String = objDescriptor.@name; + qualifiedClassName = qualifiedClassName.replace("::", "."); + var className:String = qualifiedClassName.substring(qualifiedClassName.lastIndexOf(".") + 1); + className = className.toLowerCase() + className.substring(1); + writer.xml.setName(className); + + for each(property in objDescriptor.elements("variable")) { + propertyValue = source[property.@name]; + if (propertyValue != null) { + if (ObjectUtil.isSimple(propertyValue)) { + writer.addProperty(property.@name, propertyValue.toString()); + } + else { + writer.addProperty(property.@name, marshal(propertyValue).toXMLString()); + } + } + } + for each(property in objDescriptor.elements("accessor")) { + if (property.@access == "readonly") { + continue; + } + propertyValue = source[property.@name]; + if (source[property.@name] != null) { + if (ObjectUtil.isSimple(propertyValue)) { + writer.addProperty(property.@name, propertyValue.toString()); + } + else { + writer.addProperty(property.@name, marshal(propertyValue).toXMLString()); + } + } + } + return writer.xml; + } + + public function escapeString(str:String):String { + return str; + } + + private function doRestCall(url:String, resultFunction:Function, faultFunction:Function = null, + restMethod:String = "GET", + bodyData:Object = null, headers:Object = null, contentType:String = "application/xml"):AsyncToken { + var httpService:HTTPService = new HTTPService(); + + if (headers == null) { + headers = new Object(); + } + httpService.method = restMethod; + + if (restMethod.toUpperCase() != HTTPRequestMessage.GET_METHOD) { + //httpService.method = HTTPRequestMessage.POST_METHOD; - not required as we're using the proxy + if (bodyData == null) { + bodyData = new Object(); + } + + if (restMethod == HTTPRequestMessage.DELETE_METHOD) { + headers[X_HTTP_OVERRIDE_KEY] = HTTPRequestMessage.DELETE_METHOD; + bodyData = DELETE_DATA_DUMMY; + } + else if (restMethod == HTTPRequestMessage.PUT_METHOD) { + headers[X_HTTP_OVERRIDE_KEY] = HTTPRequestMessage.PUT_METHOD; + } + else { + headers[CONTENT_TYPE_HEADER_KEY] = contentType; + } + } + else { + //if the request type is GET and content type is xml then the Flex HTTPService converts it to a POST ... yeah + contentType = null; + } + + httpService.url = url; + httpService.contentType = contentType; + httpService.resultFormat = "e4x"; + httpService.headers = headers; + httpService.addEventListener(ResultEvent.RESULT, resultFunction); + if (faultFunction != null) { + httpService.addEventListener(FaultEvent.FAULT, faultFunction); + } + if (_useProxyServer) { + httpService.useProxy = true; + + var channelSet:ChannelSet = new ChannelSet(); + var httpChannel:DirectHTTPChannel = new DirectHTTPChannel(""); + httpChannel.uri = ApiUrlHelper.getProxyUrl(_proxyHostName, _proxyPath); + channelSet.addChannel(httpChannel); + httpService.channelSet = channelSet; + } + + return httpService.send(bodyData); + } + + private function onApiRequestResult(event:ResultEvent):void { + + // I put this in comments. Here, it's trying to parse XML and it fails if it's not XML. + // Therefore, it's better to have the raw result that we can parse as we want. + // TODO: Create different parser (JSON, XML, etc.) + /* + var completionListener:Function = event.token.completionListener; + var result:Object = event.result; + var resultType:Class = event.token.returnType; + var resultObject:Object; + if (resultType != null) { + var context:ASAXBContext = ASAXBContext.newInstance(resultType); + var unmarshaller:Unmarshaller = context.createUnmarshaller(); + var resultXML:XML = new XML(event.result); + try { + resultObject = unmarshaller.unmarshal(resultXML); + } + catch (error:TypeError) { + var errorResponse:Response = new Response(false, null, "Could not unmarshall response"); + if (_apiEventNotifier != null) { //dispatch event via assigned dispatcher + var failureEvent:ApiClientEvent = new ApiClientEvent(event.token.completionEventType); + failureEvent.response = errorResponse; + _apiEventNotifier.dispatchEvent(failureEvent); + } + } + + if (resultObject is ListWrapper) { + resultObject = ListWrapper(resultObject).getList(); + } + } + + var response:Response = new Response(true, resultObject); + */ + + var response:Response = new Response(true, event.result); + response.requestId = event.token.requestId; + var successEventType:String = event.token.completionEventType != null ? event.token.completionEventType : ApiClientEvent.SUCCESS_EVENT; + + if (_apiEventNotifier != null) { //dispatch event via assigned dispatcher + var successEvent:ApiClientEvent = new ApiClientEvent(successEventType); + successEvent.response = response; + _apiEventNotifier.dispatchEvent(successEvent); + } + } + + private function onApiRequestFault(event:FaultEvent):void { + var completionListener:Function = event.token.completionListener; + if (completionListener != null) { + completionListener.call(null, new Response(false, null, event.fault.faultString)); + } + + var failureEventType:String = event.token.completionEventType != null ? event.token.completionEventType : ApiClientEvent.FAILURE_EVENT; + + if (_apiEventNotifier != null) { //dispatch event via assigned dispatcher + var failureEvent:ApiClientEvent = new ApiClientEvent(failureEventType); + failureEvent.response = new Response(false, null, event.fault.faultString); + _apiEventNotifier.dispatchEvent(failureEvent); + } + } + + private function getArrayEnclosure(arr:Array):String { + if (arr != null && arr.length > 0) { + var className:String = flash.utils.getQualifiedClassName(arr[0]) + if (className.indexOf("::") > 0) + className = className.substr(className.indexOf("::") + 2, className.length) + + return className.substring(0, 1).toLowerCase() + className.substring(1, className.length) + "s"; + } else + return ""; + } + + +} +} diff --git a/samples/client/petstore/flash/flash/src/io/swagger/common/ApiUrlHelper.as b/samples/client/petstore/flash/flash/src/io/swagger/common/ApiUrlHelper.as new file mode 100644 index 00000000000..8779610cd48 --- /dev/null +++ b/samples/client/petstore/flash/flash/src/io/swagger/common/ApiUrlHelper.as @@ -0,0 +1,41 @@ +package io.swagger.common { +import io.swagger.common.ApiUserCredentials; + +/** + * @private + * Internal class for the Rest client + */ +internal class ApiUrlHelper { + + private static const API_URL_KEY:String = "api_key"; + private static const AUTH_TOKEN_URL_KEY:String = "auth_token"; + + private static const HTTP_URL_PREFIX:String = "http://"; + + internal static function appendTokenInfo(restUrl:String, requestHeader: Object, credentials: ApiUserCredentials): String { + //checks for the presence api credentials on client initialization and not repeated here + if(restUrl.indexOf("?") == -1){ + restUrl += ( "?" + API_URL_KEY + "=" + credentials.apiToken ); + } + else{ + restUrl += ( "&" + API_URL_KEY + "=" + credentials.apiToken ); + } + requestHeader.api_key = credentials.apiToken; + + if(credentials.authToken != null && credentials.authToken != ""){ + restUrl += ( "&" + AUTH_TOKEN_URL_KEY + "=" + credentials.authToken ); + requestHeader.auth_token = credentials.authToken; + } + + return restUrl; + } + + internal static function getProxyUrl(hostName: String, proxyPath: String): String{ + if (hostName..charAt(hostName.length) == "/") //remove trailing slash + { + hostName = hostName.substring(0, hostName.length - 1); + } + return HTTP_URL_PREFIX + hostName + proxyPath; + } +} +} diff --git a/samples/client/petstore/flash/flash/src/io/swagger/common/ApiUserCredentials.as b/samples/client/petstore/flash/flash/src/io/swagger/common/ApiUserCredentials.as new file mode 100644 index 00000000000..118d917a247 --- /dev/null +++ b/samples/client/petstore/flash/flash/src/io/swagger/common/ApiUserCredentials.as @@ -0,0 +1,63 @@ +package io.swagger.common { + +/** + * Api account credentials. + * + */ +public class ApiUserCredentials { + /** + * An apitoken that is passed along with the requests + */ + public var apiToken:String; + /** + * A valid auth_token which could be necessary for certain operations + */ + public var authToken:String; + /** + * The userId which could be required for certain operations + */ + public var userId:Number; + /** + * The host name for the Rest API eg. api.companyName.com + */ + public var hostName:String; + + /** + * The base path to the api resources - used along with the hostname + * eg. /v4 + */ + public var apiPath: String; + + /** + * The base path to the blazeds proxy + * eg. /v4/messagebroker/restproxy + */ + public var proxyPath: String; + + /** + * If a proxy server has been set up for the services specify the URL here. This value is used when the Api is invoked with + * the value useProxy as true + */ + public var apiProxyServerUrl: String; + + /** + * Constructor of ApiUserCredentials + * @param apiToken An apitoken that is passed along with the requests + * @param authToken A valid auth_token which could necessary for certain operations + * @param hostName The host name for the Rest API eg. api.companyName.com + * @param userId The userId which is required for certain operations - currently, get user lists + */ + public function ApiUserCredentials(hostName: String, apiPath: String, apiToken: String, + authToken: String = null, userId: Number = -1, apiProxyServerUrl: String="", + proxyPath: String = null) { + this.hostName = hostName; + this.apiToken = apiToken; + this.authToken = authToken; + this.userId = userId; + this.apiPath = apiPath; + this.apiProxyServerUrl = apiProxyServerUrl; + this.proxyPath = proxyPath; + } + +} +} \ No newline at end of file diff --git a/samples/client/petstore/flash/flash/src/io/swagger/common/ListWrapper.as b/samples/client/petstore/flash/flash/src/io/swagger/common/ListWrapper.as new file mode 100644 index 00000000000..b22890ad1d1 --- /dev/null +++ b/samples/client/petstore/flash/flash/src/io/swagger/common/ListWrapper.as @@ -0,0 +1,9 @@ +package io.swagger.common +{ + public interface ListWrapper + { + + function getList(): Array; + + } +} \ No newline at end of file diff --git a/samples/client/petstore/flash/flash/src/io/swagger/common/SwaggerApi.as b/samples/client/petstore/flash/flash/src/io/swagger/common/SwaggerApi.as new file mode 100644 index 00000000000..059de642a74 --- /dev/null +++ b/samples/client/petstore/flash/flash/src/io/swagger/common/SwaggerApi.as @@ -0,0 +1,75 @@ +package io.swagger.common +{ + import io.swagger.common.ApiUserCredentials; + + import flash.events.EventDispatcher; + import flash.events.IEventDispatcher; + + import mx.utils.UIDUtil; + + public class SwaggerApi extends EventDispatcher + { + + protected var _apiUsageCredentials:ApiUserCredentials; + protected var _apiEventNotifier:EventDispatcher; + protected var _apiInvoker: ApiInvoker; + + protected var _useProxyServer: Boolean = false; + + + /** + * Constructor for the api client + * @param apiCredentials Wrapper object for tokens and hostName required towards authentication + * @param eventDispatcher Optional event dispatcher that when provided is used by the SDK to dispatch any Response + */ + public function SwaggerApi(apiCredentials: ApiUserCredentials, eventDispatcher: EventDispatcher = null) { + super(); + _apiUsageCredentials = apiCredentials; + _apiEventNotifier = eventDispatcher; + } + + public function useProxyServer(value:Boolean, proxyServerUrl: String = null):void { + _useProxyServer = value; + } + + protected function getApiInvoker():ApiInvoker { + if(_apiInvoker == null){ + if(_apiEventNotifier == null){ + _apiEventNotifier = this; + } + _apiInvoker = new ApiInvoker(_apiUsageCredentials, _apiEventNotifier, _useProxyServer); + } + return _apiInvoker; + } + + protected function getUniqueId():String { + return UIDUtil.createUID(); + } + + /** + * Method for returning the path value + * For a string value an empty value is returned if the value is null + * @param value + * @return + */ + protected static function toPathValue(value: Object): String { + if(value is Array){ + return arrayToPathValue(value as Array); + } + return value == null ? "" : value.toString(); + } + + /** + * Method for returning a path value + * For a list of objects a comma separated string is returned + * @param objects + * @return + */ + protected static function arrayToPathValue(objects: Array): String { + var out: String = ""; + + return objects.join(","); + } + + } +} \ No newline at end of file diff --git a/samples/client/petstore/flash/flash/src/io/swagger/common/XMLWriter.as b/samples/client/petstore/flash/flash/src/io/swagger/common/XMLWriter.as new file mode 100644 index 00000000000..0b08066775b --- /dev/null +++ b/samples/client/petstore/flash/flash/src/io/swagger/common/XMLWriter.as @@ -0,0 +1,28 @@ +package io.swagger.common +{ + public class XMLWriter + { + public var xml:XML; + + public function XMLWriter() + { + xml=; + } + + public function reset():void { + xml=new XML(); + } + + public function addProperty(propertyName:String, propertyValue:String):XML { + var xmlProperty:XML= + xmlProperty.setName(propertyName); + xmlProperty.appendChild(propertyValue); + xml.appendChild(xmlProperty); + return xmlProperty; + } + + public function addAttribute(propertyName:String, attribute:String, attributeValue:String):void { + xml.elements(propertyName)[0].@[attribute]=attributeValue; + } + } +} \ No newline at end of file diff --git a/samples/client/petstore/flash/flash/src/io/swagger/event/ApiClientEvent.as b/samples/client/petstore/flash/flash/src/io/swagger/event/ApiClientEvent.as new file mode 100644 index 00000000000..d64cd304d49 --- /dev/null +++ b/samples/client/petstore/flash/flash/src/io/swagger/event/ApiClientEvent.as @@ -0,0 +1,36 @@ +package io.swagger.event { +import io.swagger.event.Response; + +import flash.events.Event; + +/** + * Event dispatched by the SDK to communicate success events and failure events. + * If a custom dispatcher has been assigned by the consumer on the generated client then the dispatcher dispatches + * the ApiClientEvent to indicate success or failure of the invocation using the Response + */ +public class ApiClientEvent extends Event{ + + /** + * Event type to indicate a unsuccessful invocation + */ + public static const FAILURE_EVENT:String = "unsuccesfulInvocation"; + + /** + * Event type to indicate a successful invocation + */ + public static const SUCCESS_EVENT:String = "successfulInvocation"; + + /** + * The Response object which contains response info + */ + public var response: Response; + /** + * Any additional info + */ + public var message:String; + + public function ApiClientEvent(type:String,bubbles:Boolean = false,cancelable:Boolean = false) { + super(type, bubbles, cancelable); + } +} +} \ No newline at end of file diff --git a/samples/client/petstore/flash/flash/src/io/swagger/event/Response.as b/samples/client/petstore/flash/flash/src/io/swagger/event/Response.as new file mode 100644 index 00000000000..a43b7980a38 --- /dev/null +++ b/samples/client/petstore/flash/flash/src/io/swagger/event/Response.as @@ -0,0 +1,56 @@ +package io.swagger.event { + +/** + * Response contains info on the result of an API invocation. + * A completion listener will expect this Response object. + */ +public class Response { + + /** + * Indicates whether the invoked operation failed or succeeded + */ + public var isSuccess:Boolean; + + /** + * The payload of the succesful operation eg. a Word in a WordRequest + */ + public var payload:Object; + + /** + * Error message in case of failure + */ + public var errorMessage:String; + + /** + * A request Id that was passed in by the user as a param when invoking the operation + */ + public var requestId:String; + private static const API_ERROR_MSG:String = "Api error response: "; + + public function Response(isSuccessful: Boolean, payload: Object = null, errorMessage: String = null, requestId: String = null) { + this.isSuccess = isSuccessful; + this.payload = payload; + this.errorMessage = getFriendlyMessage(errorMessage); + } + + private static function getFriendlyMessage(errorMessage: String): String{ + var result: String = errorMessage; + if(errorMessage == null) + return null; + var errorCode: String; + var errorCodeArray: Array = errorMessage.match(/(?<=HTTP\/1.1 )[0-9][0-9][0-9]/); + if(errorCodeArray != null && errorCodeArray.length == 1){ + errorCode = String(errorCodeArray[0]); + } + var msgArray: Array = errorMessage.match(/(?<=HTTP\/1.1 [0-9][0-9][0-9] )[^]*/); + if(msgArray != null && msgArray.length == 1){ + result = API_ERROR_MSG + String(msgArray[0]); + } + return result; + } + + public function toString(): String { + return "Response (requestId:" + requestId + "; isSuccess:" + isSuccess + "; errorMessage:" + errorMessage + "; payload:" + payload + ")"; + } +} +} \ No newline at end of file diff --git a/samples/client/petstore/flash/flash/src/io/swagger/exception/ApiError.as b/samples/client/petstore/flash/flash/src/io/swagger/exception/ApiError.as new file mode 100644 index 00000000000..c8ac95a5c59 --- /dev/null +++ b/samples/client/petstore/flash/flash/src/io/swagger/exception/ApiError.as @@ -0,0 +1,10 @@ +package io.swagger.exception +{ + public class ApiError extends Error + { + public function ApiError(id:*=0, message:*="") + { + super(message,id); + } + } +} \ No newline at end of file diff --git a/samples/client/petstore/flash/flash/src/io/swagger/exception/ApiErrorCodes.as b/samples/client/petstore/flash/flash/src/io/swagger/exception/ApiErrorCodes.as new file mode 100644 index 00000000000..e5ea46480aa --- /dev/null +++ b/samples/client/petstore/flash/flash/src/io/swagger/exception/ApiErrorCodes.as @@ -0,0 +1,34 @@ +package io.swagger.exception +{ + public class ApiErrorCodes + { + /** + * System exception. + */ + public static const SYSTEM_EXCEPTION: Number = 0; + + /** + * With Arguments as current key. + */ + public static const API_KEY_NOT_VALID: Number = 1000; + /** + * With arguments as current token value + */ + public static const AUTH_TOKEN_NOT_VALID: Number = 1001; + /** + * With arguments as input JSON and output class anme + */ + public static const ERROR_CONVERTING_JSON_TO_JAVA: Number = 1002; + /** + * With arguments as JAVA class name + */ + public static const ERROR_CONVERTING_JAVA_TO_JSON: Number = 1003; + + public static const ERROR_FROM_WEBSERVICE_CALL: Number = 1004; + /** + * With arguments as current API server name + */ + public static const API_SERVER_NOT_VALID: Number = 1005; + + } +} \ No newline at end of file From 190f0a6a0876644e01a627a3c8dde3543a0ef216 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Thu, 4 Feb 2016 17:58:57 -0800 Subject: [PATCH 066/189] updated swagger-core to 1.5.7 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e1fa06befaa..be9098c89b7 100644 --- a/pom.xml +++ b/pom.xml @@ -536,7 +536,7 @@ 1.0.17 2.11.1 2.3.4 - 1.5.6 + 1.5.7 2.4 1.2 4.8.1 From 5e80b61e3eddaa6bf40bc08335601243d372426a Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Thu, 4 Feb 2016 18:02:19 -0800 Subject: [PATCH 067/189] updated swagger-core versions --- .../src/main/resources/JavaInflector/pom.mustache | 4 ++-- .../src/main/resources/JavaJaxRS/jersey1_18/pom.mustache | 2 +- .../src/main/resources/JavaJaxRS/resteasy/pom.mustache | 2 +- .../src/main/resources/JavaSpringMVC/pom-j8-async.mustache | 2 +- .../src/main/resources/JavaSpringMVC/pom.mustache | 2 +- .../src/main/resources/akka-scala/pom.mustache | 2 +- modules/swagger-codegen/src/main/resources/scala/pom.mustache | 2 +- samples/client/petstore/akka-scala/pom.xml | 2 +- samples/client/petstore/scala/pom.xml | 2 +- samples/server/petstore/java-inflector/pom.xml | 2 +- samples/server/petstore/jaxrs-resteasy/pom.xml | 2 +- samples/server/petstore/jaxrs/pom.xml | 2 +- 12 files changed, 13 insertions(+), 13 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/JavaInflector/pom.mustache b/modules/swagger-codegen/src/main/resources/JavaInflector/pom.mustache index c4b5fdf4922..8cb21465b33 100644 --- a/modules/swagger-codegen/src/main/resources/JavaInflector/pom.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaInflector/pom.mustache @@ -78,12 +78,12 @@ io.swagger swagger-inflector - 1.0.0 + 1.0.2 1.0.0 - 1.5.4 + 1.5.7 9.2.9.v20150224 1.0.1 4.8.2 diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/jersey1_18/pom.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/jersey1_18/pom.mustache index 0d1b06de43a..14bbfaecb99 100644 --- a/modules/swagger-codegen/src/main/resources/JavaJaxRS/jersey1_18/pom.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/jersey1_18/pom.mustache @@ -168,7 +168,7 @@ - 1.5.4 + 1.5.7 9.2.9.v20150224 1.18.1 1.6.3 diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy/pom.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy/pom.mustache index a686eaf8f29..ad4c4e7655f 100644 --- a/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy/pom.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/resteasy/pom.mustache @@ -145,7 +145,7 @@ - 1.5.4 + 1.5.7 9.2.9.v20150224 3.0.11.Final 1.6.3 diff --git a/modules/swagger-codegen/src/main/resources/JavaSpringMVC/pom-j8-async.mustache b/modules/swagger-codegen/src/main/resources/JavaSpringMVC/pom-j8-async.mustache index 566a4c83d8d..dc18ee3b7fd 100644 --- a/modules/swagger-codegen/src/main/resources/JavaSpringMVC/pom-j8-async.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaSpringMVC/pom-j8-async.mustache @@ -159,7 +159,7 @@ - 1.5.4 + 1.5.7 9.2.9.v20150224 1.13 1.6.3 diff --git a/modules/swagger-codegen/src/main/resources/JavaSpringMVC/pom.mustache b/modules/swagger-codegen/src/main/resources/JavaSpringMVC/pom.mustache index 60933fa47f3..4d5bceecc68 100644 --- a/modules/swagger-codegen/src/main/resources/JavaSpringMVC/pom.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaSpringMVC/pom.mustache @@ -118,7 +118,7 @@ - 1.5.6 + 1.5.7 9.2.9.v20150224 1.13 1.6.3 diff --git a/modules/swagger-codegen/src/main/resources/akka-scala/pom.mustache b/modules/swagger-codegen/src/main/resources/akka-scala/pom.mustache index b5c9997ce0f..a547542ff21 100644 --- a/modules/swagger-codegen/src/main/resources/akka-scala/pom.mustache +++ b/modules/swagger-codegen/src/main/resources/akka-scala/pom.mustache @@ -217,7 +217,7 @@ 2.3.9 1.2 2.2 - 1.5.4 + 1.5.7 1.0.0 4.8.1 diff --git a/modules/swagger-codegen/src/main/resources/scala/pom.mustache b/modules/swagger-codegen/src/main/resources/scala/pom.mustache index 7a2e36c935a..b3260b9fd62 100644 --- a/modules/swagger-codegen/src/main/resources/scala/pom.mustache +++ b/modules/swagger-codegen/src/main/resources/scala/pom.mustache @@ -210,7 +210,7 @@ 1.2 2.2 1.19 - 1.5.4 + 1.5.7 1.0.5 1.0.0 2.4.2 diff --git a/samples/client/petstore/akka-scala/pom.xml b/samples/client/petstore/akka-scala/pom.xml index a6e81fb75f4..fa88207507e 100644 --- a/samples/client/petstore/akka-scala/pom.xml +++ b/samples/client/petstore/akka-scala/pom.xml @@ -217,7 +217,7 @@ 2.3.9 1.2 2.2 - 1.5.4 + 1.5.7 1.0.0 4.8.1 diff --git a/samples/client/petstore/scala/pom.xml b/samples/client/petstore/scala/pom.xml index ff38920fcdd..c700bebfc83 100644 --- a/samples/client/petstore/scala/pom.xml +++ b/samples/client/petstore/scala/pom.xml @@ -210,7 +210,7 @@ 1.2 2.2 1.19 - 1.5.4 + 1.5.7 1.0.5 1.0.0 2.4.2 diff --git a/samples/server/petstore/java-inflector/pom.xml b/samples/server/petstore/java-inflector/pom.xml index 681c0c874c0..ace023a70db 100644 --- a/samples/server/petstore/java-inflector/pom.xml +++ b/samples/server/petstore/java-inflector/pom.xml @@ -83,7 +83,7 @@ 1.0.0 - 1.5.4 + 1.5.7 9.2.9.v20150224 1.0.1 4.8.2 diff --git a/samples/server/petstore/jaxrs-resteasy/pom.xml b/samples/server/petstore/jaxrs-resteasy/pom.xml index 7b27de2594f..c87fa4ab30d 100644 --- a/samples/server/petstore/jaxrs-resteasy/pom.xml +++ b/samples/server/petstore/jaxrs-resteasy/pom.xml @@ -145,7 +145,7 @@ - 1.5.4 + 1.5.7 9.2.9.v20150224 3.0.11.Final 1.6.3 diff --git a/samples/server/petstore/jaxrs/pom.xml b/samples/server/petstore/jaxrs/pom.xml index dda5043b7d1..c9c9a8b0ad5 100644 --- a/samples/server/petstore/jaxrs/pom.xml +++ b/samples/server/petstore/jaxrs/pom.xml @@ -168,7 +168,7 @@ - 1.5.4 + 1.5.7 9.2.9.v20150224 1.18.1 1.6.3 From 9eb6993ccc2477b1d982dc6bc18a9f370d39763e Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Thu, 4 Feb 2016 18:06:59 -0800 Subject: [PATCH 068/189] fixed build error --- .../swagger/codegen/InlineModelResolver.java | 26 ++++++++++++++----- .../codegen/examples/XmlExampleGenerator.java | 12 ++++----- 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java index bd22f40616b..02bf82572e0 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java @@ -5,15 +5,14 @@ import io.swagger.models.parameters.BodyParameter; import io.swagger.models.parameters.Parameter; import io.swagger.models.properties.*; import io.swagger.util.Json; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - public class InlineModelResolver { private Swagger swagger; private boolean skipMatches; @@ -294,7 +293,12 @@ public class InlineModelResolver { @SuppressWarnings("static-method") public Model modelFromProperty(ArrayProperty object, @SuppressWarnings("unused") String path) { String description = object.getDescription(); - String example = object.getExample(); + String example = null; + + Object obj = object.getExample(); + if(obj != null) { + example = obj.toString(); + } Property inner = object.getItems(); if (inner instanceof ObjectProperty) { ArrayModel model = new ArrayModel(); @@ -308,7 +312,12 @@ public class InlineModelResolver { public Model modelFromProperty(ObjectProperty object, String path) { String description = object.getDescription(); - String example = object.getExample(); + String example = null; + + Object obj = object.getExample(); + if(obj != null) { + example = obj.toString(); + } String name = object.getName(); Xml xml = object.getXml(); Map properties = object.getProperties(); @@ -330,7 +339,12 @@ public class InlineModelResolver { @SuppressWarnings("static-method") public Model modelFromProperty(MapProperty object, @SuppressWarnings("unused") String path) { String description = object.getDescription(); - String example = object.getExample(); + String example = null; + + Object obj = object.getExample(); + if(obj != null) { + example = obj.toString(); + } ArrayModel model = new ArrayModel(); model.setDescription(description); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/examples/XmlExampleGenerator.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/examples/XmlExampleGenerator.java index ec77888ec25..54f022ad124 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/examples/XmlExampleGenerator.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/examples/XmlExampleGenerator.java @@ -170,37 +170,37 @@ public class XmlExampleGenerator { protected String getExample(Property property) { if (property instanceof DateTimeProperty) { if (property.getExample() != null) { - return property.getExample(); + return property.getExample().toString(); } else { return dtFormat.format(new Date()); } } else if (property instanceof StringProperty) { if (property.getExample() != null) { - return property.getExample(); + return property.getExample().toString(); } else { return "string"; } } else if (property instanceof DateProperty) { if (property.getExample() != null) { - return property.getExample(); + return property.getExample().toString(); } else { return dateFormat.format(new Date()); } } else if (property instanceof IntegerProperty) { if (property.getExample() != null) { - return property.getExample(); + return property.getExample().toString(); } else { return "0"; } } else if (property instanceof BooleanProperty) { if (property.getExample() != null) { - return property.getExample(); + return property.getExample().toString(); } else { return "true"; } } else if (property instanceof LongProperty) { if (property.getExample() != null) { - return property.getExample(); + return property.getExample().toString(); } else { return "123456"; } From 34c7250ce93b4c5a989f9b4e69ba35d3ae26f5f3 Mon Sep 17 00:00:00 2001 From: Jim Schubert Date: Thu, 4 Feb 2016 21:53:24 -0500 Subject: [PATCH 069/189] [aspnet] Updated -l aspnet5 in example command Apparently, I missed this in the readme even after the comment in the original pull request --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f6d73a877c3..130e3a23671 100644 --- a/README.md +++ b/README.md @@ -593,7 +593,7 @@ java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar generate \ ``` java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar generate \ -i http://petstore.swagger.io/v2/swagger.json \ - -l aspnet5-webapi \ + -l aspnet5 \ -o samples/server/petstore/aspnet5 ``` From 81db72b62fea6c575882b7ce729b4b00bbf3e0d9 Mon Sep 17 00:00:00 2001 From: wing328 Date: Fri, 5 Feb 2016 19:08:57 +0800 Subject: [PATCH 070/189] Revert "FIX: Fixed FLash Client library" --- .../codegen/languages/FlashClientCodegen.java | 20 +- .../src/main/resources/flash/ApiInvoker.as | 27 +- .../src/main/resources/flash/ApiUrlHelper.as | 2 +- .../src/main/resources/flash/README.txt | 65 ---- .../src/main/resources/flash/api.mustache | 2 +- .../client/petstore/flash/flash/README.txt | 65 ---- .../petstore/flash/flash/build.properties | 29 -- samples/client/petstore/flash/flash/build.xml | 192 ---------- .../petstore/flash/flash/lib/ASAXB-0.1.1.swc | Bin 46948 -> 0 bytes .../petstore/flash/flash/lib/as3corelib.swc | Bin 255357 -> 0 bytes ...flexunit-4.1.0_RC2-28-flex_3.5.0.12683.swc | Bin 194680 -> 0 bytes ...aircilistener-4.1.0_RC2-28-3.5.0.12683.swc | Bin 2294 -> 0 bytes ...it-cilistener-4.1.0_RC2-28-3.5.0.12683.swc | Bin 11827 -> 0 bytes ...xunit-core-flex-4.0.0.2-sdk3.5.0.12683.swc | Bin 165338 -> 0 bytes .../flash/src/io/swagger/client/api/PetApi.as | 336 ------------------ .../src/io/swagger/client/api/StoreApi.as | 150 -------- .../src/io/swagger/client/api/UserApi.as | 274 -------------- .../src/io/swagger/client/model/Category.as | 32 -- .../io/swagger/client/model/CategoryList.as | 18 - .../src/io/swagger/client/model/Order.as | 65 ---- .../src/io/swagger/client/model/OrderList.as | 18 - .../flash/src/io/swagger/client/model/Pet.as | 75 ---- .../src/io/swagger/client/model/PetList.as | 20 -- .../flash/src/io/swagger/client/model/Tag.as | 32 -- .../src/io/swagger/client/model/TagList.as | 18 - .../flash/src/io/swagger/client/model/User.as | 81 ----- .../src/io/swagger/client/model/UserList.as | 18 - .../flash/src/io/swagger/common/ApiInvoker.as | 276 -------------- .../src/io/swagger/common/ApiUrlHelper.as | 41 --- .../io/swagger/common/ApiUserCredentials.as | 63 ---- .../src/io/swagger/common/ListWrapper.as | 9 - .../flash/src/io/swagger/common/SwaggerApi.as | 75 ---- .../flash/src/io/swagger/common/XMLWriter.as | 28 -- .../src/io/swagger/event/ApiClientEvent.as | 36 -- .../flash/src/io/swagger/event/Response.as | 56 --- .../src/io/swagger/exception/ApiError.as | 10 - .../src/io/swagger/exception/ApiErrorCodes.as | 34 -- 37 files changed, 15 insertions(+), 2152 deletions(-) delete mode 100644 modules/swagger-codegen/src/main/resources/flash/README.txt delete mode 100644 samples/client/petstore/flash/flash/README.txt delete mode 100644 samples/client/petstore/flash/flash/build.properties delete mode 100644 samples/client/petstore/flash/flash/build.xml delete mode 100644 samples/client/petstore/flash/flash/lib/ASAXB-0.1.1.swc delete mode 100644 samples/client/petstore/flash/flash/lib/as3corelib.swc delete mode 100644 samples/client/petstore/flash/flash/lib/ext/flexunit-4.1.0_RC2-28-flex_3.5.0.12683.swc delete mode 100644 samples/client/petstore/flash/flash/lib/ext/flexunit-aircilistener-4.1.0_RC2-28-3.5.0.12683.swc delete mode 100644 samples/client/petstore/flash/flash/lib/ext/flexunit-cilistener-4.1.0_RC2-28-3.5.0.12683.swc delete mode 100644 samples/client/petstore/flash/flash/lib/ext/flexunit-core-flex-4.0.0.2-sdk3.5.0.12683.swc delete mode 100644 samples/client/petstore/flash/flash/src/io/swagger/client/api/PetApi.as delete mode 100644 samples/client/petstore/flash/flash/src/io/swagger/client/api/StoreApi.as delete mode 100644 samples/client/petstore/flash/flash/src/io/swagger/client/api/UserApi.as delete mode 100644 samples/client/petstore/flash/flash/src/io/swagger/client/model/Category.as delete mode 100644 samples/client/petstore/flash/flash/src/io/swagger/client/model/CategoryList.as delete mode 100644 samples/client/petstore/flash/flash/src/io/swagger/client/model/Order.as delete mode 100644 samples/client/petstore/flash/flash/src/io/swagger/client/model/OrderList.as delete mode 100644 samples/client/petstore/flash/flash/src/io/swagger/client/model/Pet.as delete mode 100644 samples/client/petstore/flash/flash/src/io/swagger/client/model/PetList.as delete mode 100644 samples/client/petstore/flash/flash/src/io/swagger/client/model/Tag.as delete mode 100644 samples/client/petstore/flash/flash/src/io/swagger/client/model/TagList.as delete mode 100644 samples/client/petstore/flash/flash/src/io/swagger/client/model/User.as delete mode 100644 samples/client/petstore/flash/flash/src/io/swagger/client/model/UserList.as delete mode 100644 samples/client/petstore/flash/flash/src/io/swagger/common/ApiInvoker.as delete mode 100644 samples/client/petstore/flash/flash/src/io/swagger/common/ApiUrlHelper.as delete mode 100644 samples/client/petstore/flash/flash/src/io/swagger/common/ApiUserCredentials.as delete mode 100644 samples/client/petstore/flash/flash/src/io/swagger/common/ListWrapper.as delete mode 100644 samples/client/petstore/flash/flash/src/io/swagger/common/SwaggerApi.as delete mode 100644 samples/client/petstore/flash/flash/src/io/swagger/common/XMLWriter.as delete mode 100644 samples/client/petstore/flash/flash/src/io/swagger/event/ApiClientEvent.as delete mode 100644 samples/client/petstore/flash/flash/src/io/swagger/event/Response.as delete mode 100644 samples/client/petstore/flash/flash/src/io/swagger/exception/ApiError.as delete mode 100644 samples/client/petstore/flash/flash/src/io/swagger/exception/ApiErrorCodes.as diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/FlashClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/FlashClientCodegen.java index 02bcbd02b50..2184e4013fe 100755 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/FlashClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/FlashClientCodegen.java @@ -29,7 +29,7 @@ public class FlashClientCodegen extends DefaultCodegen implements CodegenConfig protected String packageVersion; protected String invokerPackage = "io.swagger"; - protected String sourceFolder = "flash"; + protected String sourceFolder = "src/main/flex"; public FlashClientCodegen() { super(); @@ -83,7 +83,7 @@ public class FlashClientCodegen extends DefaultCodegen implements CodegenConfig .defaultValue("1.0.0")); cliOptions.add(new CliOption(CodegenConstants.INVOKER_PACKAGE, CodegenConstants.INVOKER_PACKAGE_DESC)); cliOptions.add(new CliOption(CodegenConstants.SOURCE_FOLDER, "source folder for generated " + - "code. e.g. flash")); + "code. e.g. src/main/flex")); } @@ -124,7 +124,8 @@ public class FlashClientCodegen extends DefaultCodegen implements CodegenConfig //modelPackage = invokerPackage + File.separatorChar + "client" + File.separatorChar + "model"; //apiPackage = invokerPackage + File.separatorChar + "client" + File.separatorChar + "api"; - final String invokerFolder = (sourceFolder + File.separator + "src/" + invokerPackage + File.separator).replace(".", File.separator).replace('.', File.separatorChar); + final String invokerFolder = (sourceFolder + File.separator + invokerPackage + File.separator + + "swagger" + File.separator).replace(".", File.separator).replace('.', File.separatorChar); supportingFiles.add(new SupportingFile("ApiInvoker.as", invokerFolder + "common", "ApiInvoker.as")); supportingFiles.add(new SupportingFile("ApiUrlHelper.as", invokerFolder + "common", "ApiUrlHelper.as")); @@ -132,15 +133,14 @@ public class FlashClientCodegen extends DefaultCodegen implements CodegenConfig supportingFiles.add(new SupportingFile("ListWrapper.as", invokerFolder + "common", "ListWrapper.as")); supportingFiles.add(new SupportingFile("SwaggerApi.as", invokerFolder + "common", "SwaggerApi.as")); supportingFiles.add(new SupportingFile("XMLWriter.as", invokerFolder + "common", "XMLWriter.as")); - supportingFiles.add(new SupportingFile("ApiError.as", invokerFolder + "exception", "ApiError.as")); + supportingFiles.add(new SupportingFile("ApiError.as", invokerFolder + "exception", "ApiErrors.as")); supportingFiles.add(new SupportingFile("ApiErrorCodes.as", invokerFolder + "exception", "ApiErrorCodes.as")); supportingFiles.add(new SupportingFile("ApiClientEvent.as", invokerFolder + "event", "ApiClientEvent.as")); supportingFiles.add(new SupportingFile("Response.as", invokerFolder + "event", "Response.as")); supportingFiles.add(new SupportingFile("build.properties", sourceFolder, "build.properties")); supportingFiles.add(new SupportingFile("build.xml", sourceFolder, "build.xml")); - supportingFiles.add(new SupportingFile("README.txt", sourceFolder, "README.txt")); - //supportingFiles.add(new SupportingFile("AirExecutorApp-app.xml", sourceFolder + File.separatorChar - // + "bin", "AirExecutorApp-app.xml")); + supportingFiles.add(new SupportingFile("AirExecutorApp-app.xml", sourceFolder + File.separatorChar + + "bin", "AirExecutorApp-app.xml")); supportingFiles.add(new SupportingFile("ASAXB-0.1.1.swc", sourceFolder + File.separatorChar + "lib", "ASAXB-0.1.1.swc")); supportingFiles.add(new SupportingFile("as3corelib.swc", sourceFolder + File.separatorChar @@ -181,13 +181,13 @@ public class FlashClientCodegen extends DefaultCodegen implements CodegenConfig @Override public String apiFileFolder() { - return (outputFolder + File.separatorChar + sourceFolder + File.separatorChar + "src/" + return (outputFolder + File.separatorChar + sourceFolder + File.separatorChar + apiPackage().replace('.', File.separatorChar)).replace('/', File.separatorChar); } @Override public String modelFileFolder() { - return (outputFolder + File.separatorChar + sourceFolder + File.separatorChar + "src/" + return (outputFolder + File.separatorChar + sourceFolder + File.separatorChar + modelPackage().replace('.', File.separatorChar)).replace('/', File.separatorChar); } @@ -253,7 +253,7 @@ public class FlashClientCodegen extends DefaultCodegen implements CodegenConfig } else if (p instanceof ArrayProperty) { return "new Array()"; } else { - return "NaN"; + return "null"; } } diff --git a/modules/swagger-codegen/src/main/resources/flash/ApiInvoker.as b/modules/swagger-codegen/src/main/resources/flash/ApiInvoker.as index 6d8466390a6..98d94052ec4 100644 --- a/modules/swagger-codegen/src/main/resources/flash/ApiInvoker.as +++ b/modules/swagger-codegen/src/main/resources/flash/ApiInvoker.as @@ -2,19 +2,6 @@ package io.swagger.common { import io.swagger.event.ApiClientEvent; import io.swagger.event.Response; -import flash.events.EventDispatcher; -import flash.utils.*; -import mx.rpc.AsyncToken; -import mx.rpc.events.ResultEvent; -import mx.rpc.events.FaultEvent; -import mx.utils.ObjectUtil; -import mx.rpc.http.HTTPService; -import mx.messaging.messages.HTTPRequestMessage; -import mx.messaging.ChannelSet; -import mx.messaging.channels.DirectHTTPChannel; -import asaxb.xml.bind.ASAXBContext; -import asaxb.xml.bind.Unmarshaller; - public class ApiInvoker extends EventDispatcher { private static const DELETE_DATA_DUMMY:String = "dummyDataRequiredForDeleteOverride"; @@ -112,7 +99,7 @@ public class ApiInvoker extends EventDispatcher { var qualifiedClassName:String = objDescriptor.@name; qualifiedClassName = qualifiedClassName.replace("::", "."); var className:String = qualifiedClassName.substring(qualifiedClassName.lastIndexOf(".") + 1); - className = className.toLowerCase() + className.substring(1); + className = className().toLowerCase() + className.substring(1); writer.xml.setName(className); for each(property in objDescriptor.elements("variable")) { @@ -191,7 +178,7 @@ public class ApiInvoker extends EventDispatcher { httpService.useProxy = true; var channelSet:ChannelSet = new ChannelSet(); - var httpChannel:DirectHTTPChannel = new DirectHTTPChannel(""); + var httpChannel:HTTPChannel = new HTTPChannel(); httpChannel.uri = ApiUrlHelper.getProxyUrl(_proxyHostName, _proxyPath); channelSet.addChannel(httpChannel); httpService.channelSet = channelSet; @@ -201,11 +188,6 @@ public class ApiInvoker extends EventDispatcher { } private function onApiRequestResult(event:ResultEvent):void { - - // I put this in comments. Here, it's trying to parse XML and it fails if it's not XML. - // Therefore, it's better to have the raw result that we can parse as we want. - // TODO: Create different parser (JSON, XML, etc.) - /* var completionListener:Function = event.token.completionListener; var result:Object = event.result; var resultType:Class = event.token.returnType; @@ -232,9 +214,6 @@ public class ApiInvoker extends EventDispatcher { } var response:Response = new Response(true, resultObject); - */ - - var response:Response = new Response(true, event.result); response.requestId = event.token.requestId; var successEventType:String = event.token.completionEventType != null ? event.token.completionEventType : ApiClientEvent.SUCCESS_EVENT; @@ -273,4 +252,4 @@ public class ApiInvoker extends EventDispatcher { } -} +} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/flash/ApiUrlHelper.as b/modules/swagger-codegen/src/main/resources/flash/ApiUrlHelper.as index 8779610cd48..4333c6c7e4c 100644 --- a/modules/swagger-codegen/src/main/resources/flash/ApiUrlHelper.as +++ b/modules/swagger-codegen/src/main/resources/flash/ApiUrlHelper.as @@ -31,7 +31,7 @@ internal class ApiUrlHelper { } internal static function getProxyUrl(hostName: String, proxyPath: String): String{ - if (hostName..charAt(hostName.length) == "/") //remove trailing slash + if (hostName(hostName.length - 1) == "/") //remove trailing slash { hostName = hostName.substring(0, hostName.length - 1); } diff --git a/modules/swagger-codegen/src/main/resources/flash/README.txt b/modules/swagger-codegen/src/main/resources/flash/README.txt deleted file mode 100644 index c9a2a38d6a6..00000000000 --- a/modules/swagger-codegen/src/main/resources/flash/README.txt +++ /dev/null @@ -1,65 +0,0 @@ -README for the Flash application. - -These instructions are given using the version 4.7 of Flash Builder. - -How to use the Flash client library: - -The code which is given to you is to be considered as a Library. Therefore, in Flash Builder, you have to: -1. Create an ActionScript Library Project. (Warning: If you are dealing with Files as parameter, you need to include the Adobe AIR libraries) -2. Copy the src folder from the flash library to the project. -3. Copy the lib folder. -4. Copy the build.properties and build.xml. (You can update the paths in build.properties) -5. Right+Click on the project folder and go to Properties. Then go to the tab 'ActionScript Library Build Path' and add these two SWC: 'as3corelib.swc' and 'ASAXB-0.1.1.swc'. (They are located in the folder lib) -6. Create the Flash Application - -How to use the Flash client library in an application: - -Using the Flash client library (especially getting the response message from the server) is a bit tricky. - -The response message is given through an EventDispatcher. Therefore, you have to create an EventDispatcher and listen to the endpoints that you're calling. Below, you will find a pseudo-code explaining how to do this. - -After creating an application in java, you will have a mxml file. In this mxml file, you need to declare a Script (given below) after the Declarations. - - - - diff --git a/modules/swagger-codegen/src/main/resources/flash/api.mustache b/modules/swagger-codegen/src/main/resources/flash/api.mustache index 2f5ccfe0dbb..7fa8cb03d0a 100644 --- a/modules/swagger-codegen/src/main/resources/flash/api.mustache +++ b/modules/swagger-codegen/src/main/resources/flash/api.mustache @@ -34,7 +34,7 @@ public class {{classname}} extends SwaggerApi { /* * Returns {{#returnType}}{{{returnType}}} {{/returnType}}{{^returnType}}void {{/returnType}} */ - public function {{nickname}} ({{#allParams}}{{paramName}}: {{{dataType}}}{{#hasMore}}, {{/hasMore}}{{/allParams}}): String { + public function {{nickname}} ({{#allParams}}{{paramName}}: {{{dataType}}}{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}}{{#hasMore}}, {{/hasMore}}{{/allParams}}): String { // create path and map variables var path: String = "{{path}}".replace(/{format}/g,"xml"){{#pathParams}}.replace("{" + "{{paramName}}" + "}", getApiInvoker().escapeString({{{paramName}}})){{/pathParams}}; diff --git a/samples/client/petstore/flash/flash/README.txt b/samples/client/petstore/flash/flash/README.txt deleted file mode 100644 index c9a2a38d6a6..00000000000 --- a/samples/client/petstore/flash/flash/README.txt +++ /dev/null @@ -1,65 +0,0 @@ -README for the Flash application. - -These instructions are given using the version 4.7 of Flash Builder. - -How to use the Flash client library: - -The code which is given to you is to be considered as a Library. Therefore, in Flash Builder, you have to: -1. Create an ActionScript Library Project. (Warning: If you are dealing with Files as parameter, you need to include the Adobe AIR libraries) -2. Copy the src folder from the flash library to the project. -3. Copy the lib folder. -4. Copy the build.properties and build.xml. (You can update the paths in build.properties) -5. Right+Click on the project folder and go to Properties. Then go to the tab 'ActionScript Library Build Path' and add these two SWC: 'as3corelib.swc' and 'ASAXB-0.1.1.swc'. (They are located in the folder lib) -6. Create the Flash Application - -How to use the Flash client library in an application: - -Using the Flash client library (especially getting the response message from the server) is a bit tricky. - -The response message is given through an EventDispatcher. Therefore, you have to create an EventDispatcher and listen to the endpoints that you're calling. Below, you will find a pseudo-code explaining how to do this. - -After creating an application in java, you will have a mxml file. In this mxml file, you need to declare a Script (given below) after the Declarations. - - - - diff --git a/samples/client/petstore/flash/flash/build.properties b/samples/client/petstore/flash/flash/build.properties deleted file mode 100644 index 8e77d88c961..00000000000 --- a/samples/client/petstore/flash/flash/build.properties +++ /dev/null @@ -1,29 +0,0 @@ -# Window and document title for the documentation -title=Sample app AS3 SDK API Documentation - -#Path to the source folder where the .as files are located -sourcepath = ./src/main/flex - -# Class-folders you want to search for classes to be included in the docs, seperated by spaces (for example ../com/ ../net/ ) -# to include every .as and .mxml file within your project, just state ../ -domainextensions = ./src/main/flex - -# The Location of deployment library on your Computer (PC/Mac) for compiled SWC file -liboutputfolder = bin -liboutputfile = as3-sample-sdk.swc -libpath = lib - -# The Location of the output folder for your generated documents -docsoutputfolder = asdoc - -# The location of the test sources -testsourcepath = ./src/test/flex - -# Home directory for flex sdk, change this to build for Mac or PC using # as comment -FLEX4_SDK_HOME = /usr/local/flex_sdk_4.1.0/ -#FLEX4_SDK_HOME = /Applications/Adobe Flash Builder 4/sdks/4.1.0/ - -# The location of your asdoc.exe, change this to build for Mac or PC using # as comment -#asdoc.exe = C:/Program Files/Adobe/Flash Builder 4/sdks/3.5.0/bin/asdoc.exe -#asdoc.exe = /Applications/Adobe Flash Builder 4/sdks/3.5.0/bin/asdoc - diff --git a/samples/client/petstore/flash/flash/build.xml b/samples/client/petstore/flash/flash/build.xml deleted file mode 100644 index 4f021b0b8b2..00000000000 --- a/samples/client/petstore/flash/flash/build.xml +++ /dev/null @@ -1,192 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - docs created - - - - - - - - - - - - - - - - - - - - - - - - SWC created - - - - - - - - - - - - - - - - - - - - - - - - - - true - - - - - - - - - - - - - - - - - - - - - - - - - true - - - - - - - - - - - - - \ No newline at end of file diff --git a/samples/client/petstore/flash/flash/lib/ASAXB-0.1.1.swc b/samples/client/petstore/flash/flash/lib/ASAXB-0.1.1.swc deleted file mode 100644 index c93590267846ce45564dfeff8275a0030e39b2fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46948 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 B 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®@5dE~Z5k#<;(zR1rKh?7gYZz`w6Oek7LVGO(-tz-3vzwYWj zo>Pb^FqwJ`31rG)sJ=jYEe*;G7w(Vvi6vNBBLn(&aE?$r|D<6!>fZyTP5U0}=0Jn| z{q-4%^=e?;=0hQuIo8IM8c>13OJr!*xeH+iK6ewTQcvyE_c-&U4&l-AEL?m9JvA5x zc%=Xjk6h3){yIj&e+Byq)jt~4xi5!pmOE8F`eC&BEbk^#R&P4a*7LrAfK@!!Y_XPT zfw^@pP&T_U4rqffLa$j3L+Q$Z2r}Lh`4RE%>gf;34DbiiGJ_Q*jhUz-V6>xNg%t|sSufuxZ_}12r z)XpSH#?hsL?g#o+X`e1F<&>7D8twbNlB8S$+x^ul+fI-k7_i~(QB`wGs1&@rVIBN+ zx086Purkfa+ICR;O_D!qolF3M#!#v~1uD$0{1Q=u?XUesxy!@go|>CA=v}FeJ3)-t zB*y|5V4PEK=*P)$ZmGPe?aSr~%w20BcBh>(Dc*3Q9aNU`SKy%~$HF!Ci7u_o<1m|c z6aRRqP#XPl{NW6s8Jn}l3w&>8IomwFd0`HG?zM|C8LS_TdEmkGATGA29O%p@GqkDN zpN_1DPX5k$oQEPGR6SmW^k7vWhLUe0H8vMY^a;#51Nh<%aLJlX(pk1^-pAuJIf#Y$$eiHcX%Q zr$^LhO41@Cab&c8)ho$qiYE(j`~)oDJiP~*^kR@0P>H6ez4&OQj1LRno&IfHH~{91IHmq* zh_Lsc`rK4QBs14=EZk*wu5EXF`WxJpVMxypDhU+CCZHO`*%2sJ8&JO(r-G9GoI4Mq~~5J$}iag3wgwZ+4(w0CeK|DIUY#Wglthn_tsd9(Wv zni=PKURd}W_yByO*-gTNl@4y9g>spbWA(V@@3^jnZN1bLkOqvmAo~#avLkKF-JjD6 zZU)M}odnJe4ih_E)kl%-K#mXTp&?|$3`58U*Hq+KJ&L3KIBh$T-}g&GCbeO%X^QWC znFQjmv;+8x1iok8CrAd-tnv{dE?$uC#ztiEKsf|R1f%vMw+hhp{c-TRNgX$fg=9PsAAH6^vZm8;whR+c6=aV#!i=%%HzW)V!)-`I4`Ug&Q1+I zNToAbRteCY5F^5k7_kF-ehZXOCQ?f#Xa`CSB8oLraDLr57O-ZP=I07}fwguUy0yo! zkh?3>3r$d%OyQW^Qj`LBl0&{>uE;Ve$l1`~qV@5v)fE`V*^i?|f2%}g0t3O{3r{^- zu5(^4w|Yxo>cWdw)m7Q+jWlD1u;g)A>2EjjOFe)H3n8%d%~&mokfqzw`#9$hiLaET zVlL}*(w5KKD5Uts9DBNcz*j-^l26+=qRp01SOaxbK>$2t4{QhQP|O!{mAHEAH-}fz zU*vJUE~#|+{WgY zg=Y)|vi7$l(L&BvQ2(ZO*FFaKwwl}{=G(DqcKz3*X4VHLIrZU&l>)LH$c=ezrIqDn zkI(xt9Z1F4i)Vfd3`$EG*iTX_{wrT2mHQW!clp0s2pe-2*qOfUYGKq2BI4&xfz7vJ zydm*WoG?4E#IbgX5o{etF3@Vph6bw^XW}!;zQRSd8aW+Ore_%B?!uF=f};p4@?I{8 zP-`H$v&P37q*010*Ar`V3=9ZiY@`Ns=k2+kD-c#(mze-Ka6;E%xxHF}n-g6AA$oS& z2iMW89~#gXf7m*I#aB=xzVB#m&H4UF_Lxo#s3Ia-B*v$|2UzRoYqW{1wxBP0^Twph zuQy;+AwA0o8WqOUM94^D3~h(On>z~uOh^=T*vm7U+(3-* z_Q-}jY`wr+%W>(1;`c9E%2SiYl`VHOpt#J@uSOnF_a~72?-lj90_2X+iyf zINmRcd^Bi}w>k8M`z6nGU)co)V^??~DoD}`c-oReh@%e4VGYII-laO$AyK^MrTy(P z9A$;b|AOFLb-cbBb(#Z2Hod?^ z4X+V+=9P}G14WVfXc_qy1n1-fMWo1@3N7<@lP=k29_P>sJj+muga#RySlLW-=CoVN zb+u}SriYH~K5~*ga!@DQU$7T!`XGHZX|9-D3TFVC4g(yAE1%2Zw~-f<7_RsDHkPnC zQ%l$2FxNHuZaN=h8E;tCQV0+b58-I#2Vgp#&G5{(8Zcmq{?ZsaIWqfRm^xDS@dI&B zZ_pU`EGZl29bmBvPV*T{flVI;BBA1#TP!S$Kt08i5U#aMSh8I ztQsWo{k0WY78CuJc;p~D2dmO6E~=Uyl4Aic9le0Lw%dztXLr>O2G^V@U36#O#oKc-M~*gd-Qo|m0X(mEQdJp% z$}t3$AH(L-8*TI#MYE&iN3%6a+Z18^ayV=~SN3=1B>5)!&9gBBN&rjj=QiiEmTMVr z^|pB+vvd?2vkzZV+<2z^DKPt->l^rOr94w!H`Bgt%gvCWb2v}YU$2}(VWqb9e5)T< z)FT+jz(dNei>SLjtFYJiN5Ju{buO=Sqa+SoJ(38|wcvS>QBXZ%L3kD@iSE=zkgqcI){ zu1zLHtB9%u(j%11m3A_p{j(qr3Uq}NRwCD1I6{*%pTcEwwJgT~E16+dF=cgWfqK?^ zqwC5gAkk1JR31;HgLkbhK`67A;JElGYqdAlGgJeft^;(9RWLGhiU-ks4DWJXkPE zdmAjlF5aWxgVEE(35+$79P5E=cqB9toZ4$=yF)2yRlM#|e7zdDuMP2ljRqz7SwebiMB3rHRYPL1U+hmWtlWUDY56NzLorMW z@_tuiE9+6UnoJEVbruo z{#ADQGkICTeCbSK3^!xfS0Kfe=k-x6ACU25wjv=?xH2poS|w)-9bzcSJWC4D<1&v) zf4jZyMr;CsX8%lAm>qUa*txKMwJSkVssrOo@bjkAF4#)YyL#NF3E-2DsrU21G0*`! zMyn8K??<{8|6CSG5QjF?hhh5gU4rqg2)shPav+#tuZ$i(*N6a+_2BAwCzBef_Gnv6 zdD!Tx!ptvut4Jr=9rnsKQ9}1uRYCw9-=*jn$$sI$jEL?1t)XQSRXhMO{Y4cWri*%( zA%;@C>Ja9$ipwuFEZ`pQjeD-{=}4~7oCNQLHy=J0Egyly$cuZ_Ol+^bSpPl`T# zg&94Q!ZsxSf{hRtBK`>Kt%6n7706w%X4tQ|kw*l^70bn) zHWylFs6}HVhD+i>35EKOL^(h3?2*_bxi5qeUJ1g5hXNl;N3?k=hZHK0{&jB6^GbIV zXVus`!fEcrKNbioSt=NFH5o`w@aeD(g|IxI057kFVjehr4JY8SRtM7gjq?0w&>UCb zx%6x=qnpYTLEBsf;sgwE+S7#jv-;7PP9I8fsA-$$s8|`4MfQ8~#BSL=Mkwo$z(<$7 zFYlM~dEuTgDkbC7!%iSnO3R6l`;s2lkV{k!x?DANu9+vawuy)MtwVsEXeJMq6JKg$ zhz>t2q$dZzq_4;3072toLmu0p;2(ZNJ4l=r6=q!4_wQB0pXuLYvaD~Xbs-s$X2hLj z?QYHiJctJj`Z`k??g=o2-|%q;lmZ>3!cu5C>0MQMLs7_!)%Zv(BM~l!Uy%P1RPv#4^nG@1%7#b#GZ1Nu_`5e>dgA zZ`*eg3A^-`L@xyFP^Kr%APG)_eMkQ}eT}$35(6=NgV}Jqgf{?f{cyTdY;?|&zc*AF zJk9M4%`(xxcFScHiw*<>GqjftR(5|;IvD$Mpmi4!#%cY`f=aJv~3<%I@Ghf{D}6-F?Y-cWv9W&!x@`K)k%~23yE#eJ+n-Zx7;a*w-4J};6xqGJ~K7= zip5&zMwNPaR#qzyK%^?q(J2bW{&xPsDraqKZM(-W;RxExdy- z)OmpDhku7(I9c5onE$F0OYXLD;WF?hgCT*)@X{k5Gti10c|Irm@H~{VR|YNJ`+++M8o?j%BXAsZvUbhi6Z^V@rn4%29w9_m#X% z8f?pu*9&l0B*8 z4%N~vZ?uikC=aMxm4RYyC>varM^y-oDDNWwmH2rGw1UjKM901)0;-v;$3z4PgO*pr zewv4mU!Sd@I_EzQZ~ZzFbSbvzqCTBs+R$v0%Old-`biTpWR6^-H|8$NO>^Fp+P?c z1HukUhH6OhLQ<`#w`?A%^{NG=nv8rM_!55$H7xKWH0O(T)%T z$y7D{jZ7lzM@ObJeA4!P0quT+UQma>g-HJZPsHky@7J9albuzy5DH$tz&-&BbDfa4*0|3V#!iG$hrDCJ7rf^&(N#cXcXL?P);!&()0T%vm}wE|+ri z#?TdBkZ||KKL~3|an${pAmlJW*uWp)fvBb4n5_Xi_59w&o1?<74Dw)e1qY}*u%bKh zpiEItcp$tcsUm!kOFP&KODm1ASoki{_OPqw?%{Vu&ok^!DcaS&5Le@g)x&1%XqZBB zjJg6BtH9>ZT|`En-BXcR*0& zJ(3G1sEf>1wrO-_q$PM1lCv;GN?wNOwmEz^7?k>X?q%PdOVPwKu#(dRMyb-*q7s#o{c zAWI&t>b$h6MbB@%8%&j2X02TSdbYN`x{qsY=oXv!)tY$q5A-b@9hupX<#FjI5K*?0VH@8*eY+ibYk>T&>Ie_~zWY0wSBpHz?#)0$6z28_a+N*U@2v$?5jd zASq6kHP*5A^af+N*CYP8<>6tA$L2hNo1DXtHsJ&+HP%+wsM6-kmZBLCL298&l=fN|%2@;T-qY(WJmW&x>2(ouQB}zBVYWF6sZ%SQ&=1c}_etQA37y zm~0)cOL?OEQQvhWa;Cvvxk!$k)V*i6%07y0HHRW+cwR|=pL{uvWt$)tM8KvVKNR7> zo2{;EDB^WZsKfnDhd3TU=?;sh9DJe4dFgyPj+kuR#*MdNKbanhSL*k-eFVaA^f;}g zqWZvIRsn);(p{N$uc0VDCxOS34dK#h%yyQ%9FvxX3@h0hv98*@|3SZkC%L-RT3iWA zmksvM7}g9_h95XOu+Vt@8>EJ&x&8dyel+vTBbr!Hn%;HlbrMS-=JDvY3zA={KAjM% zR*Y>%H4`82pqiq1Q8!@d<7p3!dJbC_!IMmJ;qU=O37a?gnpf%ASS93Mv3oAhxOQxF zCC0%DdF>Wv*ph7v{+$B=lR+Gwut&$6VBrzI3qAK^W!ajTX3^9snGy8<*EQaM&VqPg zcVgE+!#FYM|MdR;cXuJyf1d?Md!zr^SEy!Vhs6f{gWLZbz|Y$bq*!;;2?L%AXmOYi z`T)9Rp$7elzcHQYZ$^F&K7Zh|SRGYcFw-ybu&5Y;J=sR+6F{rM(D|^G-tPF~e1-5gP?A6Q`9< z(A>UnjMRY^I!#qSK>&irF?b)fzFjD3h_amN@iC5xIB%knzCBGx|MM72B*4`SH{3r zHVI{)fy^i`37kOUEa|!+IZ1H=mfkWQDMC!|rI{H@^>&1&5iva(|FoyYbK($x)sa0> z#1}Sb=!Pc;=KbIfr+{&kluiL@TiS#cVbEW#MBAYsqW!NDNdS1t5u!A2>TS>>!xo33BQ^Arl3tMi(@Va;7gIK+$`Ok%%Mq8P>hU10)JQ~#)DwWYRF<$iOdbtJMDKT zG{v*eWL9x=gNOThlk;^ zEQ2?dW*}SZQ^lV+PgYG~{icQmBCu#hhXR-Dd_o!3-dDASenuSTaQL z2i~vIY2KlLAokYAo6R@1@9Go(4*+yPi@%oHsa0*8a_GOPpA8zA3B~Uz)&UE)Dm+H~ zC{_;vEbPb%05mwp8s&s@2hm{e*BQg zA_i$%X{X@1Y-FC!D$U#G<`SXu*I{yC5%;YIh9jCRJE1ZW*9;Ru8k1O$6V?mKvDEsf!=8R@p#3eeC3<88)i|lWLFS^4_Jdhq zw4n2C(u`aGFKxEa3kP)pI4;XDVPrDe#PPPq^LDz*9dJAbXfzX7fF?Empsw&gy`|ud9NHE_U6v8gJ-U; zVtiiAAb#=_V?^(IZ;YYwW99IOhHzyVUZF$z`eC>?X}*;r^@9dl)b5z*`^P#gH__|X z7!M2K`QRDivhJ)W^a0OcKT32vudnr{{eJaLk+wOwDS2P-q0-T)S9Cb9}kR)5LKEAhgrwcKU*d0e$ znH#k2dcA)ZmsS6uru%c}vCS+~zec>(3x7QhXKSgsdmF({o3W_9gxMuNZ^2;YFM>0~mGM6;Pm zSgO^CB3A2Osk^u@xNEglYpqMIT3aR&XsuRjH@nHR`)_Ue=iK*ZgNWe&koWF==bn4+ zx#ymH?!E7wduN*wPX<=#S z;9&o}%F3-7|P}fu+${WT2~m zu&b}vL(k#%zM;W|rKJ|tj!2Sd|Ik1;C)p9HjCMzRqP>H$N?(N!33Wu~>3st|;lV}W z{{HT+NSMe~ZkrqH?2DYeHM}J{SMLtTIu}%?5Gl`K*I;*aQA0;xd(;!`j&Ae#Jq@Y+ z9NR=8?l9UT>Yr20<58 z9wBWDf(^JxnBpFqP~t0D+F5e)ik4GOK5fnF?cG}|POj_e40ko3d`^Y1FZ+t`KK$`l z|8f4=`tpAbKJaqs%BAj)qy<8wc*!mIoneeXfhaeEJ zXIo`YG!_eQ?&{rKxr)c4>!Y#$zTS@LfZ!G?D4Sl~v#lbDHt#63=B9a@I-*-P`768? z+cxO~;hyN$zJar2n^5>?MN#;h2KpnLVgr%+J=-=V>C8WpPDMDT;B)UFGjXCU(i!gU zjdo`bL}PtJ1Ci*ea4&)fve#!mJCVHvO3bl2I@sJB8w~eGqAEg%x(8K!8XStLZJfH+ zW|7s}ta99K1JQGaqOrjZT|Lo`HA90H$E@#Ba&o4lJFV0PDytwp#fn8^TC;`28cj}0 zk6j*TyAtbFc5FPWUdMrHaYC5NmT>n_^f>Wj(Ls4jUss1KO<-slveE@OpzyncckYUz z!LII@okNMT zgv}k3$JB{=37yD_^bH`>+}JgDOl<7#LQzz3QWcr?v*}^vu(7WrK^*C2AEC)MY~hx{ z0Zb`Q?Dv;`Q0l7Vqn56|g#2H zb&ZcL>FYygdgZEmf3;i}sP)N#s_MGDF?ya{UFFB@-s&nj;IFBZtLuIBa($rIF9!m3 z^`6hu3Ar{btQ(`GZRoGFz|Qkc!lq$(x_n7x)s z^-P-2v>GNYVNxTLR3^zxTE(PwOgoKU09lTS!$pu)P&! zwhj=gc`ORE=h!p>@=BHn5(sRu;1mF6ED=Ny)y0Bc0Livkm??lfwLx%zqAeC20;r|y z1QnQTv5+l*RRIE2^wUNYY^<<9^W81 zAqN%gXkRyE$K8Vg$4XeTokwrV4tnz5+WR@!MZPC~jOfTCt0 z-QIm(qd%nT>T;Z$5zvLe3lMlAgqY3{Dibstp;rTfuZ57NYY0|EQBfx#_y!=>ii8`$ zxCvUdI2Lp>U=gZ}2ul&+VUAENJPgL8(CP|h$7g)R?ks^7*5cnm@=-4$}{ZapWI ztLFyu#4_V?4h-fCWyTXki&0?dylv5V8;pZ#G~P+0@os{~&mlBE9vqJ}J|G%4s?+I6wB7I_bl3_r++#fDBK0z4hP+nbLWBeI{lg029<1b0r zJmaq%<}v;Tag?eZM6(GFTTC9NVja{38bWu9Tq~RjtSdzm>q-%!SyaI}2)&s@7YjFw z#;szjZ6>z)ZK747+r`k-;8cw4p)4*53Hve2y_m(gU*uAshN%yTN3_axY?TMaR+k5x zY%gWaMir8$?(<^il2CbQu0GcrnxoI*x6_2;;?CKa;#@}a`+q=kevk8sXl3)N(^joC zO<-bHpD#3h?wFB;C1&qLY33J8P-ITVI01_%B-!o|fiXaI8{^ugW*C zVQ8=u+tONXAGOq5{Kb}fsY1qH;YrmVtvn%iDvzD~e_of_5e=ClB-XqVBhdk= zC$?FN^mMoy`+9nCdT8Zvh0{3c-8_5DcM-Vuui@_@uuD|p;v_oI8}7FC^+yLd``Ihk zENfofwq|Y9`i2e7YgS8GBI}ARjkXVMc4NG&*Ap9x;Osr74|OXY1kOz{IL~6xjcc?t zu|zv^5RMb9w7g9xCgjhUgY$lyvBt^EkgB=F%dyG|(%ON~fZgZ%zT(kw4Kair*mJJ; zE81Y6+3i1PWu$N!sAhF0c7|hXqrDx7X-y=9Nj?<5P*HImMys$$8UvFOHP5WFxxA9M zh6j4n7eWqmqRP3p4fOR5Him~{(X5WHSbumh(#hdpSe6+pjLc=`G0oTFFE-Inu}PLo z3Do)OsxsHZN}#r?szwRa)YSxBnYEgH>{=Z)0ng7^+*q^r@tL@JeEK;uzYZ-b6@dTCe8Dztvgd_CLR z683!FShn4-T5~-4IUeQD;`tN0KI1cUCNL3>`T~tVq=$G#`;e?T+?t9_;je zuFf4f<`*<~cSkpeyVoS<7JPt9ynCg1Y^p^E=LPK%gvX*WPtQKW|w3`7Tq26{b&+0V_1Cz0%7F>V4YrhcZaAT*Ni z+|R8a+MjNEu}0Y0ZJ95hOFu)C({U)@apBPm?lv5I#y0MlK$Jc^G4|Ps-N(w=O*zN4 z@uAS_x3QL?{{FrJY|Ol9Z@9fX+LE4FHa4MHCf3nk0zMOyIu>dr!;4-~YWPguIHq>R zntS!WDWy13EA>PYI%B1J!l=%6oY2W#h-5caV6ZD1n`%vfQYblLLv2m6WnQOgCof{*w(h+lIn*Ds!%FVSV4jels4-O1Pk4%Y?1hU+fLsl%{TM*)Yz;>x1r=>&@1;3#X67rjN!CM zaUg44vwC$?-$$IB)4R_I$J0*$c4p&>>*525un6PXpJkXJy=)P9vve&Mswatdp+ZvZQ ztX|eskfKI;tdb@jYshC^G%;JFt1Xb>eU2&Y?OU3HxAaFNU3yov<9NTyjBD=230YT1 z8Vzp9k637Ndp_;R9?I879!s}*CuN<{FtQrUZfHl_9F7cHy+6BY_0qL#npbaVTi(>L zv}t`FvUlW^etc@Kn)%{>!kFTr;%RX|fR=)iy`i~bWee%;`j)1In5KV5%?HzX92=*nzpIHGAU?gQ z{oLU%rH<*eSx;;;wU7TerU$(pjon!J=z!ID`LWKS!4B-MjcKOBnLcf2IHM-TD$dj^ ztIO~OJW5vK%BKxP&*GU1%vDmu;9#_;e=umx+_c0LuKaVB4Hoerr|oQs4qzT+NblO5 zsqqmG(-O1wEImror4AD{t0(P6PYlj-q^+JDy;0Ob6K`T>#kyji+~Z@s z#eBtL<3iaG-G&A;`Pw5p&92g?$il=D+md*NS?jC}83c~6+)P`2M8#5e4lCyU9D*ri zt1h0;B9_pA95i3i!3}+DlWXP5<1WLjq-ISUwyUP``@BkzIc$vcjA689l~q)I4zV$E zReVmCBZf8KaiXWjBX`dcCC)ic5;Pn!>=Q8@2;4_b;oM0Ir$lRvnR7 zT|Ly(9vvtMu53E3t#M^DTEMpErIz8#UA=MT$~H<$rqq7^3xV{R!kWZ8B!;u*#=idT z3SSSfjq6u##3_n~)c90|-s-HiRtnCQeKdNRomav+vmFzIL*3n&sh~3)+t^D3Y4;Yg zs~h^xj`qf~2BQ7l;fVF5C6*l77C1o|=1t91@`PRC!wN2PaOkW!=GynD_Y8&Wo7Qb? zYT3|6Q!1KTSOe=A-^!10rKvtt4K9*5-rmw3NnmrH9$rMA_%s|5;3L(+$ zEqU0IZw6X2b74z(qT4#dG}?4{5`}pBxO*Ee7Z`ok5}fLiD!ckKUen2S{y??j^Va%n6`wCqPkt5tD#hpbBEVlC z@M5B`wkn|bY6Dd@a(#6*B?fAIc(1CjQT(+&%3oFE^U5`~RrPXhZEdw&SMT>@QeAzm zD|7y$RMpn|tL&)>i&9nZt*u95KCf5t`vd;k@t@VV6@Oiw*QfZa>%BfXQ17jlF;;_& zRoDCF8ZYta^VQcCjy=1C#ht(I8-E52$kuS9h<5~`^U)Z`xhvJ9nD=S3E4 zs_Oh$Q>?0jM7;HKb#1j@rn!)Uu$o%A&KK~h=0skps;&xn<@);CI>m?5Lh4mqXtmy& zfIT&0DOLV}*DKe0Nvzd%D7AnOC5SbttMba#HC5iMjFqC|t3x5XGRIWK??aJb3HAQE z+@oLCA+f4j@6o<4wb*J{D{r7W=cr*?L9M9r$#sDMR=m2_hZXl$)nJ=?>*|ox8h^Df z{R63t*tK$vzrH^A=(!^Bs6iNDw94maNhx`KHTBqbTvz?o zfx7&$-ijiR{s76*@2yn=Ro=Q=&ZfGSkwua@g;Yis0ctV#9}ugPpXAX z8m#&e?mi07DEEeYqVnMO{%CRXWq8FHFT*`!e9o${8j2z^R3?_D`Zt>8V!$j7s| zGT#cw*w5;wDo|)IbQWe8idum-sc@P$b37;umBoe2$1g5CbDX_sanXfPv{Bmu+C@;f z3$#5@_#6~|2ekcAcn}Kz3Wc|dh2ItnzathtAgMOR>2l}f=H(YSL`8L&59448h~Rh* z5+AFxnCN1%n<)yD@|dDBHJ>SkOc}@I@l2V(*hHolGsVNCsZ5*BY%`c5Go_3vv&rR2 z@iN87lqzNqF#9~_Sj5DWn9{(Ujm#NjS<9Hx%$zHjOJmAP=32#^tC_NtIoB}fTBbBH zWj#|iGUZg}JdG)5u`g6oSn>d7ISqoS1)t+Gv^?4Ze`9dGx0p; z8it9$lna=0F|fi*fH|+g>uS8NNAPaEZp7;*ylw%;ZUfuxAlfblktuhBZHCCihk%WH z43i%Rragh-lXyLa*EjKc8n0*Y`W9Yo%=v9#A7gk3VFq5GV0?g0`U?hsLl*vy;s4?7gY|`x*?!oI0yza#7E)o!4_u%yaUJv567q3T< z=HnPXEwahainixPi79X6^8uv&4$}M(uV3Ty@9;W=*PrqFCtim!{X)dOSYlb1NX+$B zj9)D=^*W62#`sMbzYXJeNo>M>lFcRC7AeegzjPA0ugQWa$%<`QM!f{LG-Wsk@BZN& zN)v^-bJtxeI`QAqCed9ncf)YYQlat`LGYa}fZG=y4hhu}j8#W5Hn$7mXXDj_S07&I z5KatJDu*yuxrK1HVQlVpjQP%`)SW=U%K@>!hPUb~fv8=@q1RA+?zKFA9glyV;=XTC z+;;=U!M$QH4BrgkUi=yiKTP2d%~1R?49lWhlzxt(BDv>^bAJtHO@={!9|YfTIK|(> z@GzoJ{v8Z|gkkQVVYpRr|A*4rE)s`ZiAC{Ju-gw&>ZKe~bvXv&WKp_8MB0M;N|E@v zDv37v8gck)5!_e7_2Tfg7?ExihY|07!khdMB?`WWML}>sNszXuL@M)}1b9Z|E`{N0 zv8JxJp5N#5`vQLdmdJzW%-{tx_^uheD1J|b)|bqOm(Ac6GkDbuzHbJvnZXat;B_;2 z!wlXugCCl~TW0VhGx)I?>@$P78H||0s2S`xgM()96Epa!8T`x)-Zg{w%;4u{@V*&* zUV$H-mqe z!T*@Szs%s@X7H&Q{KpLbYX-v-4|bTrMP{(m40f5prDkxM8C-4#Uo(R%%-~8hxXKK! zF@tN(;Ok~^y%~JN3~n%k8_nQmGq}YJZZ(73&0voi++hZHn!(*>aE}?>YX%QWdnFJ? z;2}wTSb9WyNqkhYqRL~5So!0L*b~x|iRe=pjh zQGNz&F1QnvmM=F53qhH+Sg002?N}`M>~>(AmI#`t+2)y#_626>Si3~9gR^XjkPlh4 z4MHurE`%k5Thy|zz|aHkwT*%UavGNiIGX34Wai2nY7l&oe;YIkc~EdAGH?}u1cfDw zg-QX&1+ZjMg7IfJ2!5Dw7c>Z^P;@tvn*|fg8ifLw6mAgaLh(JAQUjAWHwa#sVnfmb zcuILN^$H|C6{dw23#|f7pKlghaxZ2mgBiDDFdt^#hZHA3X|zG8f?3z&!(=GC9|IT6 zE?*){f;kI0JLOv%ggTfzgG;I60n9rSD!nE}?}PX_1AG@@HYZfwh{1U9--bah1eSAF zs`tV=p#*AXFBawsPl9Snx0g<*;xO&#>qb zB$f>)O}*CQ8G;N&OqsTx+!;f${8X%GUi`YB|0I;^=2lNP|*>;_>RtotSwkOk|5 zX1lZuW7<5}uoIySHa?9{m2gTOXYAAl9-Jl!vN$CObC+PddV=B|;Bds)6keh{1PdKf5^Iu*^}0+%)?P!_Ji|E$J;S*XnRtAS^Z2^Mc-;|V#AT2H@%Uzvd?k{9%Oqcd zk$5mqFn*Ncdv7iig!0lIZV7`~JAy8$%!nr|IFiQ7+m2Aap6}Vad&}%C#B>=w@*)dh zOYQ_L<^abC<-~(Iz!M6^GWRM$I0SRVcaYI?>1Ph(9fyg4wJ_dwkpC_PR7&~W@(SbU zj!}JFaJ)hlG~Rc#%cJ25#s?gsT@Dr@A0LuPWDy&?h}x+^_|V=urF==}lta)6zq7Y` zJe?lIP$WrF2T*2P32Uja^$;|{R^!*uIyE#+pB9`hbWSxsh1QZ&gw7IU`@UwuIJb2M zNv-_k;7sV8VVu`mTH0A^e5G|($>Gjf#`*i=on^)at+PiuXB)%NI;XUAj&ULE8|f@J zc7o}?ehGIj7qR5YSn}oEPr6089FPIH9E>XvJ6vX5$=${iuIm?)d-FwNs6;PWE(lrz z{B;8F7DHa$i(s3AG{XqKMI;TVI&cU=!Yv~CP9s7*Z!t-^750e69x+sYLq#K8ig$_e-MMybw7bPnw%NemIdJyVYm{@&r3MEzaW`{dO!Nt)BI8}6 zQJA3d5z+X)6go*i32BT|6h(cGjM|?pad?IoA1o2bc!Y#MNyZ^5PN;d;nqv7xIs{)4 z|AF`OrGHAsCzgmVAe@AV{w%eg6z@FA_$x1DcP{brH>tJ3)7fDBQz{W+5!sDWwi*AD zLW@bO+hu)8a4}%P#=oV}P@~=$YS0^k*UlT|MPDH$w5O0@DQ2<2=xjaFz zr{qvj4V~nQ=h26#gefX>x+n2Sn*ZIaIEfBc&+`4nDFdeIy&dms`u@Xife=`8=d@ zlMvxQl<%+{TCOiA%d3**ZPuH&Ad#sFB0Ck6$WF!BrL-=OcP=+BRglOu8HdD+Xymv< zq4r;a?SJyYLvS+)cPPeP3Lhj^3b}b?2$awaeMb4M5GvEl;=xro5ZtT8_0_>O!j{}; zNk8rYxF6TgcY^q+V%$$@C4#;Li5d?mBjtAiHZ$S6k=TPu>skx6PUu`~>_voo5(xQ- z@Q~6v&jPIz%I}4}o%4)`5$V2kq(_w2`4-4Rnr}RcNcSTI>tQ^mj3RD{;F?Iotuk8v zfQ9-XHe#V z@v>67<$&>uVk&0rpz*3=>UJsV_G?N)v*Y;dcLDA4QI62+w@|Bpq_obN zi6h33m66@KOAss0NyLLKsOY0gXhUeDzEM9VuAds*fIZ{w1mv{1emaNjCkPIg`WbQk zOb+>}656D1%Jq;jP~wDb(%4s8N(nfM22aK5#`iJ(Jtb7Cm+q!^G~QQQOK0N1_MsA5 ztFJ}r)gbU!N^2<8N&ssERIAt-GJdUuLV76Frnl)|3WfDBFZMSa7;Hxk|AP`*udm0k zR4?=7ZzLW09>{-Ej6WsdBxU1crCre@yK{@N90TJs!x7^zN^8f=&JN?RN+=qP3T19m z!T-TTvN*aP+N^J;!rU~19JX+b9V)hC30e5RkWITa zzIUjhvyzQd8axX-#+?ZewT=n8i$ICyF+umLynV(Y#rxG%`<%9~G&o)go{sJQuxe^Z ziI6`Du^v^;S;b>!MymVcYUu3X*;x0dsO~dVtov@N`|~R4Fgrlg+~-x}1)c-VgF@y3 zP3#V`6^tIx*3v^xK0VlU+Yu?b^QhT!;6>GV5$Cuom_YN#@2Mkve%Kwh8!xG$o=|ao zWFOgw6~%I}2RVOPH8*d)s+yMn`^4T%8Hbx!iM_Xpy`417$imwy&BE!v55$jDT5}&^hh$igQ3R-d9I3 zSGd>sP)*Ep3z60@Rc^w5!cEu+&UE>7_BUAGKq#ii^g)7$mlz+Zp`rLla7Y}Ue9-uv z8rm`%+=6xbJyvv-*X|Egn^F}G#tt%`|1pJ424fh6|6omIp!@qEQt$ythgIXSx=(M2 zKeT%bvU(vSNt2*)W>D5HZ^?Bcdpj78UB3Vtt&EEqwbGFoI|<`M6Jr9*AVuDi+sb7oU(SrnnAsqgGpiA?<9&@`f8x`8Y{o0_As*gpT**c~d1RxnLV&)F zr*9ucsa(ydok!Z0jE26Jp(ti02BRAo4n{XInuC!}@xchEX*3v>B?hDW8Ffn()cwqO z(5%E>A~Ks0h{)3%;Uf^9X2!R$&^RyX+k`Vm60Hf#8yu-sc!L=~WT7tyzl?q0EfzYr zG|#zwBOx=!_gu52f%;XA^0bVhnewTh7+%ypznk@pLyw*0CHd)rVIzk z(Ata(wUJSMNojZ&Ab9k}*ul{e9H)MbPQ;zM%Xsz-`(gI1J(*&A3%F&E{=d!fXtS#_bxJjRVFW zjjZy%((((%@{eJJFD(xmcW9xn!f5cT#KB#}L4_(>mi2Ls6z>oSk88%0T0-HznNi=T z&H7#}ChPkxEk2gIJ*%1O_MDbfH`1K%YGwn!WJ!r4=FnigteLWk2gjT1-B*acO6nIq zG#}N>Zt+9S_>o2A$4MsRT6(V-F`2wXO!kVmE!up(cR&kW2EogaCF7tLFC|6(sg_XW zcc@S=Eunj{&<`~}VLCtsf2bM1(&GB%Q2r9+pKK2K@Egte4FbOgq|Lh!)A+46qDM;e zXJbLX(?-$;^|O$V-)kc@2l$g_&H+BwtnvL5D%D4&&ZLF0&3ubVjVKVdVTuq7u!sBcf&;?`($ zHH>)j&_a&vpf)EQ{TkSThW06b>oui2?bwC*>qw1;NRKA_Kf z@!-g4c$OwOL+2Vwf8oU2lo&k`|YhE4=z9sQkF$@ zBE-pjJAWkfEeKWU72eP@pg#jva2gaBcgnO5c7(odr9TV$vzR_vpUiKx?Z3FQm`*RS z^S$5il#H?W+j1v}Rj%#p?nXeyUhr>?vo?c&0wtMVwpOlrnYqRQaP0rO5j4B4-y~@{FFCAToK(;WY|+l*-f`p| z(=`z7a3_d1Q}UK@x7s%NMK)R_HyIE&N9`8zA5T*p(Vo_()BLvnuFadbw}&HVr>egC zxab}2a=P|tQt8`C%?+dfpTrYKj5U8zni(z5H!+&cH`Lopd%DTH&%$wXcTDTy|EWA= zf8}ve8q2?bZKh%o^OhqncS=+`qTS)`iL(<@yG)9XP{`GNy=(hoU4va)qQ|?_B&%Uy zGvBDpeg6OdYJlQcc*4Zecl)scv)vj_m`Zx9b4ujtR^szzoC-0av9C9V6;B);ka8*; z`-q4mj(spsv&bg-uNfL7qeGi+io0SKLmOk!j$q$F%TRmrgvS{7Ky;DuOl>$y9Rfjz zKBONzVV(cL562jDTYc%+`+kU}#O5E``(sa@vhbNFM`Z4LBFSb}HtA(oaFn4g@%if& zt~wAc7_+5vBbK0363#f0BYF0QEor>ysExAYYIg3^$!%-q_K5{2*rzixAKz&fsU2WP zoq|BegygksT+-6GzIjPgs<8_;t{wwAkzC!8v6k(+G2am-ROxEm&`5Z=5E{*-=Usu)pxGh zXdQ)P4~u+X?zjYQmo+-f?dd{5Y}{uI9$G(bAH=8eM`g6O1m~wubP_B~JjU#zkh>wz z4U-@8+?1Q~*hf7yo}lh?$8Re&;s3qj#JlHb8G*5OWj3EU`OmN;uJlGI@s?$3wY5iu z6dNN$(T>E>604Y%iAmdn35|{l;A4EQ+(A`b@g(fo^ODt z#bMu9=dJM~-J04eIS{Dw$$oE5mF%za*U2?rFVd>7^&-$;UoG=J3jQizAi1GKuC4VW ze^tmb-@_7+YwK&PU77YA+3{CZ$<@C4F?L1x>udb3OxYxk@A8c~Pnma&nN9k6WUEd% zcjd7tTazsF?4EH}@>+8vGObl<-&-u>I4xIyX05E<+n;kvR?g}*IH}-^b8FYxu}|;L zOKzE%mxS@1&kl<;tw@jPd7JwNGv=0Q`-2!pY4PjmA3(j@zIK2PVNTyP!K?$I(ht|l zJW?ySAws9DBeBgBkXUCw!-lEW-74xStk4)FiY`)XfEQ zYD05kFP?d#LGy_>@@E`}#;jA4)3*E;B&b@2n8%EnTc%UziKUKl9%pW|;pnUT29pPX z{GXW2JjuAKs>WZPbp))YzNY?&v%sqS{%SvB*ZOLXXSdCf`)sPvmIP#9Rlw`vhwDmO z)_9-;cD1>Mfx?=?lg2O6f=ctam4&AiuGIR9plC@^f6+PGpf;pD2imJJ{y8YZzt^DX z2T=GYP@Qxtt1FxDS1GiEq-0ZM+;~lL6;7BqsdzHvfa}W)#MFts;9#VRWQlNY}IsDuUyZhd30Q_ zw17zqX&;NUm^mBhNMC6w%W7iIWz4mlNh_FiGRt1Yvg?>_HOnqz_BAYfEz4fVoEwMye4}nem4PGCC?b{$T=^V!X0Jh}{oAO7POg}#$3fbA?%^eJiD&$NQAU9|7aIui% zp;!sV3TI%fu##Y2LCC2R#N0~X`WQl^s!X*@l^DQ zRP@PI^qZ;Z)2ZmUQqf9zF&TW+$HyrIHK~Pd&}12ry+0odXT5K^PCB z%{)hXZCG%C>F>i@rgGn13gls5YO6OKj78eVrU=?Q9*d_`^@)?VTGX?O( z!onn&Iv5rv!nD&l!gK*32&+K?VS)g~;_RgYh$S;lrL(L{W=b}jXq*?4bSWqcouYBlzW7M9Xf(7cGdmSyNvm4g zsTxZ|EXYi!>*iLCyskSnV@0biWG4^i5?EmuJ8j0v6L z)#Rsdo|}6vy#S$tV1ZC(yl6T_Ba0qn<#l55O@6kuCm*wv2t#f~5U8Xf#wS2$oR`lopF`(oPauDT zzd)#HWJM83#^3nK-ifA3xOtmRVyJOp*Zy&|!9uV~zlXr)_vBswyCvOYOg zC)6v7J24)GZZTA>7e9&3wwOK^id=rw;16T=nV6k>$UKe@p-K8ARDLShcmkih<$b{^ zz=iXqg=;)baEZg75kpzQENqi+i~A4=R8*4(b^SRL=VHWpk;oRWC>E$1#`h>eA$Ihs z;c3RpVraTPJy>FX4ShxAA1)h1GxeE-7AzHlv!pWP2V$r!G}}WU({pLI94vz};|ODi49g$~y=k$Q_mS`%m@gp%Rc7s%`p{9w;;AZhj@mX`} z^a)jhlq2{BrI=jcRW=wjM~evzQ|p|~&J6u?4%$(`X9MP)CL691dK>lc$F zT%GW5Y?pOF_tV7xh{k_J&v4B_xK-7^71y@&kI z?~_6cX7AS*ym%l!5?-K*8W{I;|9kAhq!H7uYAn=BISKavJ~!RO3NYkCt}*D#r~*7-t`OP!G*~70q)l?VfHf+p26d1fa%(WO%!D-w!DY}HpsS)@Bo8Vl*3HllhJYtn_%S^EKSL zy-v7BCe6P_Hm;LBw6#IP^kPiE(MrFOr{5?WH_JGxHmwj5sZf=f^G33Kcgtk?4j|@E zfV(Z5Cvuxd{qSzIjWV}yxv!F|t(<5@;_w04bb^9pGd?Vneb1#6WfJM>LC-3~o1XV@VzVTYcT6Lv_K72=ZPbGUaLiXsOX^vi$Ep7gu zY?&j;P5#{9&}W{JB}m3UoVhO<%}OJPpA=oiFd;bZ|;I-TQ4p_ie|_R+3^5&n}K zxju5P$RN1iBzReh;6b@nor%i(Q#rIMxC$A1m+!rx?&U;s9}>A=$upN*+bqltcSW?} zZaMXO#caoW6lzDhKMx`W-vQ|!#dua}J>7UtNz9#2H||rcJ$Uykt!K2$oo5&ikc<9A z*{-rXWhD3}chTQ;&@=3d$e!U)MDYx_M${4^!mtG4O(gv?z^97wmJ&LZoL_>cLTPxi z@na=!8q=SV1Dq1qzr-6cthdk1mk~6oEHm~aIO56sCUv_vKs<=F%A}tt#zBIUkKryX z*!YQpg=wQZA~yF|aJ+7}wQJLf8RH!#p$sR}%tHyCp`THX6B_csnTh7N!_ z!G6RcpP=3J)Xot8jRf4diJY@1sjA9eCA)ej-vzKvxKrgiakomc5bwp{J&^9h;O8LU zuNrr&85O+;8KHi6uNn`v>aDwmTMrudsiPj+S~aS7@8tU-rJdw=e!m*3)~k&N)REHi z_o4g)poUR~tFZ|mRLQ6M9AmFKg6&96^$60~o18z7>I3D!1Z)2Mm^v~uxE{8J6V>ArL-rtell+f0P*`gSjEv*R~% zfui3vk&UYq?%(t`$@Fic?_K=MSMns`SY=07WUz7-y`^dy90(6aH*Zh;)=BY9#JAjh zlK2&bKQ9x1dF94fbRb5)Q=OHufk?wKRs_k#PtIW3qB}PykKgn8y@1~f z`F$L}kLUMEz%-jI;Oc#`AYpG%8u=2t5f{v&LcgXZsY?VbN94(9@(`2J7IT#e0FrEN zE2qO#Xltux`Xg)Pp{f}++A?h47w-hav2UbPDoBZAF15d(_Pup)zjY{J#E#>rO`-V+Ao%_rbBxXsREJa9fh>) zMEn#fid5zwNrhC2od2w!7|rldslueaz_FZ-iTU9crZ*9on5h(WR0{)XIFQ}K(yB$9z<5#hX$iDTQX|rsgx;Z zew*X9q@?>1*O z_7Q{IOy!($EDN=^mrYeh! ztYRy)kF#rz@lXUsYT?wv>cW#`8#iGp8bcKg9|j+1l`*B!=9N@3*#Izp7>%yeGduwVR|$QFm=54vIy{q-m1F+A;wmTv8xth4xPc6J z)?&dWfFy{M*2y9W)gPK6I z(3*C+yfB|mY^a?{j1*z44q@XstiF_BC~IT>D8*=Xdy>f{RkCpe#}3p1Nv0hvFY>p+ z6NDFW`CJ4q;eDd`G8ivGT(|8!V7v??<;6ie#10y-z-YV(kzPwHE?K!(L5wfaY7P!y1K<*FFv2{; z&WMIjHiSm(baNbnnZlQ-VcHKtsTer~v!pIun8|k`d$X0h!HAS@IcP-V9=?v#JzL8L3%yUUlk06CXB3@z=gS$SHb;nzVWVxZ9fFH+J(qvooxr+ z>+L(i*xoL;Gd-7TX`I)t=|!BCiL@KYIN$wkS};LqQo9zM1SkY!2ZW08p%_RS#!eV% zw_#=!ig5|FJ3M*k)2lm-(Rd!bz|Z{V6wC&%E!5>&8~ z!?cAJ=X}O};695^4S*3(KKYo_xE|JXvDL8_cSBW{GiMX7sIxSu@g1(uN@{L3J~W-a-FWFn zbF0GS??vttGJh{J%@;8-r&7P@&qb!uLQ^j!e=so(egc~@q(Vtk1d)LZWMheKocm%_ zqX>u$YYJAaTFaBQ;=^yHIVO{{4m+i3eM|G2)hECm zBjMoxaUG_c-3DtS*t9LuJ%m#X9QR`}lu*X625C6OYU~^89dtLYY-nj|YhE2()7IF~ zxV-6${6r_O#r#w)Q05SZcBLcQKiHY}n;bnj^N8A)cJb*#cwl?_&XtK{NQ0JGl!YAK ztm&?~`$KIX(si7gnloYBlI??0J~eS{9q1ag=5<;>-;mJPYp365Fk$1zE~I}uKbuuv zii<6CMyB?fb6<0!$=c1yp4!KAO&W_zV)~cdro!jY)5b#WC8zYRh$Rnenw=d9ljmtH z+G}p3$e}4UPQ#+fiS_5t+q1fP4vX;AvC1|plqlNN6tOof_O>&e_|fj6DPv`$pJB5y zWzj4>)*p^U=@@SoHPy_WXyt_ZjVYwWA|>}o>=Lg^)BD~*85J`o_YQS;Cs#B%8H!cn z_j!|(TbP!Z(5I&ON+bQW6wE5X`m7rYck`b=;V{0AD5D83e zKv%lQGhdS6+^sjdwY#e~3TKKTkK|eCN$fm;ldLt7geBV|39_s!#??sd>X3;ToF$>) z%f}K)>YVjVi9j!OfgL>4kCn+{OIb%%b4G>+2FP!UdYuz{KKY392S(bxMsKjfCFu(V zr>WCz{q$g4ooHKErjll5=#7Tua>8m*@#YMhO9P(nNK+T3nY{UqSSdKV5oRH{ z+Y`Mvp_O6&qfBZ$5BN_t5L*fdD;zrKcqD0&bEUU;i8t|cQ{>|=_3>4ZX(yR=UcB2< zi46l`?24q4gVAk+Fq^M{($;f1OZmH`cE0#(3`aVn&W6n1&dJg3tizHuY-nj}Uft5Px}|wT^C?Yi^~P0A>zf;8WNgs- z-6OHTD=TpfngN(R7G5f3)Ct8YJU|SN6+gd zSJl;dm4LU3eAer|HPwzZ^;G-;f4v{?bu|I{S%VtPTwfiik@-x-UsqK{KQ~ZYhlIT~ zby9V;-=5-9s`u7qE1*e*IfZs@j|$Ud zPGA)}WF2e_vYF&&avqcOnKYis6PR4Y!mg zrY&dM=}aqT@|PHkGNvwy46a=Ou1gUk2)4^GdO1d~KrFZluWJ$OImIzW2HRew ze+^y_VbR(ncs+{O5YryR;32%M6Wz5Z@p=lcYw)5|-Je5Vz5~p)p1EGc=*xJG;&l+O z`AmKnYx@hZ{Q@LhlGz1`X&TGL%1X{G7iij~;R49kN`?zWmXlLD?97r_etz~`dL!h_ zDic{&RuuvBHJ7W#bcHSO2b6q`sV>(Um&u~!iq#RKcBT-3ZiuSnF{w3aYR_6| z&mfY*TrQ;hJeY(V zivBPaeJd6HQ7Zc5RCHe|8c#(>Qqi|l(fz6DfmHM-spwBr(RWhOpQWPjrJ_GiMc+?F zKS)JC1lR$Z%_igtLg81|DG~_cV$p@G&BAqd4aAA-vK%1Qt;=>GPS>3gvPq&`YP1 zRBPGIUNS(Ptg`h%Sexiu@^ASHx_yt1v5EMe>5R4ObBNDQ$unEJq14hS4JZOh9 zBZ}F>4nrRaI)!2Fps{(BzhpxadjV;jXVN(D5ER4t#`*E);I8Ez(_+CfUw|y% z2Bw^D0}|A2VC;dAJ05gH($CR7LQh25xC2Ur<;GnW1_#{@C9vGM7fdt`x(`YYFE<{5 z_=r>GZ;a^iA$)Yv z$zi9Hd#;uorV}Lj={W=j7aa!m4$>yfcM-%t@gdvS65EF?whwW(>0T-R3-4a(-{g8a z7TbU3Z2vXE_TM<$|46X?PtNwgklg}d=%Dd$WEUe?^nYNqUFHJ)FGm>`@tI5XLXjw3 zByx!|6_s%*a(10$D&uw7L;OJZfOwr`d_x-b@Ym5dO7t>)*mcmjMKXJmajO(6jF$+W zkJAM~Z@HXOBuwURsYvfvd-6KG~yC+T)1A)Ezy} zC|0y5E9LhZh0z|&+Afn%Y`fB<5PSC^V|76HdXesaiS7aU9?5tJk;y03V;+D#ZzsJx zC&2YPclI#%t0H!+CnN#{#|g`A<%^7G5>I=|7wy3g_dI{*eU85&ej$l%yl5tk*Tb-D2Y&*{lK36VccA(MyK6v0IOrIaXuz~RZp zucVMPJHmA7#fa9<+O;qa(;72=Yc+*wuzDQE?@WMLBJPRxh{hi!YV24~mirH6?mni9 zke8jxo$ov%m37F>f{N0erB6ovFbpc$!C#htlHhM8=j+ebBVJBwPJ;c##HOD4*97(| zN^$dJq!OUj9Ql8&$55g1uS6p`^~uDJRb$!sx5QnP3l*N@Ka%PC*RFD3WM(@5T_sy& z*AY@Nih`=zo%LcY3Uf%gyXms&(+e2d)@$X2RPG?DTqpB}uo*YWDJ@-M+)hu7E0UZ1 zs~;wcEW*&bKPt5|%lxlH&GQ(KB>>=F%*TUoCIF(lk`DmSCIAwhu2tS*+#p*3IW;6G zd`M6%|SK0W-$PY(|sK8zrEQu(#=M`h}?tP(+XIh`}G?+Y^pNp(6) z1xL0pOHdG6CfGG$wt#kWj*!KKazVr)e69eRP$Ae{LZzVQ3toZc3pTQkr=#82%biD0 z7xv1B;7p+VIPqb;Z;~F9jfds<&V$Ay@@RQz4@Mr7&BJ^7;fGHkwAF+r4(c5#_zjBq zDS4E;+~-O1<2Eee8JW&+jMz#e_R@$0Em6ctw=D8XbfHCxWYf)!C^=-OpOMK<(>*NG zy1f7} z<#x55<=-I*?l}?)YQG$+v5xc48Nqw7MkKTYvir-F{4-3BhjR3sT_gN%CBG}X&!psE z$f4ReefYv;x(91{@`ti}fkdCq&eDF1!Z_RZ3EsQyf0m8k%JgaOQ972M2FE-2*}Uy? zEEcgDpUCY>T%WupVmJPb(GiL|jK9k5_Jj=E9lK2#{*4Rm?{d2%nPj(;{=o(KPb-NZ zsA@M;{)Y?x-&D#>G*zEc85H?1@pO1^a_a<+i;tQ|JMK`hdf4qo@G`6B{yhlB#fmla zvZgpA<`X}q`4S~m$5VH4=q@DIt_158%KHfBy;Mog;jFy;DVL77zDx<#^VD4&x+_@E zi`GRUE@h4v7l}cznPu<0#R+000k@GR{)tJ|&+tTv#Ctl>WN@xL3-Nm81 zf(v+&GG_a_VxAOfp46WI2kye|*o~v^pz|AeAIiE9?^|4SUijAR2k^eh{h&h5ixcC) zi9lmk#A)1YQTbomz63t5qJDhlUGv^v*=+8lNz*31w@r38*(5!a9@`|n(}SyY}b(=RrYsFkK_ejjJTgkjxjp^lte@DFq9vjU& zIZtY)_Z*zqcc}oM3CkHwPxEedDCWVXtv$oMM;*4Fz2?1YRE=fCy!bhrV^%rlZwSl| zu1P%RikAUaz#hv40+AWZ#E_ipk00mX*dJ7JgneK2_Cv1Ty|@L0nbYnAB0HkQd=`D)EA>%fR*xW6hL zT#g$o1oMcuOx$_-I9OIEox3Mn?8|a^NG`qv_T+K&`D3Iql%XkLb|%zrVBG{8~p zavOLh2lg(+Sq5RKvzdplrtvk{F6Na2GBX|lGJyGf)(%+9103d6c0eNp_^+Txv6NS1 zc5=Mwd>@|9KCfZhwPRT3SBfJJN$mW`pWiw~OY(7hmPMFK^gt?f9 zHQoz8^E%ALeV9v>eFYnCgDn7t^^R>sPx9}i;6K;!uINvH>FGIu*c)v}&H)2=9>(|8V=P=q0@3)KhtKmJmk@x;aI=@}T zVU866h&$}8GR!;q_VRq+dSpisT_^!j*aKS&P3%WiSoneH+>3x2R@KyaNjU{X2-BmA zjU2WR{*;`jVUKa2z-9QS!$9zw_w$DG4I%deiZ}4Naj;$UUJ1D2Bm+%c0+Y^sz|JKL zbI9sNc}xuQ`ZnUW0b6nt#zr>L{d=;_A81i8yk_IE8Ryu;e0WC#eg^_I2P7Qkd~f>* zkKwQwgbG`KG7&HoFQ}=R-O%xxu9`m=)$rOpH&Jgiljje+1TQ^&J`RE>G+xo{qqeGW zo`8!i{9GdDQzH7K*~s29B=F&c#5NvIwDA^f<7cc`(ZZ2pf=%*ldXr!^pG%b7e+?$c zI%1c8c)||31&HY~D9ZEcxxXM@<@jbKa^~+7g;DWX_{X%uAgwfC5Qn{R5?e9ViN%rpPNn=R5n=9zD6 zULQZHDEy?N@{>xju6l0(T<=;9k?*}2d*y$klCTQ&f_$V46=flvC=Wvzwm=ClF;aOijVb<5AW&OqU ztiP0!wUnCm?9>EtMp89#fc5Ya!oE*F(vIDSxmDwYy1sm{d zcHTIsd6V%M*qHEl&I8 zboiUhrou=cfqLD~IOUbU>iWLxN3Iz&Z*f23{+WBm%o{!5_x#8+V`l!DBs-IwMVN=2 zO*}d|hrl^|C&}@UD9Oqua|lqDStN5gX(bXI?RF7OCm$lR?sByeBb&sC%J8VSoV1g? z0O=sP*>LE~XK>PUE+d^pVI+iPP&PnP0l6m4B}FBS=j|UoF8-h02h%T zGuUlXbZ@5;dLNU~{kVeeHuV?a-bl5_nfVI_dr!Xm#S0WT{X7n<9V`ZXTgc2OSafTQ z4UfQt}D-XJP@IfhYA@#f+XZti--W-Y@Km~133G4ubJfRoI>uyS%tEINw!3Cb58Wuy!X zV7|r#9rQOv&ZC@=Ddu0Tuy_v^%ltbZe?T|OiRVh7Nu&5Km1g6$m&vTvR5IUWi8cHm z%o=`*HQL^0*1D(Sy0@6x>mHVYng0^`v1A!^^WRojd=J*&{Ev;?!HpucV+O`SIH|OV zHB^r=#N{;qC(=3ncT*dg+dR&vNNLtAq*b~FkYmSt%!4>99M)xw2hWBqsI$ylVIjoZ zt552Q+a$4xahaE43Rh{?7H$~VXtsj-79r#Bb#A2I%#6J_*LsOdC;Nz!O+HLAJfx2}my>?NmXiTuEQ7f#FDJW*q?7%`olVXs z>N0WxPV$9#iL;2%W#mHQ$tD?+Q&v7D;T^AzHz@<{DzX5>kHJqLrQfCGHXRQK=zd&6 z_iifRuA8@8mI#pZ`3`-Uw9D&43ph_vkTA z2x{M}!<5&KAfBUoOuZUX;_X3M&ZD>&(??3P+7a`ERQtAWep|=eo{@v?4(|%w4m)B- z$sv?D&0!Dd=64Yl!%{Cv1RVZHFL z3s36!bwT6yC4QyjCk4&>O|0A9R2$aK5v-d&gz~H{mOQH^r(vF zAh34B=!}@Z);ZC{Q?h3M78=$%e?Je8jr=(LdmV38MsyTXy;TUQnlJP0hB3R6wCw(b z$RWGK{MzNuI-aCo=1G5TCH)&BCL|NN_wU2+AaC-)gCy8R-sBC1Zl3g(ZoY-ha?E_& zZWX*n_?O)(*dOm;s~q#<4(dPHD95~K^N}PE!u~}c;$Pg3>*CAXpdl^^D{yT-Xhg$9 zk&lpJ_~FIYG4m2*1geh0n}>`cydO{?g?)ht0XaX1A$5g;SBO3hR;gcN*{?Eq*?A{l zWnkISZIjTA$>`Q8=;o=PH_Xo)qLZ%y{2v{Tf0TFfVe5r=@|TQcCtqubPUbd%c4{{m z<_$bO^RB`Q++;vk-eh2FUqpwwYaTK9tw*vyZ#H;;Vx?}ud{A`v1~>;orC5wXK+gS8 zsjnNnN3u{LEdwfbHB<_`tf!j@O8X<RDvlsdM$(xR*?fdr@2e4pj4JK`ovbs$z1G#c>Qhp{Do$ zADP(Fspot!xcBt#@9&I^sl~Pr2KPW)ECp%H2Zofh>LE&GuHN{;poM1T5k_}E_d7c_ zeK3eS`r0nwF?CbGH*xUH$y2&g$H+;!&9MB*i>MGrC zRwYzd6#$4pl_NPSlu)oXtlJ%`gsN*RGslfbC0JV%cBZsI?!=`~0+rR(N-ovCxicjy zyBJkaz?eFjl*yz#CKaGin^eN2QYM!fWz@kb5tRv*s5YqLS%XlZfigr$E)4Yy!d@$b z3r*-gDJv&Cm%I7gE#z(ycZ<0@ox3x*TMp<|qB8}BjfvWTmVPy~qAe*aQ8NG`1 z!DH1xA!H3Rrw-&#VGE zOiQz7Fb3*0U29%$R%S631e)WGTSsmCdSt8 zy}Nrl2YUC~5;G-fl^$oqA=UE9+>^CWMGBz*q<~}Iv&OtPL1UeCYHmFBshKFu&hZV# zCuN|vvQ`Pyg@cyB1hQnpJglxBYZk^5Qc(g`p%CLtnvPsoF5}YrF3y3eG1*{>6P1Kg zmC2b*&1Z5EQ>Ph4R3QX*S29i(I9|ZBnlfSXxLc4iZHlSkFfj;+OL)V-c->x1}3Z|LU6rz_3P$aiv>pR`(9rKoIf z#j6d!8-+Dx*mjva5TKE(+EY|7q>8~5)6EW)T{)-QCU&V+hgZfllYj?c25i%<4^NY;?r-55W9b-Fv~_%vCLG(i3~Rg5i{u z?p51cwr*96Z~HzJk8nar!>(104I9_4aUfSPs@mP%sjflOMrtP( z+R2}HZQTZG9Xw>~0Hk!RIkRb-2sJt{>>l8ON@LUNHA+`^N2k)Xdi@%uyQ8Pm-Lw$^ z?ZUZmsw4`=qc*o}THCT_>sB7MxvzIO%!GaiMm068Z#sL8gU_zEp6-uyvZjqYAZ#`3 z-V3|3?hdwoQ^V?}jcZv?ZyQ?waBpr|lT7H|*Vma$>w!1~hq|oZw2?<*s?NUEu;^$l zYc_1!u}16b+|zqLzHNp^g|~gsk`D2hh6q`+x5H%xLIbpHbBf@ts90Iq+PLWq zrN6890`In#hK*Yzn_4zl4V*E6vJR;CTC{S8=#WI)c=qqJMOJu+Z*N&|rCjaU-`67& zb*Q`rR9=4@{KAgM(!SXAL4Uja4$&=Zq((1(jzRkKL)FJzoQ+=W)H69 z#S_eh$B`8VCgg)kQN&Sr8ha@)&733LgQVG}iz$>m%L^js#-XR=TNUCHDildG5JOQttV>o%<4$lXoc z-OSxB+->3RR_<=&?so3(;O-gRJ(IgLU#mAkvR`yuYOaW}@@cJ6j? zx0AbZ?(XJp7k9h4doFi-xVx8@mK&&sU{)KfGR34=ion*BQc@5pD5-{Z&K+@=6vIN7 z9my_PfZ7ToN{JJeBS*whl1HfuXY&#_>=|<+IVB4zWtox8l3A4Md6B%50HsDoB%@>o zr4A!vl;lwAEQ%DB)KTh!-YlsA^stbYz(VSAMw}%DlxFA=y#$W#-mFMg$vjFkwTM=d zL8;Fd@s-S>G|Lh>3R zxkqV<`(>%s_b zxz*>N)8!kbbA6A=ty%tgU0I`ae%1?eYqozuSN16NXa7TP&G9en${D4Laz3TB=K3qT zaz|-p?#)VTol^ zydtGGj?NBl|0PkL(mB$cMXAS=;t6ruu|?x!6Hg~y1y`N=Dv0^)Ol?JL4Xh5h(^~}A zyBb`|bi49OC{PtpLgDI~C)}S!UAmzX1qBG|B^`#jAymvnsD|eg2MU_VP84r}IYnKlOkCA8eoQG4BrhvT z@|Ltp+ew?mwb3ZD5`Kf3%?PBE=21BHgX54km>cj^G8C5wm1E|{k;BLVX>Q_S!)>y; zStu5hl^jTYwn%-pxzkF66IbSZ`ONGVk==lmo@bty!1|ooGkloq2H6{B{w%Y1=!if2 zNHe3d`QhRD$NV{Qd8C2ph)cnPkq2;{3xt5#cf1MR7|fg>b*EkNx*$vth1;~`4R3G9 ze%J$6G;QDyC<|*-hLxo8ecb8_d`nXB!4M4N-H?b`oDx$paqwa;WQ(REQ_(f!@9Y9D_CUeNDJ66)+JIU3+Rs`I&~_(w<^%Q26%1`$z|k zw|^g|t3I`KaH8RzXQ@|6Iq|OU-P6{+*VEq#C)MtO1L8G!>dj!CCHfBlG24^bFfN0w zX&F?XYI8x4_jgvEVx{+D!I;(ar=Q?BBPz@Gu;w#4g@qYUKKbGRVw(bghQbkX0@&Y=dfyFH%P2HI9-)sI9$c7#!zai z>OxAWuCh)E)`aS07*$Gj7>;IqSSr=QK%FKU9Zp`MN=LHl&eW>&=HhBL_?b5+aXwun zfOtGAf#8=D3LO4wST4R_Xp{G^p<6jP>_GIcgnZCPe@ z5mPIfTFBHYriPhX%d{oN5-DTMHMR^ZodQdT>?T}SCf>=ZUV>`SvxP*fFN;X|u$UA; z5~XOckdSHoj@vgwnps{pi@S5UJCC~yxVwEFby=Dz*_Hi8E6TFIPfBzIva>VC07G+P}z-_;)(|^%hikq;-Z=tugsYT zFVywSl|-k8ZzW;Wk<~z))Cm>v&}>+SHJ96y;mwrz?wE3|^ocw4NHhoU(6gf5u& zEmfl9Qt!`EY0}#?KV|f%!JNi^mNdWrB`~cFI5l7hqjs3Y-U@XY2%xO7u;syU%7~s^ zHIKDY&OA{QR3x%WogEg5w)75V1587Ie{Xwt+dyZBwMZ>I8OCwYCt2;X(^9YP>5aAZ z^n0xjMu{fLOoPJP_!Ac(ML|U({p=G$r@ft&7B;_sS~#xDfg1AL`~d272v&z{lwdF% zbf>}1nxOL+k81~q$OCm?)J!Qs#ki2%iMp&j;7AULNfuUd)S6iHQL3^nvEYnf`Q5@= zr`6*2VyUJWk(1kd`jhHiv<{w(Tb!kP7Ei6(6IJr0c4H^82b*jiuF$Ar%B2v2N_ACT zl~Pqz8-isqT%ERFk2OSBa$?+=zp@J`$h?!oRHUqZJ>7d^y-ur@F{EmewBtIA@8fpy zo|!vI+Hrg4`I96_-6Zc4n}x~hmfQksyZ8{BtWb%queOVC8zzHKYHuhd*|!yZ`<1u>%9fMG?ZcQyeu$R((EZEtDXc9sC=+s(2mj3s_Hq;Y2?IYrV9cREux ziOG)~+V+k3y=n5n*N=VEK9Hi4(Au)jo-`@nCA-_f>l3|DUYRAnVWqVLNs`ScnZiCbz*9bnZzGlF5i(N>LU~+COPCV>0kD^NnkjTQC)xZ6$Cdr_+L| zP*r=Z1%h?3z9A7*>S}^P``A}oQxk@`>dJspi|4!A%IYemHdIrKc9lalN)2p=?4zC< zsH&@jpa9xd4hKSY@K_r%67xq51Zry0EOQ_bRO$kukWw42t<4zI&1k&2y2_P0U?3#AyN!NIS8RpF}O^od#| zg=#FAB)%f$8O>PNpxQ1};RSp6n(9eN72kIFQU;mT^r0yvs~GdH?!tq%e<~^MOE_`+ zHuWUXfD5MroY*i_Oa(e+x3Fj`@X4*hlnRsBC`<`Du}xSo6=-YGpAxJ!BOHD95bl^e z)!HtYT0J=hoj;{=a|*wFO2xL;lJSF74Tge&fEujk2Hb-+RdwKoLP2or_?P$qOf;^w zE*Pv1hVTP=s2YMpp(@mjR~c6Edpv}MfT93QRV5$@)FCqbPysNN0YFxX*4;z3;jj{} zfw8C9R8`A<^Kpq4^@hb}7)SB5v!hYy*)?EC_%Qh7iBq59N)J=^u&ljI>1E13mi1w#^f9HMWeqT8KU2V)@Q!b+{`wH+s4ZqL8^Jl^T9Q>|<-xuMB>hQiK)Zxir zfZuiSd?RI9N5H=Yez(EzZuor*e&2=PgYaWqP2IE_Htm<-Jq5qtQX@lQ%AcrFrWpCE zF;_J{q8dxpAR#KjPauPgGCgZBljsG6kV1mtgv=%oT6ZuLAeId>4olQE@RZp|$ed0p2~UWK7o zV?f>Y^xzjLZCvpcI*5MV4Z?4`$$GyTeNn8RQzFXZ{S_UoA^OvZKp&=qLzK)Jfk^fY zICGvw=Q(taVZvYYe18M^V)34*$@0B`rFape*Zt1UWm%Clt)zH5cT2fDgS#`iyPUf# zxLeQNuTt*aD!i`=?{?vRU3hm0?@r+z72aLKyGMBU3hx`j`=;>j6W;y8`?m1DBfJNM z_dVf#Uw97*?+3zrSa?4a-Xp?$RCqrU-cN-0nDBloyk7|Kap657yx$A&55oJS@Lm$$ z%fkCV;k_cfKMU_K!h2PCuL{w}=Ng*PfZQ+RI(?@i(TLwIjd)uS6aQHXP< zkwG-s)j)KrWYiO#P}PmR$eMSikxv{Y+t5%mi>)M?RBvBNJk&T7jW#<9RuUI=&aNkO z91iNrTS?s1y}W@GQ%|^_)DW7{ffl2^v+79`p_xk>ND=jw*OLu|W_6;;=V zuOt~XcdkH_7jGbiG=FykDWC=OL|9=%1DQsP)}n#wX=l_EKb2{5*Gl4}B{?gJlTL4G zAk%4SSv?Nx8Qm+1m(H9ol9p{k>(S*+x=}=C$O}Z;S$Xw@5js1ETalhKW2R9|_m+8~ zYIEsasM;br52`ks&hO!ku>fi|hx(y1e!8%C6`4gBL6PUt3MkM*T6tarsic8(>xq}p zAe3qW4fU=h<+N&#C_*(9Xg&=?K`LksQD}s!3Z=xwzZ6UOZCG;i@5CxGNGX{~Xh5B@ z8USmZs|lrb-ql2+i#^CLv!rP?k?GPP|A6dCcrzBa)dqXo9VGJXS%*v<~k;qU) zrj6ETVT@ji(V1kaxx$LpsNm?3m3a^ydAibUl})* z_$Y0PBCUg7A=8>EWLkYF)5_&iGs!j7JdC;-vbc(kEP7~0g zWExR3Nik8pqy#_FOh<78U6xgC6ExGesOZ;kK?~H-`>A<9#o7+VORZWxXMTqcALbf| z9zflQ&0dOu4+^m1wo>yU8l5rRJOlgNNOqJ%l2mOv{ z273{~exCw1KR!PRmWhR}0I*jP?5`6Q)@c=XLBEje??+)j#GV1k(Acy29=BPI(sHt@ zYOhP!v|L+a1-U{VrDsrd&y)^>dzSoV+5C)*RYIj0=9ThV^D4P@?(D9)=GAg*d1+U< z`2}v1*nf6pAxs2r`sNydIxI&QalWlZba2rz^UHFyqPc<$Rti9BvDkH_5|76B!yMLbW{c5O=FA+eb$L4lQ8D zD*^bca%(tR(_BNk!se|qTAqy8nzzZ(x_DiDadb(1No1)s&-|JlbGwLH7F`}+&SSoA z$J`-DSHxGu>!S_v1|D;#9dlHUu8gmYuZpgYujVm#*)ey^(KYck@kk=(ULG?NQzC2O z?Hg!tIU6_DKSB!hZEkQ`e-=$fL!Tvk61w$#-&&NKJV3rDo8Obm$#WQZ@R+v<=FrG+ z38wmi+&XJ0+7xfPtZSC}u*}Wid`}L_Qs(n8;bmPiAGP}ECjvjBL~V}Pov5+sXL7VT zx(?Oo#Md{kqmgDh&-?{6Unw-*pqrnNTj$T|nr}WSx6Yf>HP8H|+&X(s*KG4C ztV)gy18Y0fhe$e3k3pd=`f2C6v4>n}6kvdcJQusu;1F{(Rp- z)Fonfgqhmmo1y97uw&j#?Qo3whaK})YKLRY+jh)9Q#%}E{$y@8e1l1LQsh ztyXiIrEr_oYt09g6jG9fp$|gn_aUEXQ*#r6ydL5yhT8JXA1HzhJq)?dhFpILxz2`M zAF*=%QL^OQ?UMgE8CGwH{UjN-!w!24OI#qq0$2hCejFR;NhJy+Fn$I%7=H#g`uQ2Y$bto(CI^vuYa1dUmvF=@sMNzbO;yPB0a*bRG8XKt*O~Lwue24~5tFEUsGh zZ0?@ZyiUeE&9}H=@p96((|p^0Twwl_Kl;B++oI;bpvCyc1e@v|=%D{9X@eZe-f^C- zIjD+h63+o@eo#%6kfxOIkSaRxGIe~1U9PT`0&CXi7mUz9)7N1LORa>~p<;)1WSU}a zP_E?s#n4Jus-yHeO0QDQt5m4v=Tyrm<6c(gaE!&XfZ_mRXKW^i*NgRf!+C73}gZaC}= zZWkFGRn0rp*4eXR@E*mC?h+ZDm6p-n>M-w{d$_;AycetSA?THFByzbAbD56wtr2p0 zz|Q3X)qF@5bL3$)F@8i5A5pET|08w$Z1^$aD@__LoPk@oOx(92qxOp`?$~~ZFf)^T zyD|;3{|rv|Yq|038geac#54rGL3?_r>s<3DZAkPrS_z+1PG(1zs`JbvR%m@%=*?E> zjV6T+uNXDK$*-Zv}jMfrxDd0LRkwTc!(Euh>{`A9MM{P zhPrypXE5PxOo%mp5flDii=G=lH(r3(DR#uG81YvTkp~fT?TEKA;$I@79U|u05f?Lv zxP1d|M_h>!SBZ#jh*)4pT#FIci-<0W@MF1)aUd~4QEzAF9Xxs{(gFQ;CxfCd z#LdQ~NMr8hdV&21vhR=2I+% zKtpNGr`ZUHiou{CN<1$xhXLUTNAnCDH)gpWn%|1H80I^#7qBrF;r1C1n}5Wne3@66 z*Y{7NzHzAUD^TA#P~X2`f(l$9KLH8;jtNEu6t22&@W5#?p!wInoQIn7Ju4FxwX!DKN1pSYq4|UTG;GcITO|*Yl1|Am&q33 zs|nR=Tv|fS&EVpDjEnCXOz|=~)9_Lz`($w)Ea~EsT5?EEx68xbELdv{m9vi02$k^O z3MIYqE(*=+;ssEew6(Z}Qng$dg5}~ap&TA(KRwh$%{g2)!IB%&%$%qi)#6$uN?mh@ z%MHm8Bls?tN)zZVNXqB)?>zQ+%{)Cd0%Nd3yKhJn;U5!Uak9w8cFfBC`1z@yf57BM zrTizwIp%%Z$$&G)d55&8lGf!Z|13K?Sn(}Z^9a5#uMH?&+gUUMQVv&5L} zF+5bU`I5!A2}mn8!BhYZ5Zvk?tO#NNJQWuN@OGT~z)P>_&Iv1Olf;DiOeFwsnd8ds8=ra%ZLAC1w9&_DqhZlT znOVleZ{R#K$_RYs&xOxU|1#gvpuDCQhN zG3UVJJWes^3yP^~J_xFTjZa-v;&wA6nks{-nfXyBHUgZWg2QR4nxLisuxKfcPCia6 zu!B%tK-)ln#rf@ReH|4I9UaK*V^4(QG61#)bqeqz4!qa~UQ@BXAGLGA;OnY@PONC_ z4dNW@K{L z$K7o1=5RNcyZPLmhMWd4kTqH_<^=apYY|XknZL*i_Y}rGl~ZjUCxE7qRDSev(q&^bew>=z-R9FNsbD@zFRLegD!Q^qM2a-%vE+v?^zFE~aL2_6LoyKhoPLOnk3At&ZTsGIBa7VETxH^lv>)G%FMB zpRC=6)5JMu7}&s=$!YZotYl+`*csgeU3SQt(=4@EdK~-OkRrkktN(NnikaU0fnedZ z@^lL%?ABZ6>sOv8vZlRUK4aBsqS+2Ol>OkG?tHKa>gv-(BXm}9mkAQp?@ZFD{?i)2 zTt{FJH**dfpfN+af6>WNj}0h3DY$Putv~6OaMK5Ks7}|yS6f#Ta3s4%UkURU`Teza zp*bxWstyDax-!&Yb!D*DktA)%q#g>EoSYJ?fy!{8Hgg=+Q3IjMV91%WH$VaDkS0d1 z8VtbB6*8y_29$7ZILxe}h^(~XaOSwROsNZp1D^Ehh)nL`y1Ww*Q8f?@R)@1EDm|1r z5Dps&nxh7)tHL!#0=o(u>Y6~w$%hLxSFkdeJ<+PJ)P(|-B`2qrXev7xG!j%n4b;`u zRF2a&sZ<3*K`oc&x^pvg^Ykhix4Gq(@V4YZyVO*uB*|h*KBIFPozJMB(F(&unOcpu zrqvZpZD8surmkV?TGWE28cf~5)J;s?!qlxy-OkiAn0gjd&tYnmsk@lk#*}uW9R;>i z#k>{HIqbSzb~=$;6D?&+lA>l`PMuEOppu?Dm;(Vy(O^L#98aeW77(cz)iU8JcKTp} zq$^4(#GyZPuyBS<6h$e!oVr|vGYa5Qp~@`52wFI!yg;T9GTVxk4S1Pjzc}D!p8ev4 zmj(8V3NH)o7ZdwvaG!U7Rj0Tb= zQOVnY+O6eGlulQC$UdoZnR6{0@2*%*1M&>%xyWQ`WTSYxBd>w@B0Bo*;29hCB zcOijI0@=Mh)k(((c7bG34^ z1dq9RaH`}_no!<~Qz>P|_@EQ0Z_p$A_woz&#Ma+BwVdqs^Q22h%Lk~x)v6?}9%?XL z9SEZeK@@NZhfq~uI1maKoUmPd;~T-cPY6ujmSc`-6N@Pd8MnM-_w7pUv2miCCl`ZG zNNg6S;2R^NCd2?!GfW*XO{ZL~iW7tj5k7ZcYOFgAb`rt96zSfi7+<>N=ay41ZMqQ5 zxCZAZ{cRrz+A-~(5W4+f3Y{k27px7|1i%f~)T+Un+CXjI2{4^hu)XwTI+?MQr=xPN zdn$^bZJ~TyBip#WgCRCw8`}0|q|=)Is!8!q5a!yIvYD%#6vIhwo2-kWQ^V2UIWYbv zX`&+n-Anh-Zmp+t@9u#v>zad}dvbjVC*8}Z+>to@Q^8gi=M)W*BIof-BdiQco_j&1eO-VHuvE=)h`zX5DmfN3PUyISd zKh`hwV~slu&~hiv@O_DnYXHUe@_ROR>s|QX}i@j zrFJn(McGT|c;;|zhN8E*Dnn0t5tuc4ox75~IsTZ@JZT@L41klLCv8nMf(+T3K~A90 zO5=L4I}>Ug$19t`3sr}8bJf$f02M&$zuW#gSH7LwD<~c4<LNqNDTVRh{Tmz2bePN;$9# zjodziYu%DsNqD)J_F z(7dU@@?|csfB(LHy?p~4d-q1{gBYyd{gYe}O-|$Njc#(d(Dve_5rGaExMT86x!g zsalVfU{zI>5~!=HQL3tH!b(**7#ef$IPM-bP*+`7r-W+if=Z|s($reFi}r0|ZCz#U z1Q)_;AW$6)E1_!C;t{S3)J%HS8b;mxf$DHgwQqb))L>PxGMIX+Sz8qf0eBGHV6d*T zDslN*Sr@27H3oGxDYw7Ds&G}xePpn*sN0j>+B zx~499n;WPK)TCTNqoRZ0#FwV1GNmRsk@Xs=SY1sZU2Sth{iQE;U%yD`bP7}lP>n)u zWndcTVbF73YHmJN3v!F}>A5xe1!|qXB+r#!S6ElrQkbuA&E1iEw%(y1&_9~{X{sNl zx%X1lkPH{9bo6C8Bt;dExu|ye3d)%wROE+{4JJ8|9|E-_4j+Ui4`-0+k9d( zm^72IGN#XA(p)CZW72#kEnt$LNeh`&!K47H)pXP{_hRN+#*`JzRnJ@v%(aS1YnZf_ zNt=o&%ihkUGcwL(Ip?t4c2s{L#hG+2lg?vO50myV<--|$8U0KeVAAaJx(Wa^mh(CApx##liZ4)BxS17hW6GBS z7L+v(M&yF|Wo2g#HZ`wDgLceG&E!goTI@l)d2#2qugPXTOT=*;aKnub*fKLjJP{{QbN@!X5RtP}IJLurH z+o(*!;qYA)Z@b}bvjT5r;cr@c6(Hnpx>+uR!0#kLsX*Y77^cf;!slCLfB z`bhG15xhQ{e1&3!f5OWFW&9-+uYf#F2c6hh3q4Xsrq{>aEbeA=H;20+?pATPn!7`k zdn3YoMtIK(?>YKwO381;%WsAEyzpKS-iyNfz3~1hyqARcvhe;SyjO(x7va4oyuS+X zZ^C(>~Ea zW=gK&LE1n{Bv;AIdQwK{^m5diP8L-|1nDwSNbE&+dr zX3LxfZ0;etnn?1z`3s6rxq*L98b_F- zsI_m%<{%gUQOKZ%YVpz4q(RNRluIpr5~Y@?d71X~aF=9Wu01`{C7V~EaFCRgdXiD< zDF&z>w@^Kto86Wc6^31dO^MC@+}?4C62Z`#=Z zVPk(Qf%I*S>tz6>K|uN+3+aD2(swoUJ;28?7B-`zgXhfuB~l*8lniO~psh29 zx@MX;(P(+3oXj(i;3qJb>QuEiDS$o$plC=M%?yKYjM66Z3>~G-6y0?ay6fc^z}=v{ z2<}Gp57c~t4xjJS2^o&hvIY3jjPHwdga?nL2CL>DC^yIJ-OnveZ`NJ{G+Wr8sQD5d zj%o4PhtQlchta+D9A=yTXKMbLj>L3~HOyBjT2UFC8=W`5-60<1^I{J3H98byF{44A zr#k>eOn(G$#Ppb&^T6@rkZ(+b04=7)l$=W-;O|&u^=f^Bkz6jMsGJZSwKp8VZMxYcZCeoiVKT-2_cS4(J=xPtm}(4M&zT{L7~BSA)OMjQlze_-2UYEwvuVdz@1f329#^ipk`Gzzy47BS_ zj%ozS1=oP^PiUrL-YV~4k-V~`X)CZGhj3(GCP(XqgnxWxbX9y+WVJNUyqpI{)<89` zl%tV&B)T@fHrg0(j5I;)XHgkJrlx87udrzzlTcQ>U4;SuDXKgsp|G|hRK*mbs+iKj z<~;^_>K+G|;O?ZuD9b&9%4K589%YnXL>`mSraZb$61taD`7z0STte~e_&Tm#W<5o; z<}V@4{FM|fLVYmJMHDkJM|C zb;65o{wE3hF7Ii~9<_w%mI@k%V9mPRHru=u>JV)%C(X?it7#sB_j)f@6_8&AFFgi$ zqIu!PVSY~L$TtA;t9f)}Bee1t@KI|dj!i^YNh47Q35gH~DSe3|HBF}fZe7KTKhYYXfYD+F6*UF=GExi_~vkX(@8j8J->P-}}M&8W9 z+Q`i^QlndBq(-;O<}LD2d>f3#TfyIc=oqR5DUFv7$7df#jW4Je1YfrksP-Lp)W{IL z-O06hz;RDo2H5ZA*f*1V5idpeS}J`@HowKw48>;;8pq80GOxJfwJ06!|h` zIL6{T??**2=H(FE2-(LJSZx((;+&7cV*6>O6slPS$53rO?o_x!jcw!$3a=M>njB_$dig4T-4gF9fY{4!uUj5`VQS|!>VZ*4TMhmiO#F&?KWOw~RHIB&6V-Xd_K zcQ=*L+bpBorrZv0M7>Kfzs@s=DIy2eyhDkpq8aama+-H3(J(XxW)KO(`mCAvD6p47 zg+KQy(GSHx6w^i`Z4yR&6WRp|QLGxO_7L{pgH|aX6s35O*X%)Fvmapg%8$VP7FB-& z-g@n);BI6;Q_P3ctNcS=Wh~GmSfC%-^@Tx&+CQLlP%!^}G!mnOWl)TtLNTD*p>uww zh^br0kXw~5vQHN)E9iHKJ zIL7Pnf@1zUy}-Xo^wDpXXh*!G(R?Ab%)e8jolxdZ6vmp4*+e0mSFCJa5!t-Lvw4MQ z^D58gbp_Riq-OJ1o(&GOzd=14&DT>iF_mZ>GKpg*rFJIoSed*dGI@t*@($1BzdVyc z)qFQSllKyt{EufcsHS9cP>t?}Om<@?Gcc2O$mCP1$mCNh&jh{A61r_ND)@*fpI6P# zs%e>ArP@9GIdx8>`T5j5u2HQXj&u?K59v|JY9?m26SDe>mDN{7R$t*+eT8Rr6VK{a z)jX1()y;{lzN*4tx-~Vcuc|6(TcyS53PmQAff^*>=P?qC_zX#{V_f)aH{xKkXjMATj z*DO5&?mGEN)bfGa1Nh$e2kKh$VYT(V*{S+)q^0FBac3IR9Dm zr|OXZ7ZmoQhk4SULG;g|Iv8mFLbZ3K&zVoC!|}a?Wyj1X;h`61jAH&ujqWp_Qio8@ z)jk;xwQB1*BVFg1!>AQxmJHG*}mcOv`)&)&iz$fD>1S z`>d7Wk64n~cvRoP&wqjFC#jI#niikN9j^1>5Ek=oHF_BxC)o8vEqeLbB&b252;yE- zh0*Qtg1=4c#lyC?zTKS()7vx2y7w)OyCfauqPG4ONg33|>5&yDj9DD#;;H>(d2UV% zmo3$`?EN6=={&!)$2KQ%8W^Au8Ul3oy)Ptf9Ubd=YDW@=HHo15_k&P;2@we9o)|&; zYrzQtjYI)Y%I&%C{R=^l8(+e*StuNGrPf8Ms;LaAyv>zRO(4juQJ@5?YHA>)HULkR zm7a8Ta&=uuK|XaoQ=*bH#k`n@v!~luoTXBulp5o$hfzs(460O8T!T(A4CBEB^X$zz#rMi%ttb0@`q;hvtPIe@8w z+mz7N(b+%Hy_fUfHKe|*bXvXA)Y0FN^1RZEUs~-~S(#={kdwtG?iO5dR_X<0M(Uy!{$YtQj4WDOp<(U z;2e4V<9epN(vbvmBqx(@J@#|vFTHbb$G%?ZM5Ap0sutTn(3#MN;Aro+X`G`Y@kqNl zrw~2Y-JTfGI1D@bxA%4TYwg^VyF22U1rykM&p+}qP( zJ@y+Smkn+E9LZ3q-Uaqh$$;RLZtTazcAN*`QsSJ+Ec#cSQmahd5*caau)I=mO&f`6 zkZnzG3jmqNnmV$qiE9OlNt?!6z4E|VxgzGA6QE<7YTB)iG1>9*{45c;{sDjg3O*nUAf}sXN+{jR%vKnm#)gZ2LI2cr_ z;K1fiTYQz;x)7A7E*K0cRduzsN+?tvR6^l8k=8(kMIoO`bLHF&y(D)=?wmY7H*~a6U6Sk9m+Gr>*W_N5 z`x&ZgR6Eum zzCw*70C6*fxo;8NdeZ&El9BWS@E?O8a^?MkGS`#Tc#KYyt90{6_-hVPf;W?{gaDn7% z^zHu?b-CgjXqN91dhkLBab80QFQtbl^*Fyo2ZO}(WlE^icLN1X1y0{>5EdZhYj`x5 z$+X+4^mTeCy@MX5iO0K=k9Q{@?@2!1n|%Cc^6^{A$NQ3x-%dV$C;9k5^6|ms1KTkeBo_u_Q{*qEspLqWjrTcao zI>{oWP^*^>LdnW4UJs>GMDl4AjmWqhsC!G>NvP7jg{f3+*y46lO|54T#LnHKYg8|4 zQ6y@dx5eY4j{GgzKI&Y$#pk82oGlq{>Rw#01E{BG3(UieC0jBxsJCdVD$`6yz2YR) zC)cYGpG70or%;-mwq)Xw1u2ej2AW)QgqmLk*dYMAm5LIYw^30(^J`R; z&b%FqrpT(SoDFHe$I}*&??Gh?DY`{4FGuM#`C)4QfJWUz5jP$595Ww==VAVgU&*++ z7QDgtO64RAKQcc;qnZBl=1eM^k75phUsgU(A&aMwwP`Tx*eIPxo&wbKDY^@!VQM~u zwqR;e*F7DIs&Vyxv`Aw9n&R_NJiF0+fktzNA~_V2n=gvsk+y8}cXXuDTLqvmLpmj{ zh;)CV_{`J2nv(7{5sc~n3h4;ZWLY%zyHx1HeizCUr2nJl|7bLCD3V79ozI!aX*7R$ zD3UKh3a07`dkib{X~|Z;Uqe65**OZ4U!(L8GHh@S`~mW5$-EN6_$TS2c+pwYEOl!+7#_tmNQDRtplo-)v%*nh; z;@b2}NICH!1IyL?JwCnB{37y$l*UW__5KF)Fb2~dG%`bml9^wUqBGI7Q1eVG6S)j# z38a?_$t)uKh^`n4dr5}M-Oej_3@X|vt*I(kmz zV?mGFttvCofWIRv#tiT@sETZcAWx)Xi(;rhF`A<9`)*hPPzb#&6!h_ z`23tFj~_R`i*04+i}f)duybSP_bv1e?=6V_2cj!g?8^9pxF0%Gvpch0@h-yN)M9E` zJBzXT?YiBY8gjJ6vybAZS?E$V#;{X$odq>D^9krwO@}d{E7*SK!=i$EIf-XuOPW8F zELIvLz7PXZ>0o3LjZ_d`H!Nb0L)6WIkC-9UZ4=b(M|Rs{lQ7<>M;pz@q&bbmQArdJ z2@t)I1c@5LG2kOr#1SIZ#Bh=@VIERLWDlt&nupXO$F+e(W&w?fq~!Gatu!o*B`q0_EP+1Y z>{!oB(WQ~4&<)5%DeJQG2F|&cB_tr8=gP@3oKx`F&cErwj{zYeFH7btR*|4YneIf1 zmSLIB_k9id#aiiKpcuQPSHW$OUz5zgNJH`EfYp3e8jjEJ2Rb1M#*KZPapObE-;m2t z{X4kZwAUr`Z&I{iIHtt2BLy_R0?T0jU5crYv|Te_=V_U@3`dM9MeDJ{0kodR8~6v{ zH*iS5F2&d*{Wwr!TF$f3SFcG)W{oT0{cY?e;!@lSJE}s>-%Cu$PU$^KOfy+{ikN$< z@H7#~gr|!@L%gL;$T)cq+zs?S$vkdN$fXi7FUG+lm1dP8Z;8y?lG`Bpq};j~R*l8T z^#*|mG#lvXr;)P@m!#b*DHaLMKCQIOjmeRf(mdqrg8Aa_#sGhJJR1^yo-^rSz*(#C z+wFGB&7bkFw@@GR8ktWt#wXe;m}YunnrYtoIL-7JD{D7m#{71NJq)5Dmt{WXG;7K+^Li{E&RXTHY51x5i^4h^ zV8G((<_)5F2F|KDl5|I+c)BQ_BW9GfJ7doI?Jm1`x?MayX2hIWJeTeaIt*SsC}|AJ zh&^TADEQrY@$hT@&HTNboSQw*yhXP8>LROQ@?S6Gr|UNH>Dr4sgs=0)#-ek8&vQPf zoBt=iX5TF;D#sV#a53*eWU5#|RzliuU{`X|X0?RF{3e1p#AL$hjc+``QEpVrywA=~ z<=OpQUP~Nn2yDJ0L@Oj~32h`zggHqwQ47gBVic0~Kxka94aDIj8;R~Dn~3ZrZYZ7c zOYH(>^Hujk^1N*RUQVvM7ODPV)?L~B zgUp9Ewn8>C^1dV|R@(#S%W}$UE1CZ%N4MZiY2HGSdrdUI)w+uL7ZISKI$1%|p=Rc* zR_IuA5A`))ldUS7f5%)~c+0oY=;rw5%diQ|*F|F8Hu$$v;?Se^xKScoDH^r%E*@j_ z$NWdK8iUk)i;s;&J>E{K2O8h`7suB~k4ivFrES~w9YpoP(g8g`3s;ge&_>{yL@p#} z5tc>HCi-S_4(>HPvRhVujXnJyH)6K)82pfs??iSxC$iglEY^2;GthC2(n~2p-Z?m^ zq4!BD9hc4HI7yvD2islV{Xjlqu9&j~(2df|{vT~`0v}a%JpjM^mbtTMX0kv6m_S0< zhGa6CY~aF>WDF4jS=?vhOvsQZ5KIC}`)@mcEsB} zGE7~rM!IJt&)AKv1AM1|)tz+jUgNtRsb5Yk*8=s0^ahn}GEn)2?actgg!v2-iA$JV z58f!p8+I7{B6MLl=vT;&=OfUS#JW{wTUFlCUPT7B`!|y9@V%OB$6mMH#b2^(*N zH>uIt&{bKX>a-+VE&^BVgm1{YZw9l2yAK@j9D__=Lu|LIsKVU9Q7npjE|l**{L)uYx(D)L6CwAi_;%qwe(CFe%ogEyow zBj#=uZ*h8XIkOsiWgPAFpHzRaH8^JMl;tILS9retAjErYjyCV z%3fCge_9>Yb#E-6bTz8L7h#eh$R3D+eu zqysgKL6h7+3EJp-Y@LNT(F#iMLPk~*{I>Gzf>V|E;d>KNzgF3YYPuxvIEd$CRiDG{ zXa7_Ol2b*8iT6K0RoSPi-rL+v*r3`kx*BM4OpQ)RSa5m5K36BLfg+fSxAWEL%ru`J z?q~mo+EScMCYOn!%OXjJUQWPfUqk!8g+w}u|2DEcp>D^UwckQrK_T4_@f+ITs|aIl zYJp{mWgWjzSP1#qS}0@s*!h}3z==A$01Q-miO;nhkR$IwjtG(7d4@=D7psV#9X&mH zdH_Fo^J^8jiK`vQcrsTz_-RPxk~vLy#%^5YINM_!w$IRg{y&Iz@`UFuXbHD9wuBe9 zHO_BpUgTQcwX~^=A5+A8*4j-l`+!E8{lDKT;{j*t9OEuDM5J+PKBSABsiIsLJAU*> z>ijfBJwD#oY3YftT-v=tOD^y3?#WyPfCM%<5!VmJ-CPJ-cul;E%SY3Y za4$(%QT*3z@H*lkA{Y_+@YLHf5NR(s2(_yhAmg5a#%=l`kK9=$cLq@yKu@@jOvfkn zO)G%XUYL#4WeUBITPT@B~6%!IlUcy*>+QkNlwX{fIFyJ02tD+PRqY zQ3qw2$R?$;<6LoyA0}}!n>3OpvXnHF2uY4VC`k616&B6tgD`aSu%|+^|M$ChJd)G1 zS|L9Rs%ofl4XJu+s3BCZ)>Z{;)nG$?jU%g8sCB`HDm)Xau18rF7Lj_jK2%esR@K$k zQk}S36$;e5x&9Grfo)ViKQ1Y-78V?3Jz8rl$X6`{g|}Mqqy$Zy(?wiI;W-J>D6ycD z64gspAL=Pl^TrUWj-s~F)Ha6N#!?%XXP_2STM4y|r)n8hCsK7XRi;vPI#nyEEr_Qj zY7JFusoFr*8Pt9xbvRI-fqfRWhp9T-Rwh%mz}6(&#>lo~W$J37@*G<$I38!4E2E?W z^?0hz<6>!NQf&d%Dyh~))kRcYO4UxPE~l<;Tekx9IQa8Skcg*XN~)BM^7vB@QsAkB zuc!Qkbu&qwCz@I)NihjA?QQZIiFiBzcJObKf0yxZ7yq8gzi0993jSTmzpKd1a+^hh zvD~K2QdAfw>QS>g8O^n zBrj3amLY1^ao4&gCYJ@us>*_8)n%cwnzGumy0ZGRhO%(k?6StPrn2U;$cY}@)wamt zm=aaXTUD5%;hwd{rl?z$&+P2PJpp~g1@B*16ltJQ>Pa7m|<@7<4qjnDxk9H0_ zIjWVFwQ3}#?PaIH{AnMH!FNC38DnRp`=>tHyASs~a8ZMs-S~@8smyar#7dI3xXnsg zY~ab>{R3sz{Fh)_)y{*Tj=?+3;APX}HnvR6&jRSzrTfA3_RyrQY?(1Wze5PcT#YHUZ@ep)yOh#hPug?_9%m1aBez z1FNTQ?AwpiTg-5)h22Qfk$jx>v#r^_m_Z3`A|rQ|sdr+=ux%M{y*feRfSUr#YA8Ic+^gz?D=S6_dr?rzBPPL@fipRJoRtv+t*)Kmfr;_ex8)K zuonsLBB}~i)Ymbc`*4NA<-gO z`4$m~mc2^`pa9w5z>Npt&KCA}(hr5H-kz}BJ@Ej!D>4R_TW@gG0VoH)IrIM zNglqUI=~lDE$lqLI~pxc7Vq{g!FPCgWKhf>+ZK}~4|V}RdlCC&4zW)rL!H5GvSQpj z#Sr5o<0ZtsNX`UCw0Mc1 z!$*BpcGMf?Okh3gcZkHU712QZ*v$_mH)re@wXmCnr7T&-`O;&+7o`MZ@B;eH`jHGQ zC2gtl6@={&L13}E+xHS6>_is$!Zk9EU@@?JMGz%23D{EEeHcLXH}5nyQn)p;lSjwy z=Z89x$x;j3WrUj|VF|Ja`N0l~YS_J*r}kltYHD(7WST&D#5fSrB7WnrMDsh6w&?Wa z^t>Vn@u(mPjy#v9?vLAG35}Wcc*ZAb13R{L|6KMoPuxR3JfnDq!^w&kzk@xO<^Fr& zUfIH4Kz?8?$?ZsmztvtYZ}#Da>&w|?^JiJ#vyJ+58t30kPS*4$%gxIugIR_ zVY;!|YkGM=jsac7dW*-|BL7DFz4k{fP_;+?RQnQ4EhuS6NYxT4mqL;nZmlCN9+=s%_vQ3H|6)90DT1zRqU3oDvU3UhNVgLY^sW9A**|r=?AZqPN$eBd zu6Qm7`$=q2x2v9?fqfcdx?S_E0Q<@8bKP$7M8SRv`$D%<+)4AF%D&X?R?ksjpU1w^ z?KaPJu%E{MqucE`ru$E4|JCgdR1G`{d)XWs)!0O^vq{k-qvgr+0Df>2VJ5hVO@wEghbzQe z+0j?IWZ@jXi=fF0dS0e@O&x6DKLh+-@LRFEx39UkJ-(_#l1nCf!6gC9eiVe{PZ;^ro;v1QKOCaw8|CE>Z21>uFw^A_9qW1Zz| zI(n*qwEjZKvY8MatO;Rx+`-FbX-+b3)CAoA=v4q=+(A{QvctqM)S2l7d`ml^ggO8z zv*Is4IJ^;`ppf7xB<FB(c`4tOopYeVVbqR@j|jjD6R!N`V}`Rpj0`r!gB>*%waTQqoG z9x`HedmkX>9~=yRR!D9yRvb$kzdug9dQU`i^5JvIB#Uiec^osDwuyeg-j-?Iwl?en z@and$4LgE!x_g#tZP>!$i+hf3y!dQwM!WR1>FqGy)85(D9$$Xg(lS#j6n#!P9C9a6 zU4&Set3MKxXJ>CX0lB-nufqX3+?8A#UcRa`Zp$E%(=ELn$Sz*D$8lH`1GGd51(W+<3^yZSGlnx z`51XWqNkDFD%PcOBVjak^>lDK>LnxjW>>TkA`sOXD}hab&@I?kqW)AaXZO${pn{Fi z{bpJPQgmi)K=iQ4Kx~8-Z?r3<TswdQ!?5mr({@0rj$ViN<|}hL%T*Q6ak>% z$m+Qdg?Fw+P7lW0wAI!ySsCSO*{_62oLKqCO>oZbBz)5%0L-Ek{40zaRy8ZF#vG*JKHI^*GtkI-=fH|_c&#MW_cA5NoS zB^696O zWw6MAz5p^AR%4E=)~HleRE{*ni&gyMZm=BcD6{%UYoFJ*Fbsuop@y282DP@jzFw`V zuB+EVb@jE?;2Nq4sda(cdNov29n`9WfreVOran-s)>Xl$HW&=yW43y&x*-?>pN0@V zNUH-%wKYJgDg7GU_B(cx~5(WR#n&4sCBh%e8Jja~;Lt*WI-pnuIS0h519f#;Ree1$4XgJ08nvM&5CjsOw-CM& ztgEYmT&P9W09Bz{D63EaQd|vX3>gdM0eE##nnB13WUiqBzd?v06llO44mQ+RJF}~s zR#(l-uco#NUm)UZ$A(ZK%?tWc|ssH^p7 zfHI}B4aM}!E-L3xg`aaPc~r@#N&!_yaq%>TTtdwlE~I80mwI1}68x3%ROZLs@+1`B zuL+U;K`K|H;C{J*YDZIf7L^;RrHRUOsM<>DT>d<7K0f@DPoVVRSAVBadMc%-QF=O+ zSZKoQS>aVS&S~ouG)7DV=r(9&ed=32YJ>G5byB&Ua=o0o(y8Z)X416Di-)=%R ze5v;v@mh~Q0p_#tdk%iT=d$$q%RLR{=kFm@NrSl;ey;!woc|NNP+UGfp85iQ|AJqT zY8OBTu9vBHA^a|aeB1!$wcxf1%p1YnCUYeP&w=qG{9c9M+wl84{Qe8S@8Nf`Vw)(> z#s_+&sHi+u3g4-z$#PMVtu9qM4Q%z?ZANOcQd(40dJKxfpLyg_q_8lO3X}3lEvaLr zNykZ~yl5WEn-7!HqJ^ojR2~JV(zaAgDm_DzN|#CCehvmGJU4|nKTEBZN`DSMzkpu~ z#pbWW&-w5vx_}_Li%4ock%~5O%OxarF<36;mdi=%GO%31Emx7$m0;P(E!UFN)nM7g zE!UCMX0Tk(EjN(V7O>pNEn9_U8@Jp{Qa6ERJGb0IQagyHyomq13pu!$TunBUE#xKw zT;EMnw-U&WT_m-W$bj}s1nwtN%WpAw%i|<m&%vPq_prVIdz3Bmll?8mNCE;G7nL7GuU1u#B-gDWr51EOmL?O-fM#Qnc)2<_<#xSGQkH;@RugI+XNpn!C#r+!zTEM z3I5sye`A8bHNoGR;G-t^mlP36-2|jIt&zRt|Cir_3eBK0KFu^~V;7ca> zvI+jt1pj1$e>TBACYUzCeiIxp!M~W`UK8ABg8NPI6%%~T1YbA7H%#zN6MV}A|7wEo znBco6_%{=L&jkNrg72H)2PXKT34UaPADiGmP4E*F{L};oO^})3XD0Z$34URM|1!ZZ zP4Fud{I?1I#{|DN!Ea3PTNC`w1P_>CO38rdnczATJl_N_Fv0aEc%cbiWP%$^@DdZe zR3U{eHY(Y}?TykTQrtXSDj_A!jna5BetB4$NhVa!l8O}Q5f{#urjoLTM#)7ct_Vw& zr2LeyR8J-~HA-X1=~N2V{CEgeBBI>VBmR7M)5 zi6n4rqcnw7g=b3>NbtC@R7I*+hNYuP=!~#*B&nG`ODeV7Np0h7X*8*;5ggQahoxgk zLqOPOENPUA$;?_|J91T6swPKG4ND$!^x{To966>8wP?($LzNlfhS`#v%&ru;jqS6g za?%u;EtQexkZ_AMHcEx$*a~55IWsKPkU6J^r3TV^>}+W=IWF8Nm6Ewlv!x<({0XQ; zW8Q+W6e9B%&z8oL1!sq)S>%ME2)*!BRMxSm9#v;7?g>k^WXZxtX&N~(8J3PBC;3rh z$I0=q6eOn{9hP#)scm6t205)tgg$*ySej0v(?kx$dc#r$X_Jc2TIjG5$rH)3NrYG< zRxsp~@vfV4)*`!=sQHn+7*U9(M${sSSjOY^IO>cz0MA+w$&bkjvE@YEV6~G7DN+e> z%*P9JPFKVUjxHslKsdKI;sIL@jnE5idCA z+aoqG3g+QOyHQ$110ti{5f``>$`KiCMW^AL^D&l)1uSFpBDpa|A>(o*zL=_zBS@GO z;+?!RP&%NZJ|~Myd5g_Uc_+nWeDveDY!~mzPmL+uZr$Fg3=*5t7UPeC{Pyjgc;`-C z8q>JlxxG^xBrdHhX5n`C_D;(n$+0YtQNO2?4iYczjaj2Myb;xEBc0Ykl4m_9W{+Bv z)=v8%$+!J9=HM2`AStl_BIe{4=O7v7IG@B^+~yi2qn#I#m>cLQNd@V+2T7spQWDDn zCpD>}Q_dhMa$iYe9&pl<8ajCf$(Wo?B<96ur=8wGGS;(&#C(8YNm>xWH%P{Lw~<(G znbes(NRIH`L}Gbmq%&`j6zASdV)CX{yU1pDd*zXG+Ol%J$Ldm~>=U|v zKl_XdeH!>)lzliYBx*zL_W|obs!LM{tz?(uA5UE+Z(P z-5+9KQ~qW__1Ca(b&!1rK%_)MFl8M;M~u=?rIAh+=U;@E1FZx6t`{V~3evORCh};% z4Y((-+SseMG$i{q8)lZsF%RSzIK6JeoX{}era-_Cc)-ch2R6*Kk8JEC9`IvZbbNng zJZ9ZLc>oLEo|_2)u6AO8nbOrzjgBPvJxadX$u>C$Cgu4cxz{<rv8=WHPHC?^q?9)-ZO$>UD;xO2~JDOI?SJ>l$6N6N?)_LMU^DmkizKZ$&n z!~Kzoq=micL}sk`IJpog^>a$cO8rju7iVl#IzEc+#Y+@6)ZCK;2>Sqmy}}9b7s|4# z)q(RPL~!s3L2!=5enZkFd3YV_wz@d{8_?& zPoh)Pk*P$8;(ngQrcLUc#{NK}{)k_~H@&EPW+jB#gW?_fb^iepn?9*?I@?QP6(|y- zvx4m-u}Z(vS;_X3SO5TEo5ZRBsA8{@SP+09dyT}Z0jOrLlUN9V5PO5fY5=HVZ;@Cn z0JZFGu4Dx{{V!JZ_c*ID={;2FlJ=bgOnzjbenL-Ar`GpRtpCn>I;!Z9_mYg%K`2J_-iA9-xvw})=1!YMgqS# z5}1-jbnE29vv|I2Mz&t&k+F+}!V<{$Jjj3z&>yo)fyo1ZWVIDtZ$uml5c>#vA!{3eJQ9yzuc`P5e-hN6Ap>&Qto!qyd0|+p~nJk?M|@q;+r6W?QVrL6*&rfyPe2P znGAUT-n=95LZYI#mIuKHGo?)4!Flxr@d_gN_JilImDsfC(UGI2sqNOzY52N(5`Rbk z8%59LM-|Z{c<>tH(-1$6QNT0a5#D!TnREs1e5G7M1%3k-;?_`3>)tnnYy3-4f8Y)U#R{ABI<{D-d9BH z!&`>zV|3JWtdji`V;;bA6P zG>{A!#r!P~Ivp#S601TV#6&Y$963gY-r)d}1iL|!zs+5zioOGr%`Q~+9_1q4m0hlK z_VhRa6hQ00u279Qu2N$`gB#J2VH`oWQ59So3FdKZQuTblLHEV_QpvWdBbW6}s$SOH zRipR!Vn5sm4fRe{j2L&S>~3{WI$05~z&Eq$WM#aP?L;6D53qX?sESvy`w$4mgY13; zs^it{0R%$v5Zi@7O}vIZh(K+;mhDDhT6`LN2!ZMG>FihdHrIzL>rTMoR^^?_ z$Nq%iyVx%I39bWUR&tjA|7MfatbO?IRgBzEtLc7`anEAL@eb}ewY-HruTC-^N4jxH zQ*lUB_avu*Yo56AIDx&6u5W_t^v$Te#z1}_oj*ipa4k^4H3+W%Mb~dsV+i31qvMmXl2y+oYw%G-a~}odN{w=d&d{%$A^mUWY>aiwxpBkoc{FI93Nve2fZZ zd=&WJ&WT@4q}w%im!{|CJsMOUzy~1BcJiP}C(^ED4`_SJ;|**VMlsfi;wg;c84(54 zc@f1pjG_X3pW{(nMx^I7_PhqoA~U;lAk6@KQP6w|X&zzF>_?h^5j3lkRf1+Q(hT7g ziPOB2Nc%MQiUv&(xqSt=eN{6lSFtw)sX^fjYNg0$6Zmf98UZ&GX`6-JY}sQb z-3<&v3)x}WBgRsGo&Pq=9=`&O>@G{Jp}ez!-Hkc|%Z!-zU`+iYrcg2@Vw#9CO#gxG6HtlX%He?wyLS&$G=nS@Qg2=m6E^1g+A2vpJ#@FNU3 z+2Gv06dOm-Hd2T6Q_zGYJag3JMhcGF7!RAWZ~tyOP7o2*c(X>9ow$k{rawcTdLcP%Zb zA_UiPgJdU>ZiB_|y@cFh~O{ga7 ze(OLw4;8EIvi1)oTXEg>pf#bk06vOr+ABmhv4^eEBEQmFgc)0@K-U@uPF@h4?B^`J zz#}Cua8BeGt?XqZ?)@wck@Uw~*?={A+(6_wSW*1N3TY204pnUL7vhefB7F#yA0p%R$S`(u2~^It3Kv|`^_ z`~ANb!Elvow5dE0D!@vqkh zF1lbn=Gnc_S=ca_$jvs)C3(Az*9$bD_U-`VcSO4dj7N#(RvYlN!-j0!ZbO+Q>2>Wk z&qmA?h!544-D&HG`f`^o-7l)iJ&+{+cnAXSw4uu`TXg2pZ2@P@h()UrYKv{9I29Kk72+MZCU(jatc0hLE zqrvBFu~0&T-sSf;s8T`f60kXa0hz+SwCyR$vv3Z-vbC`P*rE$2MHXNku0}jB;9X(| zyvyv-1?9pcgq3@P3O<|c*dU)K(k461UC4FteTK-_+kx11_VxR~xZVyay}=$mA##E= zDeoAZ1ljx3xD?)#Y+UDo(HsZib*RkoW;@L65!jx=SST={zd{U;A7-_8*u?@V4_}eo zYu6WJQtkwtiQ5gz>kZ25A^HdG{R2Q5N&nKGS)B4^fgM*^i~P@%$Rfhu^Rb73i(W+i zwOvdxf%Yl5>^EpH7PP?+Y5xvrBlcr<95^$aJYirj5!m2|*iT{-2RJ9s0Js`~=MB^* zfeQQ~>I*vIm+aBzWHTp>VqsoJ3h2U#q>Zp)5f;Wo4BM}VebtUbPKK%14eW@(20z4p z14ynCOucPKm6e$Q?-&7&6#-xf!T|3=0J{kAo*j2vYOtns*bYb9|0fbT5$CJ7IB=qm z`#85d(#E20FT39nJ*hl$60YxdIr{wypJqPjz*m%x=*j)*Ns*HcX(_*Qz&!U62hMZr zWKGp};ehi3=RjX(4?s^3asP#o7ahou{1S4ayzF2vI-;jUPQkh4pLi_zp6$;L95x~_ zY_K#q3Pzzv*yrHO*sPbblKuj2zZv3H2W}`Hh26;;jQ{zUWuZ$hGpz7iauS2V;)tsgYA9PVF-@`Y#+<^liwpNrC{=C<2m9C5(U2|4J(_1pW-LGlhEXuM10 zkHGjFQ9cIa??l}K81E771~C3XEW5yXpU?-v_<&fS0pmkrL*pZ2e-@07i35!a=W{Oh zkrQWRdm^WiRN;R1u~STx(FQs9iE{vYM6;rxg+Dy}isL17p<4%(6U45PE}BYMedl2@ znV!CkXF10$!gr_Na{uz7{umhJNV$wS*1HChjWB#Q=A!$B8TSp~z7X6Oa`%ff?w1KD zzlB{hB;>UjjLqQQ1ny1T{kn|%7I1IIVeSSO_%`F9xXlIQppu7pH@OBPr%UL4vkL}L z(aN?1CU>>4TU|Iza+0@YNZ#R!o;;8Y1G#WNv~`}eJ2MRKf(XN?X!${m5Fjht?MhHs zaAtDdDlEQHm}3v2r;_cd=-Ks1hUW8}fS4`W*b6SCAZ&K_qAOub7ANeAPUo zW#`LWoL4y6A6*G2pC%y5{!AkF170Kw@xSiE0|=MrXx#C66Nn{T7|_AqLP{<{#l_BNuZE$VZ2;f_uqwQUW?~m+!4xf=tK@bz&LCf4jt@6SHh9u z@Y4+4F945o`0s2E|C`0(*I68Xdk}};WhnjI6tf00{9m86-9Rn?xv zdEgCheyXF-{=(7?Zr)nafY!Rz&0Fg>Fc?wq0^>8H?FQp>V%hCxTiw}>aGQHbBfQx? z5UG>+q{1rNh;GA8T(;e9wmQl9stdNm!V@5(Y7)ucB3n_k3N4*<5!yGWZgXG^t zdK)tEKZKz1Un0K)#@9r7*NuIkdT9>!ff^bg5X)sb*auQHz9H7j!T6Tg(D;tnuK?qF z;y~j7ab5{VN_JfZMumGLe9x0}uJ^Ea-D#Xm|J~j1!^zTnZev3MUEjw%6C?XaZWzP= z>BceD*dQH`0uI*6p3mLvb2rRiV8Y1f+g|oBcXUd^8<_$F!dE;9j;*V3u<)NRvv1t` zsaz^2T8J{kc;#4^gS8=3{O9NB#m}W=UYHXt8{mgn7v%sSm*-4c({6*Gon3*T1Ab0+ zC4w$?O%9H*xT~GRyC4hOoFk_HZhn>q7NgssT-oQAoao%vxf0shjX4QR26Zb~3{)#e zy(xogW!rNS6j2{A&K(jI*K54r!o}GwIpx3^yA{wP2}sfH+4vrg&mFM+X9C@cfo$w9 z41|q-XHLR8G!pBONbW;?C%YfecqF^B@p&Xx?l2^hUt%CT+l_%Rl818=PG1Sm*mL#_ z@JZ!k2(-uB+2aV{B=kwl_osF0I}NcO1IY-didE+Y1N9Gx`ch89mNh==Dd(E&|70Yt z--u+9&1gT0)ay&+2at(=4#nsgot+Wjl{hB;e@ zJcYfJgWwJb%ihJby7*%I?}+{-$yF;GE5HhU$(qKgSR< z()3Km1$>S;R6z96DA&@H75`P9O#Ih+Fn&l%A_w|j_+nP%R~$HiD?QKpb`QJBldxm8 z=SM59HCQq`JkcbObHLb?R1oJj&z^(_%H<9Zo>d*CSXAv{oQwY2gWJ$3rREY@`n6|} zTq+YZE|X<6HWTHyU{t8T^FVaJ^kuGwgrf^}x#FeNVKowUD1`f8fziwg2hqkH(?*g^pMp z8-9YA%o8o^=l-AbEIWpJRqbmHBE8Zp=AtToup_4M!!Fn+=A*#Qm0mu?p>d@wZ}ehM zt6b~Fo>oO;qpWT6;-u5E*^84-ipF`e6^+frcAXb@LhRRjaUajI#fuZt8{m7j?7Gp5 zW#iro#x-)z_g=QqtEXr`yV^S-QnblybTSrpotJlJc6L1g?Ks+R@#5kV+Wd`PXaq3C zqLIUH@{0P1Ik3YE4e&PafMLJW3pujW8(ox6Ho~fXQbw{jyBCNxrISstwC9))BId8W zeC2{vf9K7NpO1MHcB3;?+2da5C=9E{p7a{k!04vbOgDv1{weV1{nInqh`fJN#ePdcI~9vb_X zgnjSDmVCe~W^wr#`FTE=EqEf!AbSsZGm|q2mH!Sjvi0bziq6o&Hu#`VuuMwi@Gil| zF7ff%qlCv~II3RZL)UA3(N4dD|4~ME!WrqbK!x&Q6PQJz*Vuwh;Bg;c!Qw<@ka(oW zeS_pWnV@mKEI$cGSb5#Yp7y0VeN4-uSU|s`YyzRp^5I>+mHs8_Nd>7gLhc8+NsMw<3_eIZ)oCzKu zKu&lX2ux=(0fmezH@1e4xuf2l{Q|oZbZ9balxQ-aawJ$3Lv<>|al(w|b0eBBAR6{% zCh$(PRq&%X+?5!MV+a%$C#D$xd2xLW+@wsZVb$gN>c2@g(JmBd@=!EBsXJfRQ+07}CRLZ@>Z!Uk7gDt` zH(J;a1q7vNl*qNYX119L)w7LLyUwI`y+LgYQrng*3hbs_+#CuUl3XURmS`V}Neaz7DR}6~=b&3kr(GGCzTGP=OU%tH85jJ6q2v|OHmJQEi+9q;h;vvxS4dFtL zfe#h+_s4l{_-snRy_kV00k+~06h=VhZ>n`sA0+X=1TtJipB+QX4LmR27s`B^$E4W1URY8OoEl|yjk zGJWFk$c)H zOwVwB0zV=RA`-#JaMiXv8HUzVPSLueSCogwbIZ=Z+<_k7yl7GQ*k&g$OFc~f5PEvL zdR^_^J;n>&IZJIqZDaS+j{L^uT|lWKyt=OwOkEVN7D0c9cp54MD08@}qc7gI+}6|G z-Pagj-P>W0WO%9k5$WbM^kjQ=c1;QuKY{|ZmU$h0D=-b#F797eZHJbi6Vr7Ncg$IO z#E7{tV~&nU<4c!fb8*Ho=N5LHy}F~f&z7m2t|2Al%;wu7qIC%FIO8KJCw3oiIOw8= zGs240bK*TKeP-`AV~*&=6i9m!w9S=}x7{mOLR(+lovr0{>Hn@x*(sQeK$&$c&Eb`# zNw2OQJwgVu+!4$_xce@vs`_DBOk=aVf*Cv~OzJkC4U0R@?XwzrKIKQ0ugF~gkHE|{ zWHr&fbZzbkJ!C$Aycu846_Pg^dSkQYn>$2^1wGy8uFXgs5B#Xev-%EKTXrQ9ZBe)U zm<}yFFpdUFPsiE+b2w-M{~tw2XDJp%@ZdVZMMzf%8mb*xjZm$tstH-dh@w{4g#v0r zb#+i}sIRZpC1o_! zb%z!DyN+euJ!|Q)9V*=wT}?=BXu!9?!Mae+uzbiFR?QF6A6i}CFq#X)wiRdv zt^!{{d4a#6pI#gav z)g{z=B6Xfj)l;Z?Ds`Pk)i&xrgIe0Tkn9fIsf2otq@FJ72~zu+)Kf_vE2z4X7If25 zXH(KgEvr#QsG1^Fy#Rg}5vp7a=H-NHR}m^Np_c8C=p9@Ws8^C;(T*A-9k85qjh2Yp zH6~R=yuK2Ah&v9flkhQUDRGaQmYPi5CH457Iwv(*@*OA1-mv#9ROlJ3B;JzcsmZb{ z?CnhjE2Wk-K&s{3)HxVI(OUT@|M%0M@$WDA_dLRlb;3Ab80&>`p)fWG;}T(9DvZm> z6@*AChp!Y)8-;PTFs>2CwZhmWjLpKhj$BXVE#yXW1KBEEwh7}VVcbk^0pd{(-%7{{ z3vE7$O+CtHRZC(&~%c>WAM$4Nh9zetOhBPoJU zoYIjT(!$npIO37GB1i~P4I!>1;@QlVgl!}-dr7AqrDywaL;V^O&5h>ayQ|hb63K<- z;I)`!ijh@9&|8UkICCpuw{tnxQ`j9~7D$`1bg(0&7(7KK2OdFTtH%_G@x1K1V4^C&%y!lWWH+<%HD!4d39r$0bNRAO~DK6ma~Q z7`pc6${(X-=+s10cC@KLFDQM?OY398KH)NXOY#c%8<`Fg^`ZpcRxf163YjZrV;qCa z<(-C`Exhh=vA}+=rf0f5h5d)WzTv`?EAhS&-XdzPlp{g#`!A#bulr=EjFowEz9F8! zqXggqloZ^q3K78Has8+rGN9E;kvhDNgG|Xu*&p@CSV}x;sXviK8Wa@3j1sP+6a5K2 z1d3ngS-e8Q=QcA?^fhL$E=yUDUpbMK*;{8QQ^r|Uc7concR3p*!^VYjhK-{H8y96o zlpNDKQRZ=M_;GPus*5rH$^GP4Bvb>&qw>rn)uSb4qI8U;`lMMB2}{uBd7Vxtw&w{@ zme>=3fPqJWcGv}&H_Ad`)r~S1Dt=eU+hn#)PA3~vj{W$SrzzQ# zk-e^0Wd3BQc_7kE`~|u|>>YB<9*qpNMo6cfKSR1590s5xxr@Kmam!HmCP9Sv<5Qzu zGTy){;a5?9DaVfGmoqz$We;(8{xk_vQV8h3<@}u^{Z?j=0%97F9>aG{9_TdH@p}S* z;*TyuMP7mE!sJ5!IawMvuJZ)&5psloH+jhJ6VClBTNW=~fV$GV+B=Nxr$^*b`f{7E z4ze)3V&ADPGJoOm;l*vup_3)0BXsVlq0W)H;YBSch8Hff@mctqcu#NMP>lJrTbmmf zTe|tgJa?#Hc;UkEDOwz-mA;`qiuG=PKu}Sng?@KW}mKJit3;K{Gn$ zpmHC5ty>8Q-XRDWc>EBI>F1nt&h%t=&x+}*dzN>gG~$k>qnnx|VT`M(dC}rI^TLbg z%%9hWIpWZ_H4rX56w)GR7S+0I))!xGw|MPrz)CL!Mk#oFB{|X-W_Giw$jUWy53}?T4J*4D>Kk>a zxk@j#@V9}+sOKM>(!m3dt+J0zx#kiEaHEN$=2 z<*KlT_B}sL1VxELOM;?2;!wE4Ti=z>+T0dfnL~Gpv$iemx(ALDi@H{|NZwsAJ_)vCVwYPOY+{cbNkvDFciW$tc%p zwzLCPuGt_05u+oydS$x+m*!?%7k2cm?pZl+_44J}JJQ3q^A6gG9zC2uw;pF^Cz6Vh ztj7YFkUHpAx^Rqu7D~Fb6L7Ok$5^WLb+2*=nD3qFG7*1xkI<1-T!%QhI_x&$xFMc% zhWR>RkcK>OM80(y@QyxArbwT6=?4%zKyP!5*XO1Z*9=!@ak z2=fd)2Z%54EkAUe*=TM&eCq31qEpqa3v}9fy(sz^}|sOk3KKSiQ_HY8_XK2ha-R zJkgomsXMxst?cgUIH|J>)iYwYLqfz>yq#M)h+Tq6U2X<4y8)Zfwg3V1^bJitC&Who z|F-Y#5X3~Mmh9^3?c>c!SxwqEEhhbH!A> z4XL;3j&?l05@7WYMLxoSd)T9b#{c!G0AoIVXjjY63PLrZpjulW44}Nv8nvdr2CP9Y zTeZGH4b=x4)Y?$6TCEKPYt_17RYuXhknoyOBy`>fm)>YMN)uFoTIy^O~RT~-tby`(bZB-Dy4P5JGsJ0=a z2~`VL)zmd;Rds=20|X8R>R~8^seq6pT=jzsMgOqHrrJ;)ssVC!C&Jzj$G|vDuGfX@|e5d2aLK zX8+QTAqzSZ@?Qn48K^M$t`65!7)-u<}d_QN_Ks0Hh)QL=4)jaFR~451*`P<_?V zQ+5lAFtuQML1jTr!I9SE3*rUs1s&FPWYqbDpYmKliq?~& znDs)UT|x@ZCk0m%>pjGJA1Qc@6#R)4yh{r1msJ~)^%Ec`kyW>V3r3MqmywZW$;w_T z=TbQz4};`FDvzOLJXI#3%vgCMmCLC*iE2}*JdIlXlp2RYatR7oCDqg#!owiBfyy(e z?I>N4tlUh=vD7}7%KQL`ETZH@DxXZrsZ>6l$}y_7QSA)sNKofe>Pk|18I@O3S2vYc zQTc2t_fc&%Ro77YTq^&J$|-`9WZma+NwF8fZv(MiOk`@g0^lo&?J6SM&Xwutjf9K5 zMQO8}2z74;^E&ul55Fz&yMa*kMliR*?-n72)_FIfh2U3oFZ>=L)Ur#+qE&w>AgSG@&^wXbuq0nL|fE z1IAf2=UFhGgWvDr_dNVwfZreBcP1VCN8t9)@Y@T&SAqQNV7>vrw}I9;I_@2C`a7Z4 z|AKiQ%A=L3dWTGvyJb3Rr%bhbW!p|!p-0>&7oiYSSt>5B-yl2TUvY^vex^hwj6WuI zv{W1hsCYI&WlaE;MbNDU-R2{70zwNBT8z*VfTo=U(6rM4nh=#pWyMy4$7Y?f{!!1HZ zI_e)pexH0uJ|G{F4EV7L{?i0MF~LtwaL@#q34UgRpPS$pCipKC{L%!!GQoeF;D1c; zYw`_|za`(3@5lkuH6>@jbtZVe30@%U!Sb>~tvCHI1b^_&^1R6O++c#2nBb)*co~FN zF6Z>GkbPN1t~7D3GQo`|`Ze;^au)uzCekJo+-!o^8R@t_JJ=Qz;RX}D(FC`e;5HMy z$pmjU!R;n@J7jBCEVr0Ax0>K>CV0CE-f4n&nczM012U0XcggZ=pNWRLd(f|4?Q%TQ`%Zb_r0ki4SV zk}BsH_yoqN(%F(l9$h$bmQ-vdq^N$Dw4Q+bn5na*X?8mqI~~Ptj;jH0ACZqJ9)qW+ zB_*>ZnT($cj#tY>o={rUC~2guv{9mD;%Jm2T0UmB7!>$PT5m2h1)8lvn8t>s9J)OJ%h_p7H9Qhl&KlIki?~YQqwwHvXff( zEa@UhWu4?E5mJmNvW|$Ocr+m-MP|9jOGLIrEX8g@6l=r^d=piRXvI!KG&v#{TL`h( zBDUf@LMV;UVh4d-EiWN4#cve?EjN;w>bDDFmYYdT^E-tg%dI44 z@w}9$ZW6fo#qd1 z_v@5O*{ev&ij;C7zJX*R~@tlCq3$9f>f8#2K z=a4N5+oD9>Nw>e%e;m6}N#msg6hz9lDqL|kNfNeA!P7=O$J6T?;8H*}am}9MJWUHlmC$E}eBi*F=hv3^ww} z26SDdC>`x;1*0C&wUK7Dg<80_P>WR=Q+MEirSiamVSnJtb||rl>CTDl7F4@#mm#Yr zLzessv+5BgIypI62%`Lr5}PdQTIXc;JMPiKMNnF3A>coyh_ZM}K_POJ(}46W5_B4Q z{}&{a{m1Lv##qGIz3bAc+_ zMG1e8wm}tM{rnN|#oSf`Rr@j&W9C7|3V?%8QB)Y?o{{O&6!sbVdM&vY`o0ysQIc3m zs$ySBs&aoxDu8dMs*K00746oNR1lx^SGU_sQlWN7nbht?cNc!# z5s6)>rBSxY?#;&YvvjmBS%=D}oAKBRVrVGocwL?CctCpoMMH5>~;Y4`aG6E2is>n9gBajF@gXD5e{S$F%j}n6_a| zJG5wR!WyY1ks~E2B+nI?>b2H8AUA(vyA!@YweN)Q|2gi}*d1ClSkf9KSYqr>En3}L zEn&g2om#?{jviIw|9R_Caz$q3SPIt3oLuJ z1m)veYqAx6BFD+`(Vm?sP=<%v>^mK0jAT`fw~VTBEn#mPb>pvCHylZaSvTGpUN_!7 zxNiIn>&8Dc(M|YyUy}2I#y-&WKBV2lKGYH(z30GZSs!U=NqC@p_yjoz4&$R4L$HR6 zMf?oGxyiYak<$IO+cKe+K&aa>RKBKB=R4T* z?XnmbnC>F-E(_jZst|hb1E}{NZ5Do?i3&F>8Yix>37cIQj_kWmbEI7m^_gUsh5gbZ z^ou7?0x}AF$Pyi!9P8gnA}2$O`jxQVFEo&!B2QtDSnx`Z&`)0@bh|5AcW2OwcYnBc z`FyO4rzTI07IQ7{#UyeX$-JxljU{$EI(MGVerqXjVUJoeVSNpX#2&Xqqsb@^-KJ<@ zbb#@mJMc$xPY5I!@qy|hSz=EE715tS4zXt}QM_TLMyg49JjQ-+T1}SPAek>%P@LJY zTURe4sQ}(jX%1VS%cCbi(*raxPT@S0&>F#1y% z9R@7X_GEiW?pfGEF{XCTSv$ePWcx5PEG2n!!1opO747jiguQCP_PBzw*G%@vaw?d! zve!-Ktizb|r0``rhB`5tpUiJPkzgHR?~3xbMQb?&(19-%Jp4V2hkuwn{Eo2q4IVxi zfd@PL(B#2BJcB;biQ@a-LC7rjxdoXqUOh%T&^yvW{IQ*)_xcw`kwn+lBIHxs-D9Fk{R+6Q`5l8?DRKpVm48HFzVF$}5lu zS0mSph+!I>1jhj{F4j=Jyn<3cq~&0*$WiZ(U1T*vnk* z|0vaNp<8j~u}8@L=Q0(IxAcP~O{6`*M?WF`6a{?A17JK)l)r%Sf9hV!`YCo)C=CV{ z8UwW7{}&SZDM^L)v%gRr`(e1-ONFe0+xaSHAJO(x6uD)2g|hv0AfXBI9p%FAe%MRpr;lTGAp|3-TqpfdJ_BxIJECD>isPl6<@-u=Dy5FD)D+;^%De=EW zBER5nZ*n}KLAFPJPB@~Cy+sqYp@=s2HchArYr+O|hrQGgkT3v~poJ(CnsQMGqZL>p zoB(GWeLr zQY0Nu5%!557NzgvJ@3jr0U*5~dI`Vv8i-y>l9!S|^kR~{*f8+=;<(NYxN;X47_ZU9 z1x8bgAV2A>`lg=_)HL4jqelH_FLJdb(GL7dv>( zi^Q!fJI)byRIKYem>+)pI`z=B#a)#pE4$8K-O<>+YOU6b%#}n?th7KLmBY`L90fVDh2S-1>ZQ;k6&qFTRB=$njb|<%s`yaR zpg1B@im6ggmC00@O09mYB*~}|MYX0>O|~kk7fhlkqf@!?ElR1VEoEG446MhGkPz2W zB9AYfP{zL#`F9fkPT}8a{5zd^RGTJQBuR6kh8)R;3U!DJHSfr7)X}5lpf(+qP~vGK z649&@YTr=y1aLDBb$*QfOkv01)K-;_!EM81SUBAuAq2(vqYf8EQ`8dyXTHFhk2vsg z$|npGm$HbRkWOlS``My_)$OXM1Xp%T(g`(b=`X_Z?W8nHA&gL%eJ)C<*8mPm8XWZs z^lYaB2Z~}*)Sm;3*l}X)96oS-B+g;ya*o}^xr{_?vRUWa-E8hvJK226ZsO?w zURBSD5W@KT|33KXO?B0)s#n!j)vsQ?dJk>PXjp)8&A>20!;BUgg+9hxx$(+(V2l;k zz=@=K`vhNKx%rt%f?pu$D}|N=6(1y`ksl<+on$Iz!|Nz2cEFn<@gbhLNP39Oki`U{ zU4EQkCp<}vM+gu#omROwh!X^uqsNIL^GQ-KWxM9nMDz`UDnxx6QJ*A9dOPo$Q|12x zRDFSZoM!BnR0kXU&( z8Z7OtyIb2@dpmkJo)?*gZM6)TPvh48+2DB=n9Y~f(-mKd*Idkjb0~@QEO>ofz}q(0 zOeN^^EB>fY3HgFc&Ox}Npnw8R0CDu6`9AuCK3Isns#o@wdn+o5OsI{?lmUN9EPSc7 z^Q)F#rdC?Kgef==WEgr(g7I#h)Fsuy*FWl%T^@G{hou~raac{5ZqX#7XqzRONXjNj zg*8n>2VYPOE_LYeOTkF0W)?c4YGp7(Y$tt&<0S3}(sCy;oG9VPOC6ZTZAj^o+bB6X zl~9b*E#`GMJEWCEzKWA+h2M6Aa+mWtsKqUKy5K_r6h1Qy@OvK2Abc*CDcM^drn*~` zxUJsQDKwimn`$#$2`w`TD^}*zP~gZG`K!F(o#!@-=r z0e?6c@|;0?*DlkHB2i$f2GUKqU=J`Y;)AdBA}mHFLKg{U}5WSW0<)RVh9igUvIie{|B z6ei&nsWm63V8*QFGX}~nfv70ViVbm@Un`XfKNQQ}f2xf0+2BJV5C?o-sM-5ZOK5gx z_CXGal5c{8JVVQo006UX!39&8qF;7h%wgT-E%DakJl34%JSJBB{81-* zCRaCJ04m2#7#*6e37tb7l~h! zVpet}HPO_$XBSsx96pjW)8&yaS}-RHWo*nZ14qW;v7w7|91vh^$j4|pdlH%!!hoXy zMFEUe^OTqWP$12A zU$tR}NhcNL*zifV$~K4H$)Ov@8;&ly6_6xugFwL{$2l`a!BK|a2pM>-S7f6#PV26~ z5h6A&S1WT%lyFM`El!LTh?N%C7E2(C@HU;NY^g9i^o=>C$pA?xSEsHu&8sYItz0=j zakvU!mb!L4|Biq)ha$vUtIu5qmuieRo&&M)(UQ$K@37i*o&uROx=#$PP;-!(jivsU zmT=)ob@wRT4?Z-Gi*-@<|zZv+1?ZZDXE)zA zC?#@fd6}2PN)8th*m-CYj4oM4k%**mAqn3pz+jfu0+EQO&|cu>gD8+7r)P*N1!ssx z!l*{oY=q;Kj|Uq|HFfffC|yJ2S#iKdsr|KZLu09pxw2p=2sULbwILVVbY|3s zk;4c1!&qu0bKg|uSLD_&EI+@a0S^u_tMGo_aN=4=yZ9BeS>>`~-}x2TI^kbf2GcAc zJ_pY`N9)7_$-;|sA_KoB6FR?KZP()MB$Js8o?l*mO9utjJg~sb6 zuG_phz6V*e9hlX;5-Q&Ffz;?hl}9gdob;Pg^^AbOW{zyRV9A-Ow!D!#?;_g%T3Fe! z)V_k*BNo!;=8!FKu+UI69CjAIQyTF_eU5?=MZ=*;*irEMXmfK*(3%_CG!zI1%I4~2 z8jbjZj>6X$4FrPLya5=F`T}~UFd7W|!+NHBX^YR-!pz>Y=9+};c8lgEUgoXTYrIj| zPL?ym*LdP)q>PaYrc^Pqh@0E0XLKc_tI^69ZD4dgqdwEb7L72q#nM8Yd=*1Z7nayb zRfhekbyBs!6aP36`y_;k1EJ!YbOQU~0W4S{ODEM5U~0XS<*>F_<0oV>=V5O0lEO zC+a{pU3H>;Db0meq?jA6Na-Hjv|CEh>=SJ8iG!3PCuPfVQjQ!a6^WN2Csk_l&3{;^ z2sk@r#pTyRQE>R2vdlTNUw)w?;kimZr)b#I-Vy8U?iA)eI$GO1c3t+G$e+7UT)D}; zdGs(^CoPKTd~KB#m68=E)5AlrTbbvQEMI=1lI63!FCk$L`jk*OtoWnRb4i%X=Pc;| zAxSeAF%uzg{(nx=d>=hS(%dzAAUC10-3_IA*RC_E7a%HAx_Y)q3KZD!nuW<5Gi1Pk z5xXAR*&XXq+dJC!Y*D#o9eR1|u5LBfy1TVYY3=HAWO8)Dm>ABp_`>#dU)J4odH1q8 z8i|vD;|s3GWPbQ8%Sh$aVNBOEITp`VN+y7uY1Lc^{llXpsX2!1yc4kFwM(Y+dM_*7 z^20x8VSA}R917F0FA`Kag)|%vg=jbs@n7+%Ltgfn?WDTZ{w}QJw zfh1NdFIif*jKk#|uHbMbhpRbU!{It&cf%x<73U_&1+%Rr0h5I~Hc3_qHc$$Q5i1I} zk&CXsiJKHxq zJ1{$Y)$Ht{*;$BfC^7cp-jgb-=7%=E9oy)Y-abPr$lKxhT_;h;EiJEF)u|ZQk&{z{ z4&x{}IX&n!uIJJkG$L6Eh|l2tmoE|_utRmiZFYHUo-j{0D$wjaSA4OTSGpS%H0gydPE z7wgpPQD)|IzwN@x>gN{6ItMt7V#dE-C8DM83oEL~Ox5dH8qn5xVWpWC&ycRysU)E3 zvI{FIYfzob2w$(VE}X83A&8qu96ZEFS@+?C$<)~ERwR(ub>U_09_<=B!W}%keuV*L z7dX>1$HJ@5QA{Rq4(mGHV9~t%#J2OXCvxV(xi4?wCFvwv9Xi_D& zOXWfa*r`|vVO$wT-;8FeVb@{-76^ARs%5ieCz`cQf-bSONvPV0mZmLwo8%x?OPgdP zHhZh&B6jO$Nhc25W=Z4X6%TPBJLSp=A3QnXLrL6;!Uu=>oxfb3_dDNvFflw_^s#qK zJs0}1&o34R?&W8hMEPh<3&26?WB&6w2A_W+)fPN0UqB955fSq%ie2dJFX~CL1Ox+N zM?s1b3A89)sxy8=8itlixB$;-af(AioJq*(^CLowY_;1Q9O4<-MPJ^ zXHO=F8*}6v?R0Ey?cLwqaRs*;yv5Si)BXk?a^@OjT|~WfoFXO#`&=y8M44D7>HqnI0#gEBKp-! zjU7o1>=+&AAH}&p*5~4{Q7FinY%A6xX010*Ph&$TszP@nQCT)PpO?)rxjB|O#|7tc z$`%{|oceqv5J!4!^k6oHTxDJ~THs7Yf;+AeLRxE%%siv3S*Ch{D^LbqgYN^BbdQFk~Jk~7Pmk(Av!)fCJyoQ zY?)fEb#-s^z2oAy`QKsXhA)REpvX(kw~c6q5{WXkMh6q)-KlFPaMrkSoa`AHA389S z;_HwziHlL|k;Kq2+IVa^->S0HabC`J=LK@6XMVnghpgsc7>|@guyqW!0Dw@iCE84b z!AOJ#qrm{6MEwwo0$#)i+tU^w;Q7O_<7^24awHmr9ck1D*@B@gFHb{QNOK5EZ;l24 z_yT@={tQ$7zEChoo5Q{+ZI1X`XgKPR(uhCWLZhJ;0KRAtO+UhZv^fCPhW*V!8Uaq4 zhC?lA2{X{F`XfHSpSFaXn`t=E;-}$o#7Dys$Q^-@qhRo>{$L2oj`*6P>}VwDEPTUI zRwxV=23o>V+S2Tcx{5jsxcG3;$!#dEuOt<%)ug&cZ_{JmZv9Gq$lIzg*uAP6gNa3f7h`8j<#BVIhMCzXs;Gr0!M9TL8~CiRT0WMmB^4NPfdauXwdG=nII z8EIzpVkTdL7v?rIxt&=$n7oC_Te;Q1ZA`w5$z9C4oyk4u63g1ll-=mBN`3>gy^-1W zF>4>QrWifI?1RjH6;p=MD5B-f%rb`71)2OlDEI-w=qCtsJVGpw5V-=4=tpO6o~<;XQ0Ud!QIIeZ(3Z|CqG9KMsocX2pL_|J9X z=cxF(Ui`dU{M;aZZWKSq#Lvy*=N9qv9`W;D@$-K1bF28dP5j(0em)?6J}7?f5I=W{ zpS#4*-Qwp%;^!XmbFcXMu=u%8{Cq_Gd{q40FMf`Tp9jUy$HdRa#m^_j&qLzpVe#`Q zA#EiVN-iNao=sATMBG)Iq;iRP)}R5mlGSaJPD(FDgK%YwH%Sc=DPM#3*t{#z{9DDU zHc2CuYuh9{sjAr|)mju%UDqm=lSQl13f$s))QqlKg+}6P%Xqm<)}pPrx@NTSwsakO z_F7htHtLppdFk~l+ayX>RB}>QZbI{Mt12L)LdfbRqJlN8JEbzR){j>1)~!R^bPbYQ zkLk-{XDcZ&rCcY3IAhM`vO;86%!ToaBj#AHz|L2TY2{8rRBOz-oGRQX+;UYR%oejP z*A$}D7%jIFVo_sixt$QJJLbl88;Ox}N{F4s*m9;2ha8j3HK@iOvoF^b;v!zshP&#< z3TUuGpEm8oMRG@A7v;>uwdJhCZOs{n>&e-MyCP>AF44zUOcFE==Vr-1y`G?DIFH`n zXQ`LbFkFdcpwC)Q(Jox6HPvUU*U>ConJwLCuXm$WxN`e}K1Y2W8in&Z2K$`#n+BaT zq{2DW=YqmqGo;dWRi7IQbBptIs#d&GWxVC2&$yYGHsP*CQ*dt;O6gQ}K{EOZGj1nn z6h^3}Q?&}B@8->}mF_0SJ&<_{^4@EjWE1&5h54Q!cyJ{QvQc#@M1R)I_gP|mp7fPX z4VD>SAbsAtL9g))*<#+!#QfjF{Ld4#1tyHKiF#i!^S?lhDbiOlHCSOxb5CQ~oO(d` zCFc7T_X}2sj@OM}lfFu5Tcz<^9*G8tGKCptVFoe&2v}2q^d}Qzj^S%FO?iY@8#)J>1FZd>E*|uIO7j8FVUEhPt{9hzd?WN za+0DN#l!VdDOwWwquf_N6GxtT zSK5WSmT`l7eO{icA>D8c#`djB-%1=eXmTpnNT7)yz#Q(hJCoxMrEhUA2MiaWo99@Z zUW_@`7#~vVW$fsWK+dH4Nyv9G+Nao|-me(jm17!M$V_Q`sJWn+(jOu>@Z zAeMGJpe40>t^CE=S$M^#Zl5@PYC65Xyy_pb#>0w`KU1|7M$8jv67MMmowS{d`MDV= zg;Mq7Dx`gx+ta&T`Z6qSmy)jnyh8qlVtiGBvG9`d4Q_w$hSSDBDcImTZgSOYHeIA<6Q(;13>SE)&O1wT@FU((kPnpI6^$3*x10}vPz0x$Uq@#5l ztlxry&|f6Gs0~*c#-~FG4g7B8)!GDb6nyDKks`5#Ygy zLcAYy3xVdS`&WpEk%aL-QR3^;>&*C{LOhHhjQ_dl0A8-gk}dZxQSdJSk);_T{<|_Y z9Sf2*#xF$|{z_!z<^3AaU~D1UZ$+2!=-)v!3?PjDFJ&6)#?@{nQ_d@9_n~>tKPprB z5DP*4f1j=Y5b@7|2&o+LFJ=c~{9hp+9(er!nmvf|e}i~<;PJ1XtqT$HAAks{9C4DG zeTWIyQEpL@CtOd>PPB7diBtH*6KduT9dfIpl3hvjZ zkM>*KrFezGlGJOVHsf)6DoJBewD(5?7Txpjv$MKI*NrF95FJeYPYZ(FUEEI3)#}qw zcdhnWYCKKjXgG*AcVZhAB=FNTYwiKo zjuWtyJVU2og(#O*svg6B_!c$4H~5wL7QjQ~d4L<`?@;4;y7I_N#&<-M+#4nFf%yS7 zen6*U7hxvjg=~AKC@hpPOK>qmD@W6q*^L$`en?kAG2f%pnGrXYzPMg`;s}}uG)~h~ zK#wo+C(RYh?*`F!_<%IEW_LWN%x!eyjsj{ecH zvD7e^uyqbJox52DJz@&qo%;()2`!+M!fJDpbRowtDM;ob-SaOrBj6{a=&%a5?1%d& zM#oBvdZXU&Z<$-5d2TV&!VbOc1*0PWq2ro~zyg|8bWE9*q|70~EfAzEP@KDvqtb;4 zch4=?om)10#!P&gPx&67~^c{>gHn|(AK1rThGM$k-DnCr6? zOW17Y5iE*^)x_`+%v#i)o};7I=aZ;3hXW-jms7poii!%olG~c9s-gn62or-ivTGTX(Ln8Mh_D4L@?EY*rd_|9O= zCVXe;7Rln2h|N+m>6ToJAygfhtR=Q38zw`<#x9w>2s1b?l{dAuZsxF^!wwF&aJZGj zP7W{Qu#3a(9CmZqvy<%V<)PigQEy>nDbbfDBt{f>LQ)A8zSGs^c+Eyzlt4%96a_gt zMVXJqx=Hd%#40IrOfEAeGi5Sf1dS03MV(=tE4j!vyM-$a*9(cs%ACYxeV<%UP-3FV zO?|M<8B~P+u&Q133NzY;R)6~pv5-Q}y=dG-rqWzlSJ>?)ap%cxPO{awg?rdm6{c#B%aHRnGRKa)R=N#ZyoB5Vuui^{ z7#|=fr#jr+&wAW574s0}`|c!s>-}TS8PzLy1M&*`A!6K3VC&75f%(?^Lqu%7?qkf*MKA5RD>?@Kbw8#nX(hAke1P;>c{;Gv$DrvC0zQgdaJv+% zB#`41MC>{rB?Y@qpZXXv9wT|X&c{j7uJcLLKRjR+?mF)z=B~4$n^Sfv%&$_ z`Nokfc-EWU^YN^kM-LuMj11&+tqzG$t18=cX1T2!XuXZp&;6k(%v%aPZ13h>ooyZa zdvnrw=z zt7l7RckbB@&!}mWjqnJC7A(%ZZ&T9VyFJsay};nY2XLuL?he6PckgZO>TGY_okx7t z_B~y@JNM7gtg`mb-pxJT-5s0rYc;RLH?d{m#zGqi!TUUpP;%V>QVKR2@ zhsW@=v9!CRqrG=O5FhK@Vq!Vkd%IJqfpOsr+SA(JzCXWjdiD0+)`0=orIev!6jV~2 z3Lj!fEy-?edOLQsLJ#!pQuc4$@8(0`^488gm8~74!^4*+h9*4SJce0Ut#)jHGVv^qQrC7Rxf zE6g&uwjAvod#sEelzsaDUX3 z83C>1d3Vq(*?|#UP(g){p2A1q4HE)UD4;nKL_@(L8VrXcs^1qur>9}Sjt03e z(q$Es?P-E%mxM5T?)l?bwek(H>H zaS`nLn0zUdTbbO(?Cs1RV-BI8aT$}>GiMiSW;k~-xtF>2qGpDhyQ}or@@pLO8p|FKYvbGBM zsMV-MAdyA>1Z-OuH{yP_CV>0d+8|zZT_RP({~>NL z5W6jAt3^Em7Gt%#LY!JmL)`|K9@A^B3UQalN^2Gq;<3amHFiQuJTXsAB_XA*n5(9Y zkTOTiQEO93xjW{r@e<Ls{r2m0*wcGOF7+lTucD{kvX z#RQMz&3(>>5>!kmb-ty~)li0t3FWSL^tl_ngYFqp;l7^qc^WDQJu{@rb2I5HX{a77 znIVfx-cR~U8x{|i&XAhYJ4jzyL+xN0Y^BTYA${cyb%W(IWNA62E8+6x%Xkx zSJ6;ESOI(IiYG~5B{aQqhODgo66vd|OH>J;d8&4!{K_ih!@RRrOCN^LSwlW08y_(b z{l5&my8Gq6sy$Mo$~ev=(eyyW+C;VSfOv!rWrH6c9~6(Uk!%RSB@{)f7A=Lt!^Cl?7xejsBxYY?kYNb*ePXntM!4tP8zb1UVF z#uCs6KjOnRF8v5vu$#Or8$ZV8HbQe>mbnz0};0q@^4 z2q?Dr4|$5eh9*3JmQ6u~y6U74s;Y`d(2=1Jow)hXs}u*qX+;Rqg*c)_p39zO`?Vv9 zgG2p$c6D`);#pJHretlQWyUk`Hl3Hr$>Qw52Q|%K!5Nel8kuw#CtC!c2uYS~oVh`p z*Om9{WCw7rzRa4h^0fqou@+WIyt3CO6XaAhrsx)pFxA2|t0JtkP;Qfj*ky;y=_W+h zDSu}KUN$PUA^!m14b$8T&O_%biV=Wm7{ZkxEDRKjaiJK#xFXEt!;0p^HIM@_E=bl8 zUS-Xk#)x}I$FkOto+PD(=3qBq>IE22akh59VSi_Ld&d>~xA(MnNJ?VlT6e5-SMTn; zST#K~Ha_9%YAuMR@a`r$F33#rMx-8Ij%%#YC%mi3N4yJ zH0I~A3&PHvx3c}b4g5mL8JR><&RVjw5Xpi_F~m_hCK+0sKchAjO*eBE))e4$79sI_ z01Lc0VD3O217>bslzOJcB!_6n=E20sfz-f!ErniT`ww$pD08BTBLjlUK!f_L0;z6Xwtt zrYbRs_l}rxc;m!Am>7>`9?Aw213Si2M}|fZ=OW$WrN&0b%(4_H#dZkL%xCN2Lx)Uq zoS9x99g9JYmVu!$(N&A*9xdXf>Y1xCny6~dnU}$7O{Z~1;wvW50H2do$;hba$@bKE zzp$pgXs#kmbdn%R4KK^o2Q)Fntb4jUQ3~I)Yd60|V;LD85w3i!=Gs;tZegQb5ID}W z_Ka9X)?KLye_49yn$$qivXn~?=$NB*?7;Y(%Nr)<->S-J1Y{+LbM{@T9e)9dCh zs9-_%6cthL^T0$(K;az+4^3Rl)9fRoA~i8FIyP_NMTNcIcCzyA!keQ)+!<;Kg}AY- zPym6irCAO7!qF%VheBZth5|NNn+`!HOKK!F#;^Xg0CtN%9Kw4%J{k^& zTU5W_?`u{Ap{PGvI>*pg1HquruLfFLA_2hiH3y)kXdt3z=9KCWwFChn+8k_#8qn%R zOG_w1TLOWo-UdiWi-ix8-PayU6^+dG*|$wwq5-@j`$}pUAwToA~!)y)8&7viyp)i-XwxX5`sg_kQ*X#9F-gWv$@5SnncZ}*p;j$^4 zjh~NmRRuRu`%If+ijFqLh=ZHL7nh3ojUt8LC{n7?_@`3C)Fq1uQ&up$aHF+`Io2|= zo+&=&+`wEHF{PO)moVj0rfgzlGgI1`vYaU$Oo=fq$h56Y>txzCrd-CfE~ac}S~t^r zn6`syJDJwZv=Gz6Oxwk@rA+H(+HR&rn6`&$dzp4Q)2?9J8<_S+ro>TbrtD|rO-xBK zCC%&yEOFU#mCWo{Gi{h@ai$$)+6dD|ndi++8E5h}Oup8#QfB1sO!hKz9bsCMY5h!l z8&eK2ctozMtGm z$Zh2IT+9b@!4KwwcjSV1=7M+Sf_LYF_vC{2=7Jy21@FrRKbi~Pp9>z(1s})-A0!_m zL~6K|$hVP?1IeGrC4Dj%d?*)uI2U}Bd9P=8_;lU$&yydNlGht$z>Pg^`~;3m*~B?O`=LgWz{0of2rP{kQ`)@x=DJYL>5a_ zj>#~Kh(uy!EhSu@xYh>yEG4F_wGg5Z54jRHT1rjrk`k^6(^TLd1{GmOh4s7{qRSI~ zN`nO@bXMisKH6X#q!}xijjz~^8wu>f?8cp>Pc`l$C`XDhX%ND4pT1Wb)Qy|C_~vGk zQG!_x*ndNr&8q~JLC|3+3X~>os7i~%qe&a8#-P5!DnPxSOBgDp>t*8xxz9Q^Xf z`z%5U;;uo9aZDDseN@c_=ntc`=202d-nkA8Rkd3Q#6KycNp|;3_0nl9?Md1AwA|;M z8g%0I7D4FKJlBzuZ74CRBcFrDFO@$p8=sf!rSa45)hIT3Mvl7?>r~nka}y}fcveQ~ z*mSxiR!Y_Y?y2X-PoF}RbXocLXJ?Hs%klEKx1nL1m&D3ZcSIJKiv+nZBDtsK+~p!w ztAgmCn2r94Z2U|Xmy3SR#UYxm*&cNQ#{CL9o$l8FEuh}7pc82ucQZZd;(n%YKsVF% z68e>fuscOo9rW;s5)78|U>OF>dC<#YMa~IzikvzKr6wtQvQDZ8)fp0$?uS7TA_&7W z!ia*fnclA$k0|IT_pTCj7JCB1T)r4>XfYmBVpTFwV|+@9SEJwKZPi3Ep5W-|vU;fu z-3UL0kF_F6(rZ_%=iJ8Qd$Bp(m07h&s`;J z_@$3*ceEO(cujjrtV+R7`C)#i{0P&~`>`9x68CEO6H&a!&81^Jy^aqwY|?PabHFyQ z!&f?7BD$e`2@JVkaXj9+_&R=*tG~_oZRU0SF2Cki6z;efItj-05-9#pin}D!SdwWh zw2`}a{=4WQmA{Nh$|&moc8d{?-x<*NXa5}{!G!2 z^nm&HoS4w6jN|-2R(Tw2T!A&-Dax>!l-)($S7G!$l#d>(`)x8jeMCH2jE_?H z_b}oCGZ)f%0uw%#Urd?tagm|i{dF9259LTNGf98Afb>VsPWq#BknS~3i0s~a32HAl z9z&#Ze!HhaIC?M7bNXH;s4PJd^5dD7JRwTJv~oW6q@#T5k)y}4x1Yii%f7}(Sefw& znkkZrA}x0nm;dAuPZ^B9&rtUX0!{vWu7e!BgPzHD&~fabXA3&$%V&1bR|-1lt7q?^ z=jQ033gc@cdxhCSUq5FDIm{0FW~PJw>8u^}0Cv!~cn3XacF-5k*+GuSMF%}k-M4TN zJk8F_Eynk$IWK=ebMw-jM91P-u+q zB&%>svcQ!uIyO72gkGKPcy%`Yk6Cyyrl|WGBsx9Kt5!K zay|r@kbTk&1rCG!ks7b?>!&z0v5E1E(-%V%p}$scHU0?QJN}Y8%1?^w-9N{k7|3Z1*>F35@nnrZ^GJF}j`hV#v_&QmUw~7NX zH>h}m^`dc1MVuog&B*yIm2Oszn^maxMf~7djQ6O(^FaC(=Xqk6N^2l_>bdb3r_7Rn z3?;u`?b{UJl-_jL;3nf%6<8G;RWz+;h9spEz&rGl6Dm~rDK)-mir-0$EkgU}c2&{z z$0(%Sry@V|60kD^;g11pQqoRp8CVq6zwjhIYpK5$m<%|gSh&h`0 zN9XY)B@`!&y2bdI%K6T>JAvg4C+O*1Ls+^Ui{POS42gz4 z5{qGxI$uBj)kKE?GULX}YJTf=Ae7t5QJ}$ z-w$x9a;s*%U#r7=kGE+sGy17}2~Ldk8oZbV~U8UZu8TV+Jf{`-gUM;D{dH_{3K8$Cx zvt>BVKcdxbH6GATrQ4G#>_B!v?GM6JM^fYAyNfBg7btm1!~2LXMOU>Ku?L zW<1L?sKytyQ(SfZRJv@OpY-$X(Ks~5?dR=&r}h=i_=+a>R?rl&xq{ElSG6RA;&);3 z#&ggI&tZ9Af_C9&-TWpb)ui^RBc9Jft4|KK8eD@GD(ydG`^&$ zMf)6V@e91gFYp$>pczwIyf@u@S4kg!(X_taxOZ}gb6t2W89n=vY(fZ3xteejKP_t-<;6h$Ypz{2Zv%2I=ErrWT)lLTJf3{5 z%^g^Bc>a<({(epa8t=-=T*pw!IdSOF@U^b|_SZ-K=RPM4oL4XKx+4pxvOh6AoFP*i z9Uj=57-j>h;nYM5E#l!XKe-}9=5eJqerR~8KNVeg4Wg7x9hsBI^XSOI#CRsRI8O^K zJTIQb<@rj(bGzpA&z*IZb{_e-e@4?E3LXfbM}x=nMh@4hF6_d2Pgpu%o1(9vXJ7u{ z6sIiFNI=hY0}Zu=e75{?9cT{vYnP|(8V-c~w)`eW{6U{R ze;m?aprzT8?L-=mL;{v9Y55A+DxZ{RYU(a2($p2rTc0gMX$eG~+(o5cVdv)`j%ro) zcYHE5NdMTZt|$nnYLw&|+OO zSxcj>AyD5jL(0j!W?(2x!VaTCISR0nUQdj7q= z<$A(-AMR|1ss?1y<%g1elyzC!)Vk zWQUD)jLE=Yl2gKxm8w+$rS}m*>V3rcD49Y^p5}Urkh}4~f}@M^76sl2g-Fy~sXRDnBO1k3`aRf*L<2f*o!l68G(0Liw^9&pEGjuLksql=7 zH|CWCYw)6Zs#H0uc@bvE;OIz7?Kqei8fL8n1Hf;L=WHCbCB{>cPbRadR^UUx$ z)OcWA9UdA#kLGSzQnQAq2WY-%7!g4X(tU<{%U#gmTXYz+c%&=7pGDa%D#Ogw0{WrtnrD& zM9K;rzyxZI45Tb(*{N|y-;S+4yL&dawf1&ILi*6b#DNraAGw-b>?s_)_5J{`l6=r< z;#W-%!@E~`p2h{vrlv#q6I>{EURdQh=jWCdtQkA+5|O32fFg(+?bcQz!-~p6%GsI0BW{5{^oFOIJ`WaHn ze8!rro9?w!{3b+s8;R*;Qa){Pg@4^$#o%KUIF;1X7Boy1OtOY5{$UTt$u=Tk1Koen zB%>J;s`&|LOOn=cyJ#DylQd=}Yuw+5^h=VASFpIDv`vPORsC$~1bzf-^-VKmiKTUh z)LGk%O-WWylPqnIIb`T6qcv%1Sk4LRw;FBmb*)QUkM=L+C)CNM$-3pxjYc~crPyLF zlC}%!xDkU7ryHW6cB3t@w9fOw?5w_2uXDEnDcej^R^>=pilnTzbs1eifR-h|ZfsA| zq&?wrTOnVMnQu)|zP0w9#!kqmWb-+UU69X_C~;4#lCj&&w=S3OQUduJ99PVcM&}!5 z$a)uWbxrOojlJ>GZKV#@`-p_8@4SRD^ZHOGl=8U7{iifVm*U=+hhjBz8KarJhxwxS| ztnr$pGpQ!L#mtcgI8Labn*f9b}AX~FncwcYi1gIwZ(HCuw5HUkbT`)dOg64 z%HEAkY^G;{h0S#BbtF!=Q3+=oa;DkNEi>Ltc<+{B?|wbkyXD4>Bw1eEy$=AnH$i-+ zfBk4151ygN%JVxI_}uag7W8nr*_)+q6ffRtX2^E&2S~P$?;zO8Co;z-@Nn@7-eJaF z1TVQ5A0lS2SGTDWu3yHZ+=5D_ z`(sbSHo@~Sq-Bbd-Y4iy_87q zkKqvq#&(F-!)nveVLV3w+kFhuzK&^Ia%o#&2Z3ok?^KA~D;mzYYD>z36#j zd|RaP{#s-_FNWVD9Dd7l!*8+iU6Nef5auRczYjsA@dw0>bM1NleovY2cN#h(Sq;5) z5RLX_n%e`bJ9b6R!b-9tU4s@@(0}Jkm`5P)H2Wn{W1PlVcsnp+)0RXnY*@@^8K0LJ z|B`uD@VO3+)>PgO?>AYQ^rr3Q)&H1&@a=P7i94rXkz~!OWNq4V98-To zc(~yWv1M3}56ii-_IJei9f@n(GzmYK#_vgTNwOxk9KIHRK$AL4V)asDh4EhmRYS0X zT4+&ivi1}-=swtU`I0(B=t&(Te)`v0<4*)P-`s$+6+Zo|Px@eUZ~A`Xwh$F#MM^>o zmp%k&3vm_1)$v_e7hRZxbFQ6V;MIKj+H-l;&dbwvfv(JRMV-@sx$t!yUN~`iZKIq$ z-j6VN9t9wNp~vyetpq*e|0Z%C#hF>KL~~1Y-ozY8O}v&G&*kB~>jFKT7raK(&vH}= z`Xh?JIjV%B5N-)80blrBF3zpFlIHbm?$7u&ukkM7zL=fGe$5Hjn?`rcI-|8rt+Uh; z_k99D8z#bGsvi#S}&;WA>iq4RT1M@NB@1sw=x zoS$3JCcdJhb}7|1VRb4xTP9ZSbD7QM58Zy!XE<~I&|Ufd&^^L(n#U;R{?N;|n8wdA z&5LOc$!k?f69MU|yS?oxS-{YX9KS@Id$L zQ(3W>7YdZr&~AQ)-!&RviajYKpr^%AesTcVf3qJoYsh{_#G zTG4=s;<9)MQ_DhL@`Y*m%Wu0RUB4xxR}FQ4(o^& zRt-(13|BUZq5D*#bH}L`G$EG$vwI6R5a~D*N=Om+`r_4#3bGdd7V`J;jS$u)lzLn?h zl;P2l)EwV*rx5$?HgEn}dD@P_#CU4WIm^sk7qsQ|`22j%YdgLbb?+-05qxTg{QhPd zM5DQZfImXR(NHAkmN^pfM^xT$8VLsR?p!38;bEHnKAn4-vU#0)xwjIz7^TegDh2!t z%xUW4CW}gOTBFdCTPM=0m@GU=LF7s%ueR6;I%(!MXBE!WSg1r9Q%i1AtX8}LrMo>4 z`f-!zqrb^tE3Fq$0Y!_~JkQc%WC)KYoW53{c_M@fP z{YK*C)T&j}ZFn*!Q&rU(0OJ~gam@^I6966=09CFr-ga_o`cx;LKPKs*X1r7Em+<(K z86U!HGxzdKHg#N-bRQ3=^{vK7g`E=>FzW#GF~oeF#1&L^#Je)c4I%C}1*uSB>E(uJ zKZkf8(60IiId#7onqKGehGfb&&K)&{7mopWJq?Z3KU zZ44}*XL4kaZLOQpxMf#IJ1mj5L_c1;9!?D$NcFrP3uC4hoC#32Eze}Ts|aPTRj_FR z4ai?f=UyR8T63)`w$dk#+s<4$gA1v-=-FJRGs|e^d$VC7MJ3K45m(Fwuf*X6byTqt z{xu8AwXik0(6d0^3f-`fN;0eA{|%qqg$r~3h~y?!A^~6ir-54}r=e)LrR2bo1KirvhJRBA4xW#MJE4!(LJ; zht;N1k{ng=yF{$+b@I~X%j!8?$>Ayv*KoL&!v+r5bLb~>8LsZCx=EtIF1q<5@4-zh zEy1N;Ek)H84OZ|N(O^}VT)5T~!idb*cAc9lbBeXSMXc?(plb>)sH$-prfAY-Gmzsl zWBW56?)^x~F3mKlo44)=(CoKQohMERvg9|M@qOikmyNm~p9rhI6&&oZNLjvbk*A^YNI8 zkX_3c$Xgc>k^dkM4Xi&m)#70uZn+SBVJovGTkN^`=7Q1}v?N~`uUs?+%=I`5%WpUk zE?AVqp=jPZ+Y<7HX>-IEFjwIgUrT^SBfcPQZVmy6Mx!(u@Hc0c-$;my0u|U8d-4}w zWTN>ZOU25Ywe@M|mOXXOK9}Qe8JFOddZa!i&eEX6KZim6zNZFx)aig}mf#=Hf&i9;WU0Ro$QSb7;>i514# zZCc8C?=oDdHR~ox!$p|?=obECfds*UXE|~YuGv|B+*-hox8(To%X9p=u2FS8@Tp^h z+a5!H9Dr2@U{e6t>6metv*)MKVqP2LJi4xGeUR%;BC_2H#g>sfx#Ai^i-OQf5!zIQ zcI{5|KWXyrA127WGt|t3WnMQv0>9dz1(@`cNj7LT?kD+N{daKz{yxFO9kI5*z{6?V zR%1$V^*RxIhMyrOsHU-SC^0_k-A2>4U`B&?iq1%Erb%<KX6RdLS1`EX`)z$c`hwQ2aXvf>HZKX&b*iP5I*?O{IiIuwrasKCrkKHQ2bnDCa*pGeqho5x);gMfIN^h9H^#$u+zx9=0x&GybFMUzF z<(@}=qksL6zn*nn_lIwNQGf93fBwDpUgM4#*EfIow@+9fx&LoJr9Z#x51(}zfBnaw zZU6l0AHFI7?+fpK(Rsr!zVwjehG&o0KXd%l4;;Vz%zu5(`Pcus`Bn1E$DaCx{hQzX z_yexHXHVQiANtnGm#xn{_k;g%ed9BKcvSnqJ)ilj{_3y4I_sMH;_Z*=FZ}(1SGAvi z|1+<+?zr)W4_P1h*l~j%ef9g#x<30Kzx$2ti=X(}OY-dxefVVH(?1I5*gXQRI)0n=ga4V74A&kqP~fX?CB%1M23wa#_VCjfv5%scV*;omk#laxHo5+zrYY z8cWZgd|>|M!TFPiX!`I-KbcS_4jxj*Mu%6qqxoGtOL^wy%{E#73jWl$YV6Ezq#xVziM-JRg>?(Xgm2`=~IuEE_2 z79`lk-3buj;_fc{yx(r^kKL-S?sKNAr_cPDs+pRqIikz}JTYi6+YO_rLTYAhvYTU) zhn1@Ir3k7ltr(~$vZy>$t?rdf`_r_Q5ZM7ka#_g;)ao+4>>9CAV`(NfYlCTk43Xws z!_kUG-l~CUaR1JUymr%{KJU~m9!LL5N@9n}sAWsJ_B8#WzHO`2h5ZLVZE`M4=BdP?VkMNT^;$C1~!ai`{Wv z#DuiEH^w04lnqc-5-=1?Olg?&R1vTgOH62(b5-$cNx}UG@U^--V~|7?BPG>1bfh8y zijfPY7TqyOju}Xq^21V?xNXe1F5<&GRE%f(jKX1Y)Y4k~&01+$THR$aNVXYq8mV!P zag}b?RrJ_e-7GFlKdEllm%uk!s8xP}8#>>l%llYBCQ@G*x1b1~wX6(IoNBiT7X57h zm$JD^=h2}8+e3_{wJP-)t6_0dOJh(RGk^}Mz*9L)(t2jncqPGv6eOF!Y_c>IX!C z3$QjxBvCt*0u&&-pw7++L|*~=8_z(guds}uAgZQ>IHl3NT)G!NoYu$;I8{=(pf4ZF zDJvCM^RVRrBrpR&VJW}k7?PXQYWWyCe`jF<6y;Op$D-pH=9<%L-_Xda4I-1j9l@%_S%B7|?u&~lLRCf~u`Zx?M`47G+B*4i0C#AlfR|W%y z-v5jGfx&_iXzD+W=+OVuc&)cZAf2`V9*JXUvSqNxObhD%U(+%8)D+eKdi|$%u5>ST zI4y}8fRCs^##k;jqv6r?b8p8&!AM_$m4m^*Gz*JGajc9Mkcg+bJF3wvujWylh4tT> zwAF6(H~?+T0B2f2A>;qFHLsQKU0WzH>np6o0aR0tOMOTfgW~cOnjsjs_KTb=iIxvD z+qkF`?zPNN*_#;6bm#Jh{+p(=s*Z)JEsls4*8*Xjv&UJ;AlI8K2C@%mbUKDmKN;c5 zw;lZtH8#KoI8$yT^+9Pw;pvj$NhASkG##;uVE1ug=M!oBrgvI;z~uN8_WhQ^h$%Fm z;2(wN0=nvE@X3yB#FF}tx9-?CVcC!ZYB5#dWm1(Ux@uupF0~^k1slv>D(#JYLQo2I zAq^NO?d_;a_L>I4@3- zqRf#FMgYA;L!8#ciXnj|u}ec!IxiuxjfS*E&Dr+_Rs!y z$I$0xAlF}-HT9jx_U?b(FFl<9Iox|~i*AK!@UJG;4=h7~pTF(4_w`B%Vc#}s#$pPy z4sC+vSNj~sxpTE$*I0j;7enTF3a?lMMVbhgIJFGSfb@S@5Z@tTZ?cvc4X89+KX&H{ zio8Y)6}Jd%k{wuC{(j8=2XdfD>1EgFh0PX-KXpZ3c_;k;tQ8v;p=MrN6GM;_;a?+0 zZ$IY$*TjK*n3OpZIl$Q}daQR!C}4ZcfeHlA?ik*K>5sxS?|0&|ztW3hZqardj0P!0 z4Fv76miFZ}iMuo`0n^xT-!Cwf?_o~Wo**iiCe|9u`*hnp2LcOi9B$Q#WzO<1G#w6N zFHf3?#CyZDTt<}re#4nFg?ysl5x_0aBV21DC04?zr(|5p6NJXESt{gwvS;owPd{TU zD5U+89NO1y#(&`0?tQClV(jJbrSBPy|FZuLPa?~I^tpE<@@Bhfx_o(hrvOs*Amw_g zc7U{|8)rk6;9WnJ_?JHy+03neVxpUtgQlc6nG$uUpuc``d$&q@PgnZvI3>EXv?H6< zvs;8qk$h=^LekmdrF8Aj>*C|o^$$7 zGM#F&{21lEX7m)1J(Py^!;6Q=Qt?QCV`La$9=gYi?%EnE8y(9Iz9;H8D8zBUp7|q? z7^?U@BzR>z*p{l%{M-?dEd$TwI8_hU$;VZRMpe4V&{KP$noqhktyHp3dk(Vs4>N-C z*mb5FzTZzeUnWEPdOG2qtJvOLqO!VKVVBmXXP&ZOn2%bbl5sIv-L7}BuT z8#kx@pHHKXcH9J_nfQ%{cTQ-3i1n0qBe1DxHA$=Oq_+MlW+j-X!a*gN^QhpTBc{n<)QpHtc&?wHuo zkU^tuE$eo|G{9;$;u`NA5}V%M)Z!Oh7WonU!jNG*qQO5c_OX@*=M@@bY}19hRg8qa z94=C54)Kp-;+4)>TwmHYIyYj<0j-DL#=+ z5N1>A7%iDd!QVVkfZLo}B*L>>~Y0WAR@`c5iBJ(xBXJ zIQ@Tr^|5Bbvz9rY2e)IrGLHTVEb#Du9^KO5RNd@39Iao5Iscnut2q*8)0=LTMJ;w6 z2^eG*guW=KNcvkUx%r4lh^<4tT{Bm{nIZ{g?Z9k-*qC+dF-jmuM?4vwG9p}_4*Ii-vFK7KP-oB#&zd} zCrG+Vo!Q%S$!jJf=B!7=*7QpPS>pj!&xNdEA5xa7hZwv`^X_UixY26L1 zk#N^&zo0B4+6ZKqKhT>z@cX)mxtSf})w}`c#cpp>i%6ZiuP2P&aRE(hbtBj!c}y&U z*m4|3!;7nI0!*uIwa6eJx-PT_^m~$X)oU$9)(wCBQzKaX_e!dkp1kIlc`F1*G}yWt zx=$)v^f4kUAWW@VDZ>Nu|qLS zSfUGJs)IVW1mjW$RvjA2gxTc5xN(MIn}=Fod;*^ew_UTenu0Z*E)m_JP8f!N`aWia z%*VMx%`ndvEqOE)nq;ZWvKCaI8)Ab>ghMJvMhcM@glZhl!RX8B4|@R$v*zR+^OIsn z&_OL4j-@l0f%r7_uGYUHC2a~hL)jhCN6br@mhxXXeSgNi&RAa8znc2c$Mw3$Vz}FvwNjaVPjFeI`p#=+ zma(1DBrc&5I8})K8Q0RjVoL)ja&{16*+f<8urcu3Jjaotg*9AHwV?w5gBR-cVlkK^ zX)eF`b}8YHhr+#W;c1j<-CQ%9M zBaByefQNP|Jzug@lw7NxWdE#2Z|WjqzBk(Mc@vGcYV#xjv`uO(YL_sOwry*8vZ|K* zpi+`c<8V10L$L%+LE4Dj9oX_bJzq55i8S(wRL9lA#(rAFU0hB(t=YL`H*x~9X!)SF zIg4l~GH<4L&ob(Kx9JbRYzeq6?!gJ6f0_|>;(=HUk{u~M$aHv*FGPN~Qz(Z0Ja_0h z8!cMS|Ju%&TG{PH5w?Y5f3)3<~i zN7^FZmK?-pnKR~Rbz58C>f34`CbjTA8_d+2=#Hu8sqzffIKHK3cS;Y%O;ZSNbOS$$ z*xSY6%TB`JeKa~BiHZADesqIK_sLcHpfd4RQ>%4$h5LEezV|5~8CjfRz*~m$0MhNj z!`9Z~oRn*zuLb+u*zrIqx@IDqeztmR=EBWk&!0z6af>GX22b1SzM$X7lU@j++5mxw zjLq4bW5$EVS+mikkRpXW-}d#D1=o0Hv{;X5&Bx6wJ_+(+>*%+5igrWD(j%d*OYm<^^A^YLf5FU2OqMDzn&-&H4)1xxS5 zFYH>^S_hBr{p~485XO7I4PB-O_nUElgGoO4NnIFa&yA75c<>}K_`@wmA3`wB2d8J# zjTG6Gk=$q+mZQXJF9-9H)Si{gZgpYd+i75`Kb>iYdcwGLxkX1_jFjv~3eUuu&2-5^ zbz`vCMQ1cpQ0hUZB}9!j5k$#i?LoNCn#P!|HLU*wkJFxmc`mCvjbS3mJe|3LQc1u6 zj469QMh1mclol=v$HF6vLEXmHX5K(%nWH&&j77;oQYh-7Zn8IZ&6k6&dUt_Hnzkog zUY^#w2v?#iSAJvtC-*=pwvs3uve{X;4<4%{=3>z>BxDe`q(O7EL{GnzLB}om2-=GP{8%Y-N+ic)$mhpAYLI>gV zwd+2~$79BT#AFA^%kASmiXRxk`jk#bO$eQ?ld1G)3Z0vcWI!D(WNNdEpv zySo51*G_8I)v?h)u{@$Z?apo1RZC~Ya4Ob#c7!Q7f^840ix!~8iFjQ+@#Mm4K2{n5 ztj2m5gJuYoQ-iWPX8KiPedwT?8$dxPmwzQ`(JcW^$P|sPuFOa#FRC`X9{D0NF9um! z*6SkiAp8U}{z>zb?%EB|Q*Qtd3T0^F!B9bLX)eIh&4$d<`Qx7o;9cu1cKL<$CQhuH zFzX93Y%xuR-r$e!aV@wd>;B?U=C&^uA^uUs-TWLDy(F zGf&36)8XmH%AfHBpVGTL$2s6~nTG2?EJONYmrg`1)3h{SW{Fn^IcUZunt(!t{Hsj) z{O<>RYJ{{tL#8p;x@R%2S)|wSmoa?)vcNbyr%T#7Kk5b25~}9h?9HN_%_3UD%Y@V6 zu!|1yyhYMqvq$Q44V+t~)#Je2S|)0-3pAG>ce4WW0;raB8dY`y-dKi=_3SSAsWAS+QuN_%C5ME0kmCKj$YcE2ErL-t&qsm)x%=;B!&QAw;YRN&mew7zf*M-khNl1<_#JF8k z!!9}nGcuoEV%?TW?EfcLb2Z_aojj6|Q%4QBoU{+6|%A)<~D!EUc1w&TE6+0WQuFCrdC zSBwu$DFg8i^*50}=ku_CNEiQnq?lrZ{>4uu7IL9rdZ$i+9jO?JwTwoZhC^{?Xw$s_ z^OL8uKf&$8Iv7fKw%u?z9ogA^G53FgeIB2ll_>7a#_i460#GSR){=JZ*ocs1%E^Z) zgj|!=Z}m8HGRVGeB(78mD?_Cod}(=F(-OYMUpILecaB>$Q)mK&+D>%F1Y7@6Y%oHd zC;bILRP1XrYW$@(gVcC)LKq^)raKIqV;mB%Ll9$6a3L@nK}&0-HQ!4w(sx0YO)_DG zq*=-Bz?x@B_T_}tmg|PAbqGc7vpAxO0_K)5@LL&K>QxyD4p}sj|0s6Kbw>o7>yb4C zF*f%w&P-O6!F~U+&WcttAaltqr}sDnEu^$q6LdaNUl|&-J~Y66RxOnTu-kr*qJcJRZy1$|6lzHpk`h zt}tt1kDu&FJj@m>A{jJbMvl-%qo3g~v_J+yosMva3eI?EL%{ zT+w@=_H6=-l#JlNOCcKuACIW4C}`H~55CXdqwrbS+mu1ZgBdz5lH=NnyyVn}jg2=s z=qX&B;O;iW`Ajc2A9 zsANO#*g*Fj((j&Hw zlMGV7&pQ6=gIwGqLf2mesDULr*k9eVqf|W@!6X8>mNmP8N{dNr&_m=L1#KM9d=5CGEwID043AdGw7TquPbtVHJZu$$*En{8p}a7iDP=Fp zw}f!MMw%{7B=+=QXOd>^22fC}vr1yDi!9@{rNC~{78&*h3ya1b(_i5y-z?g7&mLko zLz;vre7<&;{zIHkO@^Ui;8Zf-;LlK3X6K((>}VwKWDG3J^p##=502F*Y&|13@wkpS zZjb33M{C*NQfe>$WAJdo?s1)mAJpHba*Eq}fUG|Q8!4}i|5FGy^zVes=`AOqE*EBs zd*cj!wvi8(VwR++|0kOi^_&@n=}_I;;gpdA{98g0(x1-3c)ql$1mFp;Z)Deyv95kU z`l!TcO2nbLlu2Ak=O~~FpoxgFB14%`%*nTFV}V-zrjA$Q%+!_^JCRknf5YZ@X(kYcendql99=U!0HJU*#}XsicKO%;OfQhNEI6Ry~XK)^5%{ zyLX=)7Y8bVqMGNGqpr?X7j{O*S8W*{s{7l1zJ2BV|2|j@?uep2dio^|N=g|P+e4$w z8fYW0S7SK&B}t86%gK2`I8teLps)dcS~P4!l2q21TcGA)Kdn+M;<=<#@s`8*ES_se z4aPZ0gSuti*l;JF^yISYw?ilP<&iNxAO<(9Ibs%Q-V;nKY($XAAQ23Vl~L@y1kM>8 zIWyh0;rn$yAkn|mr1cUjvSIsJ9tSqv1%pk}sL12j{GMMu_AlA!KfjqHenswyM(W8_ zVKq%Li+-W;X!7Y9nzCj;3umo`s}{#fECyBdA~t_VQ%Z91ACk*W=M>tvYtsOw%thzU zf4CdVt%9I#-HLyh7PD&A^VX9k3Sj)^KzMcKsiW1Ol%FQ>n61XOF2m~4k3uTk<(u(&64*YBFvWa}+c^v~MP&Rg$RmC- z_6ysp^XUR{o}$M#toElJp;H+U9#4nC&Y&oH^NZWB0P1h$!C?d|9_qcme3)tO4!dni zvSSW&IJyogYI>JFR?Nl`HvxP}9hH}xl*QwLOC8CEee*`a8_a)*{<3^;9t&Y=#u9Ro zRB=8$|MD*F`|}yHi;e-o^S~>Eas@yn^U)x@Ve_FX5FZ!U+R=`1n)IS+3kVEJ-NZfC z<M2ZgbE7@N5#fwW$>#E@OI{ zyNr(JFgx)lk^(UX(H&(Aq`` zDgwD^^doqJBWUvVZe^93(SkY5`e{XEQhc0tW#yY;4d0+D#k#%mar)Yep-f&<_nhVv zZs1gtuS;R}kqcy=q3JT&{NVSI<2r)+TW0ChFoO{JQcA(rsN7c04ITGWw_v(vFuN0& zPJZ6TWFQpD2(oc+?*=7abnEXmzVS@x#kldT@8$vhA$(l9+kvG`pRbl)udx0!2f^=% zu6U-RIe><3miqdg!gM=tA8H3K=p434SL!I$gaRCIrNrjT-{~LO0#Pk^S4$CnUgX7* zo+W+~-(R78I;IH@$h}5IFubJSS;k{$C@0}d4P{D2Nc5DBZIf*J*B@!5PdyQtK9oq`Vy($z9~b5f!&(GAzEWZGk4)An}VY*%Zs_;E5-M zao+Vyo16dlrJKu`YsDw%v#YKT5b(P9iKl7uDvv89oct?ihi`EZ)S+7@=$|{0j**FQ z;4`}4NF1w}`GD84Uaf)Lxax`acEkG-b)pzt#FLQUTwa}VKgZ8q!*A5sNuV32G}~Js z)~G~_J_=bP^SLU8V&HW)P2{W?#owyUCv3jK3eHG!0}Y5UNA&CMs*FcIf-_FT*Hx+> z-66|eVkw9qhoiw!z?{Q^0HlYo{GGTKdljRdkiK9)=!G_d)?Mda4;6!>O>tW1CJNf; zy+N|Y1#gBbUi7O@3Akm@wfX z{BoH?X=oQHBWplud6d&`(Uq6xdMT_gi9FW>@T|09$o|{xKX}F{Sk>b?OlhE%6_g-c z9C$cJEm-FH5xR>Nxu0r2;U2rrWmK$K;SqblFJ(G$74xB$r*cZsH`R_)B=Jp!8u!gm zO}El2p~6^*;rv3t0dsG38JB9X{)|}gB=FRNZfSLWH0KO|SQkgeCQIMxSBB-Fhr55? zknYsaER>Q8L2BoK--ngTiTJ^O4yIWS`?=KC3yZCl?EXK-=^4)MbBIdDJHhn0_mV|E z-BjHL_?rfBwH!=U*5bNkk!3v#tp>WxT?&fh{I$@~iyc1%L)yX*)gq|eJ!-t+mhF@I zGjq-o6hYQTQ>oLDSQIWIL(fVwuir`>U{(5@V6TyWwxRf+OIm`A7`K&5-Y2sc*nZFc zbg-(OgL0u3wAtFQLFi_#-|lJPD=cwQ=bQ4_V*8Eo!Xp)Mu@b6&RJ9Uq~kFuaJe@e{d~l zztxEn#iW$b^`v9<8JfrN~xsIOy5t830DpX2Ng5CQ$uM!yaf;UGQXJRJ0j z;lcOa9r5cc_A2Yms#L!iuu2*H*9Y3J8r&2$}tV~nu6^tblTywmwk!yVC#9c;$a0L%Wvt~wr#E3~qCfj)?T&BOk zsB87_gXZNZNXkCk{DP8WsawSUj&vvwqSoYzj2X3)wIgj_ z#T*vY-+OW5q1z#H*#v48|3J_f9s(#;S&uW8^E*n>x|p>oOV=e;D`S6gS^mSK>B3<1 z+j>lAYjo%xXi{!WTXjIe%uW!|FG*wGPY+1JA*-WJX>;M0pn07>AS#AJMDzjV2t;|D#CYXEG>qh!YRi8u`lf1V;*H%>8?3C7O75cRJOt&AKt zu^;pPie|NFS=7N_NdCf6uR<9br^O!8%J|h-bD-Z#v<(z@psozP>7m|)kSSO9O-;V> zTJrHNeFz`2tm0Q}_*w!}oWUO)d5i^Yb>Uf(?vbx9KnB=nU9g1`|9Mz;b<^D)?+RvG zFu~w$%b{Yj>_Hrd%X4$nhLQ%9{IaB55DNP7WbqbeyL%zSRu+k5Lc`%)Oi`E--bNT@ z^H}LFTAIqnvYrFUJ`oN#<0o0>nJ#toNGI_6AEE|}k%+j%=q#*0eS%Vw^n5I0b5?-^ z4yb6Mfq)J?KaIIcT*%oDe#BfQG8F;?a8wFC-wAxjSCU&miZkEVPh(FB!2eL7yb0Wp z-AVhu|D`k|gx?T1`pvQJf-uXm{XX;y3PuzGiVUSAvxA6ZI|QL}H(j&f* zlig-R6+4o{K7oF7LZ#HeK||XyEus9Zr$s<0cGlwh=ED;89fL@k2L=bfHZv14amQ}8 zeao(0#~>71Ao6tZe7Gh2xz9KAxjl6&7JB>U=vsh3Q^+RyBYD!_F-4~vGIguAKa<*G zOO$)XttXRQTC-i3E31zglBPX~Ys-w+C%+8{P5)LHf{pGu?T*F^`Mbw_m#G#Zb!U83 zMDO#0KC1sD16}}JW#{b>f=vko`Ot>cuQzWGiE}}w7RioHa?(v>Co@U&AK2sFUi(aH z7XdegG|~>T=fOB+6|YuzX%7qxoXgR)29cjMVAxVS9M#8IF!>)`HpOHUEGFtCCC(27 z${vj_lHPo9%FXLfo6oO2qS5kdaelBT`BX*;9jd(3k`}-pg?X&~oS;+bD>W;DzyiZc z5tc54IWkuG`0iiBd1DE-I89?}AR!jlJSy6!M&iFSLjqK1umyXc2yqOiws8!hmO&)0j1Qw56xV@Rg^>N^8eg&jzz?*amyK$>^P?!XxYa`TKZ~E)`nj!Gy`}aalVD zOb7ZGxJ};ZS#^#Z4#LyO{0kkZCN0h1e)<#<@mffLDAJLT;q_`r(9X7P;p7-!^E|7GukmQRwQ_tz)S!#ytZDLg9vEb6T5!fqtAschsH1aPcvajryu|@oV#TF!O{>$`|uu^!%2IA#ulL;*A}( ze4hQryTKosIrR z)A5-cSof4{C7V5R#=rpy3xPxHJ)f*OXmJkeGGLlLGGd7$!99Cd-W)El-ogvD#6;#D z7?njZM`fWNRigf_$X{MdHv60NcCm`vn6w>Vr_~}rZXY_QyO6GQ^fkK#d)5I1$YTz`0hT8hJ4TRm7`ByGFV>kzS;T&C_t z0aLOkRW4m!!~xrh;M=U=USmc#xs>p1WGANxi3>JMmdh)}(I+}jAWx%?e3RT&UY}GwSCnXdXW}5J`z29};-QUiuPAeYHD1MOVXNClsU}dRs zCa*qJ_4Kar1>2gfY?6OY74nK0&kH379i!(i2k%?5-5vG)y(?P}4LYm}Zg7bc<9ccd zS50tU_cLXDpUpOPb#RFbJ;Pu5uv?g_yL?(w^oHc7)KBDy-PV~py*ymAi5YF)q34o} z^gVR4JcdG;K7T(`ijes|GeLho-YN%pM2kLb76$FF#_GQG-Obzf-iV~M&vFnq@-{#b z+jJjs-PTX+M>Z&tD5R2cG8^|^ei89Q_(sK%mI41&C5tZ9OV^^~FHh&wq`Y63ubG)z z=i8T%!12F<3B4ljX{5qKJy=0#%$q!UXCfY*4x;E}NJgck0&v&t&1b~&cj%tNl0gdK zVc1jhp$N(KS+|vBbKt`43_dg(0aL==U2gww8_XV~N7?eSB`LLh5?FiIVG}>-v_w5u zK!Z#f^$vI4c3SM`AlJmKQVyJb0tls|4OF@i9Qy$?X0m@XbuQaRN}r9T9*KH(B0MiN zzp{`R_9|POp{o+R4I&Q{J*=#*dz!xJ{~@oBuY_%Fqr>Vt+}%Ap6p5s)WN7Eu_8&r4 zR?@8uEssb##r1pdfuYj~zakNU_x!agM(<7Q;c>{k#sz#HN-tTcpqQ&2Q_^Gl6*yw=o1`4Mk8H*#@DYhFTZWH ze%~EDz`PkQH{a*^*BCrr+>g@*bVdD6ztEbQyU_Rg_aVaJ3IS@mZuy$w#kNmTU4MwY zmOV^;9iBS(`U{0-@VAU5aJ|*Imwn6V&td!XHs%pcS0`P*P1Of0TZ(?$-=V3mznF2W zBnM;r&0}<5zfMhVA1R`kq!Z<-&-{@$Wyw9f1BUWMOXN`<7;=@ug%49oKolfF@a9jEME7DHNp$C)>tEp)gv;v zf`c2fSf(j9v?~t@eIG`e6tE^^aCYe<3Hh&-eq^@6dQ5(*+m%I;*5RP8I-3t%d*Zl; zrfL4;FEV68ZF88>vU$kVE4kYoY)h$$$2iKo_bA&v8bw-GbYRwUhFo%9Q~B?3I1ros zUV2cJ2owRsO_bnf{IxL;RZ3Ew$nHVf4o5ld>HWhj%Ksn!y^I7m*4tK&CE{k_7USkb@SuVt-IB;1f5%xubuto&u12;5p2cg*2ewL_&OXqH7vNl_Nl0u z2=vEB8D)qF^+5{Qa@f=+GC{y6LPU0pbq)QI(EwUj>s=2kS~_Q7D_3)NG66Op*EIq) zq6|DCp@mge>s{3mQdBndSwHXy!AC4Q! ztIe-{uRD)lB0}=mAB_F*(yy5Sxtk(!NJ(;oM_~^AczCdX;Ss!@2saVj4Q2VDHh8-b zHM=dnUeWq9q?*VB9a>uy8_Ou~)t|hPZx|)EKgZ?@NOet?nAW;|UX`ux7KQ#vM`-&d zaY{BNx5BQ{By zg$UP(=@;G}EM|}&rJO^DtkFM49Bg|4K1t2CxLpt#*|-O*U>l0B$;rA-zj&(!nYrg} zbg+HAS-bpDkw=54WsRCd+?yZ1zR^^;k@-eLdhK?>JmUvF(_x|qm>idK_n)}D@rqO(%C*kB>WapG@A|r9 zA`=SFl9|tgngitb@lTfiFfJU#cpfuItEd?%%9VyL*7_gzEO$9?p3gjEt1(7T4cyy+ zs5tz5V)Y#v$x1muYp@`LY#5o% z@93l?Q9L``ZwAERsonW)oU%5bBT37YV4#M_xbBH!Wj%9lw?YRc{FDEXM62q}vU{{I zBR;ngvH4qv4|KWC7oOcf+EEEafC8R+8ofTVsVeYsd%u!noN$Z5pkvHIpu6A*HhWw3 zI*L_&OA+{ZLvgVFL%HY2PdNCTjNJrMG^i7QLG17OC)`_^x3uX}mAuI~XUS|;0PcU=?jE-{^`jg&Rej0(NbL{F$%$hV25CHxl> zfl$};UiOm!AAI6}RHW7zIt8pFOzJ31T)oPI8yGs-^-}H#D4xXsC`pkiY6Xo!T}13o zKdz01U5YCq&kLguQ8w6KJ0vD7g^?d|Dem8=cG02g(@ki>`ezB5Aot?A5J{R;|&Gpp6e9tjrFla4R2gIX{4yC zZ$N_l5Hxi}Hy6JtowUcd>fKzc_H3H;p)`R++-V)DyvKtxg7NtcxH762z+v?XBb@ou zAknivy6GX5$`P z*#F8xgUmO7RlTC+LJ$(rWLd@fEjd)GH@;f2D7`|xD2^&l%LEqGoy?@QMzcXr#24=_ zQkOU^{CyiwY3P?V#CY3Tr}(cF1dXHDNlCZxyMgdnd>1xMbMJ5V!fGw`XB0+o_g7Bd zJjbI_)O-)giuu_wBEh97mAayZ0BU|2YQ8mU{yu6x z?$!Bkx>27UGOZ;Ej9%q#{B0G)9o9IvcA#5gm>Zj9hpMz+Y?NEyx#So0RZKE33gJB| zKl{1hFKkRQex1lWe-$xI)Z?z)2nYNGBszCPzLQ>{$AhCgujI?FDMGu9;cWvjM^e(e zzGy|O!q0HAbBl2U?vj&La}S0um{yVY!ui_mw~c=jdpMoHV$ikUjK0&(1>57 z6`Us5FN>i6aU1Z+&~+&^;u$#gD6EkR!hk7{0Zj^C*gz~&f#}yT$Oq25!}s2fpqg%zX>n)M2~BZw_e$UAtO$oXfo!qLYFWojJRc@Xf__y1aOQ9+i#~MGK3KN{ z+rh-Vn?8p$tyZq9k=6897xcScW`q7_0kdj`#oLPXt#uJOq>mvCe>mzYoooK6=Yj~w{%>i+@i>9hWA3+_y14Cn8yKiFH~J*z@VvhooqzN*SHdH|aN@yE zjB$uo=*`*a*T)r#>$B}Gok%O8oK7p%nKWvwZ|c=FSR%5LU4y!@dSkO^qqOQHTyfH_ z>i(mk*g4U(^czDPg&FFhcTc$&)y}OK6BEpTBSwuMQ%t*oaMImrx7RM zyU_w3egX{;CRH^3wvp(~FN$S@%KjQ-^{T?{&Ht?&z4Wdn?G`8)3R zQX6sQ^;blme`RIrUne<3VG~CvHb#IeWqyOJYkJ`bzd5F!TC6TOGc7Vdq~jXoJOOSU zsuAks6u`95jOM_hj5yEP_R#%fjL#=($^16p*YagP8XQtKHpz2;jUd3uLikDx*7BeU z0#O-3+M3#*ys%t;AWwaG)@0O==-XN1%3k}*g^OnQ9gCdSK7`&vc-G7bDNpbR9 zD*%fPx;K`U>&iHg31hYODZQKl%uR`rcEWb`4Y{g%(;LuX%sZN(c!JPHIhd5Ys+iKk zWHNuziFu?pCrj4@-t&s~oSZMdlUSo4C0^tGvO>P%g3(2?`~-U%T@3=$ok!(TG1Bps zsoxJE`Yl!Zdnba8;pi1X#eASW39VMo(^ytMMe{3rC-6Gari(!{nd?n##4FUqbzl0n z<7@2;al0k%`Gp4kzW7<1vb7!eHg%_pe^xQOUz1bC&7+&)3+z-@IN9`HY^5a40qj}L zOB#fK0IF`C0Icob$C`_NDLF!K6_sOWAA*+~kE5!Z5PJuO--Y|)B~t$IoW`=NEms`{ zl{5X29;sJ;o`NDvJ6(5@48A5A%zH~=MMzDGl5e(Qjy7zj+Dx{&11pM5Fj)p_BVpms z>!sr*`E}UVSG!b}Dv^Nlv4U2S05F$=+tQUhk!h+4%rzR&_vVQTIFil*;w#Igs7HXr z`R7fkCTBP=LigMs~3O!o4?kYf&r{(=cDs;GXrV`;|^DNIhkg^R`VnSu59U16o#18(-*JdYb;AN5 zfq8It{i(@j1>dRTJ?N!el4Ub)Zi8|pcB?r&$z@INZ$BrQP3@@~7uk~DzaneltD>X? zEW5Zhf|N(Py-!lcV^)p}D$+9HB82ne?(-|EB5B^ukkL6~hYe*xM*jdzEcvTwQYvu? z!h%J{eS<&R_T7bET1A`~*x6s207=!09ns$=f&-YgSr;CU5%USjX=a~liZtH}PGb&T zpf$tmi5{_z!gyyYVh*LDH$7u*fq%B`f?~e)!QPdM9(5L6Rd<435$;@ZyTcuh1_O=` z;UOW=4VC~eUpaJ1eA#;&2o$u)TD|LX`w>TQO|SAlm!Pa8p}Y4NsP~^Ca(!BTN_`uC zNk@J*Yh@K?lA&6c%Ync|jCX}#Ir3%MJID*-dua&h8e>k?e@oG<2_m2@d`VqE9D7K+ z+nG&(jy=ONbQ`k!{N;K>Qka~kATah&a>$dMV;W=TedzYfwXlM4BIb;2?4kRvf0&=B z3{W=aP=41x&aZ&BKoxuDcIcLH_nG-RD1jj9=|AE-bPKopOm!WU?$;|LY)V()iUE@p zl28T0xr%P&MixB+X1O$|77tGN5j zxBHBH{g&ewA}QPlDENmt(}xYicuREs_QUT(PB@gR;FGpsCH62h=5S`{iQxJz((faa zBp}U8mryk|!Q-Q=3_2x8O79!OKA5YtWS2@x+gw;tu)0MG;31Ln4!(Lj+5q1X)i^p9saxpJ5ORm3O%_l0E)WL79?`0j7amB`+SPz`R3=X6;CM=|T z*^l(Hej}X=L^>XSf}U%D>gp;`qGEx><9RCsSRji3cerFZ$x$!>i|H-$q_+au4F6AP z_`ex`Qfqk`6GWP(?l|_O#$QU?GAPlDIWBbxDZwxvc$u0IN%&6!@~ANqH<<-5gty)# z2r+aPmJwRE3UUM{&L@-u8^-*Sds|6qgA{tDK@Ia9#%{YJe^$&+$oZ^krearX9_fdcw~#xun{Ayz0n}!M^en zOGe2XI3};U_FOL-2^R{JXm{yWsJk6CRXdHi(ZyLFV>BiC%mGU_Vc@(I6QPd`Y(KGp zWWn=uO9rW0v5(Mk-Vtr;kf zSNHuw`(o-4)#a2T^h}jcWytABih@Q$U8W8}!@?7M-rr|wxo&=AAg!Mzu@(JsC_7TQ zclR?vVrJRItQLz*KGz3OoxR2qr&joOSFouy&xh1beVBzk@H6>FECP@l7ES2A$IG7^V`8S3avH>Lttq9XLBFaTg9e_9`^sWug*6D7my}6v%wPaIye& zK#RZh?cx0SC+tL1%Y%h(D9(3|c#uaP>IsXd%Vmqu6t}DV0?TU)G)K$4)XNKlJs04U zt7dnqE{Cw9Z{Vxgh_2L4|By2lq>Wq5vA9S>cw(o`nZP0P)vji%+$cI|ere(y@GrTOCFx}2hF^Mf3q zJ>3ZzJC&Gyb+tV7hIhiGt*)^yssTBbV^V;W6sdAI&B{1AL>vbhuuJ_vjF}-?rkcuW z0?V>6m&Fo<+Z!~_W#x`%ZA?u+<=Yx;DQq1g5dDCWVHD?&noh)pEZ9K3G#}>xdne=$ z)FI|rDRcT<{D3h>sVQc9==I5TXokN)Z#MN|Zp&o#*d}%tF2E~^eKh_IK!9D_!cIS( zphUCujbDT}yViw+wUIY(Aws>$DrJ1_S1NYfbkZpD7+#QbhzMqt?gHq*5l9nfg?SsG?>So2k&p)ULu|xhWZlZ(2efou)z`Vkz{= z*&CK5y1}%En&l2JUGl{FnBc|wJQsiy4*w{OmnT=@*ll}{r=IG9?8SfI0)auK4z)LQg6 z<$KnS^yH73CVTZ;B+tm;l@ugH;K&b=AniOYc26UXG?+SUHOd@deZDY&W-qgfro8A# z$WPrw)!Zc_3}2S|anXjxGE0e^Q!P#uR2Qpqi5kf+I*Odd9J)9x0~(Ow^+_lQBS`J| zZu!7x3X^hbl89yY(2{Pch|4J5Lao7NeDZ7EYYDNL@<+P|hI`UIxxuAq28)9Wyy@u? zLqA2bFJ<~97pl|6rP6pmXF9#|0x0G=WQX^FiC2v zXf5g_{<>jyvpMWeAOjhdbmVKG%ZV+Cxfi=VPVvQNW{ttBNiR0mn>xAKlsz#=tjs(8 z0-5_uEkL*(EnB7&ohfMQ#_UU-Qf||Qqt*@%3~;&ELRlGSL847_Lp?MMOBci~??=}h zD~M8hQ^uqD;K~eEEpx+hEHQ|x8lgt+f{1og;xIKh$GV}Ka>P2H?9jBhs zVyr+$26&#Bpf2m?hT$ZC-R7h}XB2ZU{u(TP&UvBSITF@TXQDTC85TZ21oN!H<@2q< z<@2aP-@wSwy!wD6;7w?o>v%Yv$mlJYFAC^~IS!qP-ecVftirtV&%Jyuzcr8Y&HQtx z158m=B`@q0pS5JRp zIJN&6>;^W>87p?y=DD^j(UlrREtY%?*qQatv7fqoh7Y8MhAkb=1Ia7f=7op9IC7F) zqYZT@j-_I~iKF}GIJa`uoju7Ol#I1@o;@i(x|EqCUqOn>*6Gv#jY|i5-#OPk<&;vg z8l`5x{z@f=Mg~(|+p-h**7+g2G_w*}JJ$u_ajq4JWko*8dSX9lB*s}oWRS6iyx*`Ul=#Dc3A&!j#4gozF;1%1)BY8W_^o#UcJtO@r(xj z%>k}hM`{jRY5=G|;)@m)62{KCR&P2|rM~7!K+8^xG!PC4Y`LibMVO;fb8|p3H%QbM z4Mj}%<<#%>HaiPwjrzmkaODL)GaB**LblwZga!i9kh5ToNBzysK4-zKL4&?<*wThT z{n3D*1|nXcVxA;WpU)fBvLiYg=nA_gugz${7mm=NH{f*^kRVEKH_LprPyL~AGY$E@ zVQ4`#=*S=UXs|gPpaE|Hub%vV?64pzX$mOjhKu@r{;=u3991*X=c{c zK!c&M4+;u|wCtP@RRG-hnLz=Oh%Gk{&|t*dO!0t8iUh;Xf&rZdqyAht=%s++or zd$s#*?#tB6-Jc_r5F!&6=BkAmzcp|$QiQh3#0n;^WYQWY`j`}E(s~per#rPnM7vaE z%G;Up4yGiT(#4cCQ@WXQ6;t|{a*Qd1Oc`d%ai*MP$|oZWv&lBzQL~72dj8X)y zte8snQJWy6b1hyD{OE9Ds zLzbee4qeO8rK8J(u6itCIhN1>E_DUC)K%cp8o{MCfy?Fvm(33@DS$N$g3BHPmpy{% zqL{9EbS-f>){SlexDlX6HjTCbY#nV8oNWS8$mY>4lERo0yNTFrTeoc&igrN8qFq># zJy6xXf=C(LH@bBjJ`apuvR@Dm@{`=i72@HJ_z?~h9CmV;;_xWKo-4V#m&1Mz2ROW% z!y%q#gu730cnyc|(PA@gyc`FOy5JZL^XVm=-=%X`H1J!U>0HyUN=o*lOB@Ah9oO6MV$6s9jh} zoQvCpg`{XntFV$3*R~1O#8ufYcu2|8HbEw(b*(}pDO=ViEGFeu?ZOIDp|=WQ;`X!) zm85cEyWl5P6>UNlSy109cuDo*c3}~zSO(-L^ zwe3O;S-PTKV5DwktFW3Z^Rx+WqOWQfmJ?57s}LgftJ{P%WceDr2x@3*6`IJ3W$nTe zva+OI(8#J4ZGu7?z3qaXtoF4FPO@fIn@~@h{O!Ur;`O!(HsbTO2@c}-w+VG5P}(k3 zkYE6{sfB=oqa=v;4&mIrLo{>mu-jN158=H-(7Jc{dC8P}!uEl_V*~wpCX?O7-^ir!tl}^Nw}HGsn_3&^gj)ow#Q-nDIM+x!}m0{fB0r z*HmNJm47lmhul!``dQ>Ud91gmvu8NBik^Gsf5B4((0!r>5S-Df^EhlhmA$K_xcKJYP?LXYWW?YJ30A z#5DsWyyxeU8_J%=XVNpYci`ATe$G0FT(j%!zI@US&nn+sNIJ8*C?M&1mtleA(ItW}a=}M89dI=K^=Lvqm*Et1$p}iJkDwwRp~Xhw=|RW}0`J zvy$0mon32(t{ECm_3cXZ!!C?>x*b_FP47_A_Wk+Mb4FWmhxC?thfkzZ{XP9h3yU>I0QA=(^PI}rRd8N2t1ob}?J> z3q}#z9P&k7lb7KXRRvP)T-oP~ghRF*u|j~)7gRGd9gX-x&1z;SMm^h+>I;(^WDZ2U zuE{Gv8uUhjB~#XwG!XHHp@Pj(Ejvfhs4p0heO|9OsAiVzXnQ_DLy_ii%|!?l$_{zM zrBlCKz!nLGodt_C8uB;$N~X-KG!hJlU6WUkG#F|21D0^auVq&bG#vFq<$Y0K@uYPR z4f~=YTaNglV&Q<#S@2;)m><{t=mSac*#;rit zN_4FP7i$C;YXX<*1()gv7oKQIN@z3)+jGDXL4J4Ij7L-~N~pGObgdw4;HOZHZDRYD z%`pzQak!nsw{f_O!#y1C?4{&&h!^=2)JBNok?BMVn940yJ;xNVGQ4YH~ypqGK zIPBwafWxaf9O7_s3FeER-u6uRkaBkDPDl*P_7a@ktwOhGo#XCJWDF8 z!4sBpJD&bjENm545ceWHOR8LqXEaqy@XTmIZJS^x)r;_ys%9ykWG!^znbD#;JfB*; z49}sK=&izXQo9&WaF#B?v!OZ91Ih zCqAg-el=;pQ=V0L$|K8o%CkDhUAiE?0#A7wtW%y_#7U<-Z6m|O1O1r;o`pi|T+eq* zL@+z$re-s!X_9|!s_$5LVhHAmg3}Q5G-fuLGp8_0Uuw8}po=C3j}EPPtNfjb-rk*w z;nZNxnhamoRZh-mJqt#^%o?D0Qes=KRu`9UnCtwX?Of9yY;#nC5ns!;MT&-e%t|DM zq9MGdC{|q}5p5QWItDb5y*z3JgO!LPCoR|Qn9R}+|6Mn zhYL8YAu4=pGL;n0z^-rxc7_T^ISmqZGq*X2W(XCo`YlI~WpNGZQMKr?L(S5oDbR7* zuAP&4*IRMPWlEal#j-#H^sFW_B;Hk zJ^e$&sE~dxr(+SjUyl z&XGZ!{ts|o4RQDyX*e-xsjcry!N#=LezLFkQu7vgNI~LArQX`m0XxBS6o|~(&@eqv zZes8nTR*P_E;Ea^XDfx?Vkph@b@F@M%538b)0y9>$#%Usw@8FEv4O#S1iCl-O_ulP zg=YdcOxt^XCy!*_@7jxDCnu-x{XDk>EkfZE`6SwoDKANBI zj@nTf6(|=8J0?gm0pJn=lt=(dDS$F%r?E4sq?I%qRXdrnE6HlhHlbAZ0=CE4qYIr{ zl3m|vLj$2&(w5W~BSK?eTuZ7kjf|ZgN6mRLo4mr<-MvFVC@t!1&xdf=Y zjHXoOxHIj1{@zk(sBt}sm&8iUsP__V4MyG=D@DQV!N#2=shq6`BzF<6 ztyH1%d!T*y5wn3ZHt;@zEkw9nd;nmB^dP`8dWIMekW2&584r?ivwhU~2sFZKAB7Sh zB3q3|AShGGGB*T1W(8m=#z#^A@0DdMjE`Y8SWZ+@MJdM;s1e$2HNHylReTN8XejLH zg*5~-7RRe52|F_5vn0MC7f2R$OAu(TF@BkoxgR{%Y09SO_@y$djFoN}c_Du7ZqQ9#*HRwuob#XtM2~YI{N^Ul!e)^_O?utoEV(XGs=0(z>;elgigDK?DDJ&sz z>{#zLZ@td&UZ4&cvmsO3!q*KKo$lIZBU_Kosc*)d>LLL@GAJR}P;&%8IHH)fEuNIa zT8cTgoaDzfT#{Z2M}w-2rrexvQLT1+(8#D#&R5+kH|LfSq9?_Sx)?2Cw2aYmMk^St zWVDLO3m9F}@2?U#0lXS+qCu0x8`@g0hS)epf|s_YOeil#}b1>DQ>MYIMZh2cY?Jt_suvjtOt2%GOxV@yt^|sT03JTnXf+E z7%kfaBw<;fLlcU*jyZt7OSW&_cHl_cC9Umm+j4*&8yV_;>w!mZ-?M91Yt5FE$It*{ z|Iylb?Z9AdV{LL|xHgSkk+o(QZW$aL7+g2&7Vx~h!el_YDs_!DMA&mx-J&bL%~YkL zR#h^-5m_QBM8fR{5$m{C6~&qs2%i=R*R3L!FsY15<;XWGxp7*M7BEReJuA`@Ce<=& zDU<4I2qO(>x=32Zq(&yK#)EdLiAi2$Fcmjxn?%*r$)ea%T?H)uG?yUQ779XXJ^XxJ zeTC*11EFA;!w82_4x2e#%i%f>H*mO-!xmCoswo0dX$wCZs>GcKk#XlCN_g@knQB}p zYY{Yo$V+hYQL4~T3|h5jq!xD_s#-ATz_j3p(K~9+IZ<$I$L$4)i(@-P0@KacbTBG6d zCU^+-$X<>GmI{ZB!*SaVn=op7*?5OlQYX$rX*+6mNjuANF`F9O#tqIJy<@x%u_9Qd z4_L{so|1fMY@0Eh7g}8IfY9S+dKanBDc!N!ZXKjAi>$OJz1|B?12fKe7# zfAd}QeY>08%?X4nKp=nt_Dps`kr1*ZT)}X7)Fs^{yCfPCnoY2_zyBZczNH?uY8AZi zyJ~IgRd1`3M4*Q~Y_;}MhPGOJng6|+Z?6y_U|?syZ@xD(Z{Ezjd2_vYaL)Hb&g?;w zLjjzHJZ!~r7s1P;gwtR~77cj#6C%8PWcX7ed}cPyt|PPZrvTBOAxJeHEBAJ!8lO1) zm?KcebADMwuHdPKkS1@C=(xx@sorF7k?8oyczk+SpzN+k`y4#N+-xjfgoIwRO0|c* zPI$>C43xqoex~HU09C(65++TyRcSKl`2$S7W2-_{fCW5SpwdBelix&Pq<`#Gl-%?ML7 zqSJDOsj{@*nBB@qVG5+`-tN}!&g6o&j@I4ZuRn75-!pOb4W_@jaGYr)=>+6;`)U9hc7TiZA zhb@_Yw>M{=YmX^|O#Ji)h>(}QbaF7b9d@YQIOd^t>@6j=rQr=#D*<0v@%#K!k5G=H z(bCDC9rGYd5L3K<4}~#VE0IfzOUB{kOtn*4r3&A(R_r(m<0@bY)yCrzpfZ6gHiK>= zp~9tpgWrmP5Y;KW^4$g8E#z(ycS{L1aA;Ius-@xJi$~Q7-xLw*%qZUuL2YKLmQn~s zG`$G=njLsm-fpgGOl}~|DfF0$Z*Cl=49U$3b`Qi9R*2IeREUQ9h>IcKxZMfG(o3e! z;JsOono(QA=0Wv}_)hTw)snSSMtHBTx2M-aI=eS>?Sm;LabjPAcU>&~8EC!Sf?1dg z^Ch-kq?Jd%<6IH6Ij){~vb(RRHEtbUa5d$=qt>VtNHTjJ+i12f1(CT*b4MH9 z(6DSnZ%1c(_r(-e;vsnUA&D@8ZZi)Jc+kCZYtu&9u-Cj%(4bZtj#datHgo|l9c_4V zOw0o(XVYw9!w8BNSnv^!GoLZ#XV97-$ABc|MQKbNd1{u2IIQiAwZ`#`j-wgViTBjP z#HQCFmYPHX%~)I8n8}>tie-le%~4IJH+KTt=$vtAaQ+=*pe6Dn!a@GJD2M@dz*&*9 zs&Tmu!Va}cH#wVoEgX5H^DsH0W<8!2Z4mxwD|E9C9bZ6;sOhs(a!1=?$eh{qY7;Ai z(+@)stNa?LjFEb+JamlI>@P#C!wyL+kAB0;%J}qyxCtMJfSt zr&a|50kyi?A5_Dks%kS`7i!2~?XzdmNe%lw)plS$ICsV^(Tv^lWkj$#r6Ra-4eY6r2hDz7CQa*W|XiPFDmy{YaN@f}rM!00PY7kXe+a(T?U&%Mo zC?7s;{ER^!)tr2hvyiIAFkf{{q3TqcH=R1mscRO_UDdf%J&vmLsLBoQsy^xnQniYb zYU&PA$0F)Jo~je6T1(Ys=1SRIrBJnrs_UtGB2`bLYLu$YREbl^W^=O)12YWPQa%Xv z1rjMTEBlM2Vh}yYdEsrGzrTnSOH)z#AbEQmmqSN(Y&X ztG@+>d3@*3DR%zy#m=9QOjNDvfR1am;MQ%DS%fdvs#3emHg3`?9UIZUzyh4AdpB82 zzEZo+e3^;4&dvt;#~r~Eaw*Jw$H|w0J6^dQH>T7p2)lyt$nLASu@5rPq9yDwk=?9x9g}K_oy# znlm&ASdd-!U%!o~bWh@5+3~Pf@kwAenn)VK4F?8SO>hBeVPDP5K}-x%=fz z0Up38Hr&n4hbT|+C^gbkGW$M$up>$4z=v0?53k7VHF+R0H99ph)rH%uuglT0fk+vo z^ae(7q~^#vD~lc%osyX1K?mo^b0JJ@INU#B6m8xh({y#kVeYf6qX+nX{rdH5Yei6M zTKod3$k9HXim~vZ7mxe5cZ1bWr**?7?WS^!0Qcvn*|iu_?*b zOlRxp>fX@QP}AAjeO7$T0%oBlU|RTb39~SVSVG1$1YsK5j$#gye^BwmW2}aQtJ0Dk zgJVsgwHrKKIL|)vs3Puxu_lq445!qYjVV(0=_r`fbmA^6pNMeLZTZpU&Cy?I6$JOC zyZdssYICOGSsT|H)N5C7X(mxi8#&bc)^3<7^o$>^S(bbKA#+31Dxm<#6lr(Gd+UxK zWhm~*EFIaYxDWbj1=JwoqwB6W8Y~#6MUZuUT-8TWHuORZmztx;IaO)3B6Vl#eOglUR@tuLMgku@}&B5^Gd>+9?_`+7PBd2Kvg)K*6FaurA&TjHLJM%s1z{x?11?>rWLBMagUkD|NA0W7IaT zUc0JpeI07;-r5=Oji;IxDgr4Um4G(D-zuyfd(vt_iN(iGZKST4qPsJMtdAp!91yTE z*27OUCaoDcwQ|*gp8-9Ajdr3ome`i08(Kv#p49}wydeqm2ine4NfsaiR>CQ*{8_N> z+Qv2O>(;DqUVrM^x@L%1oD;CFv1ToX^5P1-lFpuNG?Ti>h_p}2nNyCKQjWG_aQI2+ z7&luTK!Y@y)RykHv&mMYx7(U&i!(3wwT!R;z8X-WVRZ zwD)#{Yw4>$F}1QlW-U7w1~{^d*dd?|N(ucVN%?X}ytg#g*V~R^;@IYzZs^%tw|4hH zGjU`ON>yV;0JZC7vf*>Q!%k_}9hO+AnY2!pVWZY<1ZYA(c8sCQ6{J>a{D&GW79M(lQGiEMi$H6RA^w8HBpqu#lZw;VNgV{D-o9i(P3xIm-Dh>i z+cw8n=LkjdhPElAn;l7wCV9{)d*YqE={28;bkN;h3Qdp zVLHqn%V6W+E!T=w1Ovmic+Y$uHs9(ICLb7TyW8S!?CMr12eI={q9@Y%WzdTjmW>|? zG~XhH0A9vlOjO-e8|zEPmmCZ2vqz$mRJ7DkBe2iQ8CQyP-qIMg0gkBK5GY%JEO?AI zcIlSh#A8Ws#5gzV(Yn^o?qs}7uq}(sRB}kR&T&q_#r6H<>sj`qNizq#wDko67m?|ey zWeKGWkn9T}#8toDM+)=1`W=ehbeqYGWe5CqPv45^sFFK>wewq~fBMyA z2dO6Z^1Dg@Wbhsk-b3I?_Q!;|g>ilIwy&RcHg~_t-E+A6zufI7+}kd^^M!Yz@GchK zrNX;RcvlGTap657yzdF`N#Q*uyzdL|8S*0{Jxhp`$6uclq0bX}^%~O&C0!PiY=qRs zBm){4Uy)NHEs{*ss*wECDtiQW*CbV664DI{ZMOwx#1ge!hFvP4=1Y2>-g36g`( zsF9q+QMyFJQ|oJaTFzNDl8d+|*GPH99gj(FlHbVV6iCEaLTV*~M?UlA)ysfZg+;}A z%OoNfl@xHRN~T!&`zK%X({!Eo9Z*>qm*@7OaqRGZqLVOd+(g(~eh^cU+6h~Em*-lxlSTfY94Km-b+rv(tRnIp$b!vx@=x$GCDQm9h>t6!s3;^n^;7eb! zPMr|aiv^i1^|G_@JiDgov>ZaW^OdjZ(slwUlI^&_7|k0P+#PkUa7ruk@VpSkG>ZWC zN?bgew#B$7={)B-jgydB`;+PRjc8w#eueZc*Z7U<;)0ldd7` zI`|gN!Jc2OnMhq!}5IIpCDIyqw-Avr`Bx$#2&~utJci&vkaa#zxg>abhak-Nu zCRp$jWIT+P#Hr}3|BdJblE;J?SI7!Zv zOx3N^4^*JhgZ%P9WvfxvKd;p+yP(xp)<3`1Ue>>$)d6pLPzBP1K&aK^VQ|;TkAT~# zJPPhw^)YZy(w+pjNq>gmDIw25#6$W$d)Xr-TDYQ6>Mz{K9wmbbFRr*gMj%0rJwb*B z6TX;_Jw=8RzNjbRN%+yibG}Q0DttN}7`T7iwpN`z1JQ$k4P`$dEp%H!2e#Z(=#L=R zQ;lcAJ8{I`dP4VU3$FOi`ZBNk$>k{12?f-^A7ui9RR%wqO8z-@87N$?!e z{1x*hq!xPvkPIWq*qb7M2j)K^lYbuj32Cvn=e0`4$MNfpF$cZGfM1m-2F6~!XC1H4}g_qxv7A>`&-=bA2xQ>1tgnx*a zUDV1mBQ>Oa7;S4-ZrScuz&msMPORSF^UE;&@sEIx8uPM06Etvb!y}Z7p{;$wJ9fA9 z36O9)L3gW+u0vsjF=BC|udxFJSrMf3R}x*?qOMqqXW#7^dvXrE5_S?KxKkFKVyDba zZKAh>$mmroJ7xBmys42rE~j{4BfDJ&COFifush`4EoyryyHnn@b|^vH*Rs2C;W$r& zgujEV<5^j-re`6oYY2IfXCS`@-nB$|TV~J8(UZy|Cqct`QI0mPXp;Jy_Oc(#gVD8# zwXt>VC3q@M6erflHn5lF!NkUBQ=%zx@~qe?>=hZ;%lYTXsnBm{rMVdbW zY3@PN{5f5gdkOoCMVgP(f%g&i38zk?IaSF0qL6GvArD|7T?&jutx(3#tTKKk%J@&2 zeJ)48S{C^#6z-py!u=~PLfz03$y=@DBTyBm0N+K@ExS*`3mNB z4Uw)?*o6x2rigI@&CEwy0RAEo$VZ8E;Kd@4j}g%sFhXG9B_fcI5YbsMK49RbJTTG< zJoa)WRYO-QRw4GVtCRt&5Ld%fst`Mrf$SRkmV#v%NSEPS{vK_Mv`J|aUZ9wV@Ld~+P3$Ytgj0W{b^w= z(Hrks6-)MJ?;F$|TUssgM0Za-($OPQTY8MCba$V*CDy}@OgVGmoC0L21yOTs8Ccic zvlMkMKDLCm!6T;PYN$;^;Afp5ze=8PY^f$Xy4q^G&OY(jWAhqVeC+YDIjDF;{rF=` zqoXSs?-6IDju8u7slZD=OOHMJ+Mf8fj_$tXF_uBBmKdqVsCOq4$#}1^wI`m4_qMh# zJhoJm@%Wi|#%tDLqGvsiMfd)wiBPMJ8%v=&ajD$V%ELEoZHx6D{=UmGsk~1kae6LO z;_JfxfUnv})hH^J3i(y+I;a3Y=*X@s&Fic7_;f*g&Fc?@y+*o0hEZ2Q7K>4RK3~vG z^DosK@>Ef)^Qgg)H>~B5oXj-w?yC z3_cMcq`(VR@ET1M5`{7h0MRp(Qc zA4pOIcpwSyW`?P{h^i-uyEX2#qA9fW$rY!A;H%p4N{h2U4_p^_-Qa3UL4UqPiU1ZQ zW~D?@G+Eb6FP8CA{kZWHP}L45=blES=`-Z=Su-oRJBPc+ad#ef7jW0hT|ak&+^yzr zh`S59dpvg+FOh4OPOs(9%OG=&P-mWjr-vkB;;|yxh6j!mJDwm?9W|1JXnA;!NO$7V zA&I({N<@|nH(u>A^Os7BEZGY1B$B-lR~j6Ab%N`OC&hS_$mz!`%AI_k)qJ7S~`NX(l&qVME_eTnnOdUFCBo7M~+wby92`k~bL<%arP^zf=d`8Oly zR2;St3nC3o>((E66osT#oipq3Nv*08DFJNlIdcvVTf3pDscsDix6UCqbFcCU(Q;m` zf%ym}@!qVt%SV+6$z<&gTau-YX|v= z-#Y4nM?l0 zifjlkfse;ClIk?7&Yh4M>fT}E*z6NN4 zE(Xvgcmz>^)@;&tSGoaIV@s`ri7Flnn*^XM#C^aO@VE-kHLl*I547uS&2sCAT^@Xh zL2|9uxjP*L?GTuRz`pX~>^oH^8y9uqsYnkxcwS6_FiYFjsiQJM-0#U1Q8^=2rD6DU zeSwZ7{aEoI42K&%)&7MCe@JuGbzhFNjhdz48(c_mpwkpbTSDDk;ts=6aOE|}P@)Bg z{$z2b5&X2^;0VZM+}u`W@`~eTRzA7KO;Xn>2 z(yG1Qs=)X|6|MBpMH?{;O&h_&5001`l~Y5l+6f@Xe5}wF&lRm*hZD5}M?`LvR--jw zSoW<43bO}5rhVR#lgmEcpQYc-#?4r9%3J3mi$=}@FtN%bXCPwpQMwrkId=?EI>f}@ z-rd<&A4@jC3^8d(Q)Sk(D+AAoX{IIT{MyDYa44xAt{%2k1M6OW(@5hHv*C?t@VZ^igUkO2pxT@ zNvt*KJY%Uf1mm*XI(Q&SJHC&d5VQ<;VJZyTu&T zI&thjaw1ThID@T8M=fgS4Q6e;s||XD2uu2ooRH9Eok?dDre#fB$51kUWI}*vPag3k z5~_4Q+kig8H94SBKmK4x3W}WD#=-zH(CNcaO@e*QIdW`^(WKWaQm3cwS@G=MeZ7qd zVa{!=$ER&g*l@(Xyeu_R3)l8^fBoz!BUw={Qlp&-G_4j@(|g>J3zdd7v48SLNP)~4 zW+sm!oir?7sS;0PAgKkbVvlg<_Q&JK9J{8MblAAcERMbbZJ0l}`E;PUVa>9-Q<_&d zF013~9vH)gQ--V$3NY^ZW2Tju^1z^hEnypmkTVt^IdP4QCG*?HVpBLb{AF{|{%dv)L_t+C!QC>`zX=8?uwuNI_DG{~H5y6J&__L}Gc6n5Fss>~arZXwpu?^h`du7)d4xJ z(X3vk*W#jTvN)GM%irdF`>}F{hIichS+s zMDw((u>FCCz zfNlsoIUYL`_&#(&5L$g>Vl+82QE;psEmxA_BG-a3jm{Za%MBHolgt?K9T~-bR!3*& z`koHFlRAcBG7DP6Av5U|;}se-MIa-EpbZEkxLDH8Z_--d`Ep%jSKL{%=F}`UTQnN$ z)BCzQzSbA#R|sM~@f7>d@95&kYFm42+S>TEtS}c#acnfVFxEXIJ&D#6;{5b`;RyM8 zB@6*d&9Y_cnebqAS{R4M&c3ZdC%L{mYg26PShM%=(IuUgVtN}!ZrS2aJ*O~Ue9Xym^qgCBPxdg5DAr2r3X;5n39BB|B0g?L>jbcHn4t*cwFH`T3f+*n7O>ejA8g>4(w zE~{Bzw`lBDdGK^;l+1MNZWQ-8dX7FJLW*`TUh2Afdw}`Gw`^5fdx7upKs1DFZ;SI| z)vKYz*2!aC^d@dMw=gB!)+7?Rpn&rUXNo$44k{$*O=ZI;Yhy3rp-Cuj?aNPct;`!T zDK9?ilymBtUjPvr2GtHId;SO+yWCT-wR>w{C%~>sPr2P#QY#(ar>WI=^6*3EL^8CY z^b1sZ1e!p-(z|7=!xGDR0m5T1zzE#jSp?=4>r7qb7aT&xriPRBRY%Vu}3_Z zT9%+F+TICcPid4cXINr>5@%EVAurV!ITemSn$$;j-h$K+(S)l9JU#!>@f5!7fa~`o zPXdgl+d=aO{Gn>i=M8&&sy`46X#sCI7}R{eU@)M01J%K5wJPNIYQA7N6jnn%f53O> z70;N!u(hXSYp;+r7H~xxB8m_AL9$wKz*b@$`flyVo7VuPg1FAn1_Ndh!Z?)$2g{nem=*S9S-k*dPsDo3{D25EYL zn%Qe~!BE&|Pv#^Xg4*+igI+X>UPY~O1-H2UKFuEllBl5|s^ai^fC!;LAn3?mRR9!# zI8YpaD4I{C^5q}2IHHEbkh~XY37t*fCh6r9h`y+^SCEs!W!S{G?- zs%y@gow{ox>+71DGqcjtLq#t4XwA5KU(%W@)>s3W!`d6=#X(b4wc>rnQDeE_P#i`3ibn($ApM74c<`|;q9@;wb z=u^l!LS|YgFv>k9$_L_RmjL9?dS@#}4Ih0rR>Jo5fey$bnaX0(v8Bh;v89fflzSE) zTQV3qFD>(;U>!R8goH$HqFlzi#4+HKI%Ko>*rKM6;TU2BF88F$)WqMZHJ@ z(nN;Aj31rL0TbjCy|rH=k5Lmg(}$7rfPU*5o0`R(;!6}J!-KUzAm9sw8}#{7XR5Ry zAGrg;YF`z&;b2wjpjMR^MtUt!<$*!JDjf1zr>v?1FkD-wth8X2zq&f-6q*(YRf9ZG zRpk%+z^w`dA=Qv4>!?^T4hLU-FrY&=A>7e~A$r7p!O_lo0Tn!<;DpSV5wmpF7xYz4)`(%0$R&1d!g!)h zDw$p~Yy2d`TM{ykHxlFQrISkAOKnDnafWdTDY=4_Tun-zCnY;%<0e`Aojm?`vTj$X z&7LQ&7ur!V4Yl#>g+wJ2h_;7NnX7h|DPAp99eBn=cH*T%trXQ+$&)E9qsBC<%%HR! zZxSL&D4q41t$_}Ka<+mQhPU5zDAWKUKq5)!`XOkQ28dcZzoiNpZ$FB zFC?`1VtBrk(2~pH{Yqk9Nn|?iDtNw@nAhRuNW40T_XcmU?hc+wU6i_7sOuU+T{l6% z&G74{E|nHvN$?t^vWQ<8R2~D$K$g!Cyf8?WAHwfPgpPj>@_Ye)FB0nbF@(JYzn9_n z3jCe`*muBJDFwRHz3|%yzn{YIXAt~z`27NY@4@ev5dGKS{{en~Bxa**{t2-?jVgZz z=)Vy2A$WB?3D5t4Og{&xe-f(x3;ch>?>~ThBX#``b^RBfwo%s?NEL{G9{j#SmD8zw zxoln~E9Pv)yjoUi>CNx~NLG3)_;v&rLTkkCWO5O z{s8>;!SgS`|0PiNw=$jh0sKCMUm2bF5qN)q-yh-kCz)y*o%k1-s#n45ClEuUg&wLf zcsc;TzryctG86`W|Agljs!^)FMyU2Lc>6CzzgVFfgkGXhY=DpH}I)ZZu-t(T;tjgoZSDUw>G!r!Kg6$k%oJnbu|OBG+0WL4KYFD68x zFkKufmY`=!c zMUr$YKB%NZ+Jz59*KY%OQmo&Oo}}NwJ?SoT{xw7^DxOiHS3E#2R%|u`zq`pjnD#K~e+c~IM@j$P=s%9WqA%7fUIjqA{R#3t@+1VP#T7r{F<&FE zlQ#%4_1$DU6vOr|=^r4ZsPtDnp`yk6N&jz%RPh zbK$)wyk80L*TVaa@ZJ~R&5Ec1;oT~{oxb0jGMRrp z!K>>Frq)Q+#Pe-+c7kg=E89 z@V1O>d>gzPa`J-^c!Jz`$~)j6FE^gL8-kaR(+1#mk=*!|`v^DSbUNOPw?|0v6hhRH zypu$TE-R#N7m3Kag6DBpC?+1hjm}*r$;zhYuWB&DDw|?0D|7UYYnr~~fWmg>3!57| z^YL6Ry1I-mRd(jHJM(uBG!S-I{_eqc!tT!BJ=89$Ud!Rj^-NCKMq8$}9Q1B>EV~&J3$mfzr345GG3nPWn z9QFh^YKOOc!vOa(UhIFBYsC~M^j_!BiE;JpO|Fhpguca}6XWaI04bM*W&llhK>{CQ z0w0m+gv100Hgphh-bTDXhVY8L75k8a9}~8pLktu?hmoaih zxil*>MVrIUl`{$KW9Q3*c;#C`EvDNF@M`u2a&&5BDv;+wIa(H-R#~%R8sVBQFXn1C zQ>DFGhSJ_5N2e#I^BdPtV{;Dhd(J@Zh;)a{?vgi6A84P>?iT4RPo;AYSFxE&=ZBci zvohWtg>)RLbY9}=tdd@m*(>s<@`3hp_Nqu{bt;|L_yuaze?Ji-?Bx*}rM)uysT`d( z5Sc~Fhwr~0(satu5~cvi`>(0}CU+}$hYVq4EgYoGoD zc-dB0@`sJ!}qvI0e9@&P*efE6#gz@%g;-Mv?zwuX#T7p2IrU+CG zrT+{|KMpJZ3bd^AZzz4agzB5iB~;%mTEM@70^7)c6*jC01h-=`&yvptDt%qKKxOBu z7|z>TbY@~^A`}TLkkfW`sC>8x%Eiu8%ZKaP1tY)~A{Y?mLUky)*F6a}JzuO^xDIer zLzk$7_3(M{`Q+Zg7PaJ;!^7-yOv>E^AFot79SS3e&Ht!ZtL$o3P$CJfVh5m~O7)uD zRIkNUcUY-v#hB{1If6H-oHRfuXgcFzqOJcN+r%yvwV$YhAn?sB zk|@uUkaR!MzOS+;vx@b7ELN-TF2{2HfPZMw6P^~8bG09;EqXcGSr1?>`ttzSqC)}S zg#tdR4!w}vH&iZ-{~vh!vC4f@7xaW7b2A<7{L0q0YHBejsjo70YrmQ;9^b0#-4hq7OhFt@D!GkdUmD88T4Gv zqUS_KN-9azZYyvD^i^6qC{hbeYKInGwmY&6DKuGAb^8Zci??biRYu<;2NJ3|dIYnTfg{X?NRMG8(QgD~7Oty9dLH`A^ zua80!mAxTIqNYjmW{M;#CyBz|(%kt-k|88Xt7_3iWdoS6V$ozMhbHf4(?nx?1Whzf zlb>nPlaMBy=qCXm|An@koPI623237=p>~Val2$COk`z5fAa$)YRfUG~IuhuEbVJ!m z$Ooy0l4>F!XzceR=qY`a)y^ayrTorSSbq>-&{DyIPN~Rmc}Ku7f^;DJ=h z9@M!#^z|?kct~H4_TxZ;oDZozo=WX;k=o-Twa0b#6ps&)BO8=C>}iZOOSa1KBOdD^ zBK=5b&j~mX&H>Ac6vWG^bYIrls}{sYgqWRzcq;|*md@U>AWlYzIjTd`-%_!W>Bz8K zDf|o^SS-C^rLFe;a$P-*q<%H)daZz|LPw@3ft%>I{O%*DEmamano?mBsc;$ z8cb(QA80Z70A#WQx{#@Gpc4{Si^&J$4^W8Gh1i4A)~9;(lopeVFQ?9moT6abpTRK8 zS^DRC3q_RvsaF6>ZZwAQg&sW(k~)nb;BX4?Tq*#!Qv_reQp{j`TD*go#8>!hiS-Iu z;z&ZY5k{fVb(PFJ^CqAgLHnxjK z%UbMw!gvR5!Hc|eaUOOdvaUyHN&NRQC{AB1N4y z3HzR)4oFl;9hFn(X)1&(5ZF*)eufSeP|g`RgBVWMvmes5*b3b#j8~A4(^8!DRhr_Y zZxQk;MZJM4S08vmnxj(bRmxtc$RaIK%Hm_hnl&Krf0L$p|J#K9gl6%6=xl&4GEa{1 z5JIlx40k2L%-A04E*+_J@TVzMkgfilMon;#b+TX3-RwOYjVI#lmpqphrdm&WFCMxGKd`r2>rREiC6>s5Mm`Aktre+=GOC2EB?7M9qZxIG+f)Q8V9u$Z8;B z;%X62P|Ag%c!074sd^Y9?615Y_OZV~xrTV5KC`0rn|s;kbTAqoAr4lzGf-`#;eG;x?=_-l zLU80vv>#)*cVgIshGoCRy#uhi9y(~tUUq{a`q7|erxfjv-Ymj82Q53LXn%C42-`Af z*(pW)qj!j~u0hLADcT>sM}&0`T6Rj)_D3~te^fK%iDwNDYk9-N<-^0l;o()o!>z-^ z5X2raV2qisJ2kyu2hu)iaKU+Bdg25xtvZeeW&K;N0imMR1_5^XIdELa+fRN&q$iF2 z61`vzyfY0hlTeb>s+w0=wE=K%h9M0p;(ZR!i)en7PCz~et8`gtaM z&cI<~AA8Y2{;#>KIsgAXp)VOY47?2PN5p)^z`2&~rv`h;KvP2=M3KD;TrlyqZ3R&i+u=~?Oq__uMPg}K#~7_5eeyssZ=(y4~-VH@=v72R{0QVF*YcC?(};D zmz|(ZvQLZ_mF)*7(YxKE7GnkyZ2NYr_pk$qXy5htJ`Lah%83iF1qIen6D>vv6y~;( z?Xg~$AOPt?B7Q8EO<-eZ!mI} zGRKXoD2I(f4B%*gmd*gF@HkLmyNMaVz<8dCIZ*dHK5zb**v~iF`8>>lYF15lfjNkS z;!ukNsau3(yU=XW#rxNJ^5>f^4oKe7;=ttJfaK3JTPTi&Ex=mF72g3N7eO2>(WT}f zjs(syvaL^u;|h~qY32@IdF(2)B~Nq`7`(2Amq8e^c9<|^;|3fP3(p55^(;%L=^y*h~$$pAqt76GyqlIN+8`IN*Y-ih)lBlB} z*&LOX`~y3<8U04&8_*-(G~ND@qv=~F>h6u61NpygEz-V>2yZv;7dg4C4OPjK=5gOT?dVRZ&B0+)$x#f3w=)-!XSm;KvCXJhFe} z_Kz((`y3&3-VXl{ddNSaXJ7#D8~-+E)sxd&&-mv5=x0l$Lh2`yrb_1$oTzRmlDt?t zk4UO6olhjaRPw8art?}q*T&}(=@mHaMHH9e&b49P67>3I`CJ=2-zExl3C;t~m6c0v zI4)df!+C{vgNh*nCloo*=O#y8IpvOc~ zt!`ZHe9~624aRFIEwYLq*nlNcUhU7>pbrOdDa?oaL^d>WXA>I|I1avM+f-t$oVAy5 zUBf?t5Rkb_*xML0sMs|9BV?vO7wtet@xhu{mbRLFKKXMSpHKdrHwYQM3uWa!8#V&< zmp1mE?T{16U)uOY@>dqbS$zFa`;CqL#wHe9Pv;D`QU5KZ_P_LZHuhWF0Is?s66|-j z=qxDaESTXL>;qei0c1jpg1;Ay!mt{}M?gRT!#eu|0AYr|v85Jik%!&{ZR#(!gC|mF zh=yZ)Vq^P9G#ryL8_Wz-b#cHZris_57@U}_-7nbkU$IT|YWf>?0cZw)2Y5c;`V?!* zrMRs<+eE`?ARd#`$5BD0o&~ACzG)XJ|Dt^tZi|O?n3et-XKNqXQ-kF1W%7~T8Ur=yBRjj%vFSF#ZgQkH z<>BRzcHEW!vwaiSJWtwhC+siw=g24V|MO_#xo z?jng@B-wr^VV~Hecap@NFw_;*W85c@Cta&is1hdfNaxdK<8piB#KS9%f@`fdlXm3tl0dr0IS0t5Md4p9ck ze^CnN8HD*^2Ig5u^gfcf4`Gf+_H+g=Z6VA%8JOLU==~%C{~sW@@?vd;L?0xH2MOmV zXpuef5UFPaj_AWA@i0jTJ_3R7I-;6LAfgdLl*qLNb36fa3_*^+!W@5-$?<)MfD?4! zSvoPxY&0PL;#B-UWBiXZ@jpq$=k;;O_$T6e@Qc`9cI2hn%RgkYBQGUQ@mBL1k#^*< zYx2^mUkl%}iqx-xjB`VtFk!$~HTdFKFQtq4ADO&#P!V6sW3Ob2`06M{d~;+GLsk*r8l{K>qZM%|yNG+Ti@5g?Mf~ZA zB0fb%DPv8#jGw2=I4qOT4=Us5dF)@AGX8s%G7gU{<3g*9=QbM!J^?i@oIm*PUyLs-V^oO~OQuSGRV*EwJZiHHapZ@! z{*%J-d>0!|VT3rI>jE6lcUf5H19EBdkzG01?m}!Ya1E3X7a^J#xdaP?z>8hEXkP9* z6q;AMQfOY~5=bDLb=b>Dw;e%86KUW#6%4q`5RlnIFtxHvwq6 zelJqk%`U88i1b|-He_61<#l{3!ilPdR=(2(&vW;}+w*A8_)fwN8t-yh95!7mxJYz6 zVlFBM(Z3_B$T1YOM-+KPM|i-66ZGAl0qkRYMIU>}l^Oro!>+8zd;u6YvmbF`AB4^) zv&UUIUD^WSYs62uuY&u*Cj`49>p8OR@y!kZ!F zAEOY8@?1YhSeRxy0=U7SsX+Fh?ACLo!u~5-kIufZT8}PT&$({*LafCWm2dTGq8`t4 z=f*zYZNKZMWdsDpt~W+=6Rsf(kdfmy_R-XXTgW=nskhBR*Gu z7Fv={l;@CX6Xkh6qkjQflnq;#UMwv~22%^o>NYp-A?#syxT7zU#EZl_E+yUNW_P*M z)VUTUIZmBD>>eb}fS~JrZs4c&3NV33aC!LwcWS7+ULg;-tw9ci>j&KKO)^aBA9ZsH zwN*5zJZvA2b5ihk{;e%BZYP%Udv5nWjPi6&6vrgo4mvo>E+pe+c-STfyy)w=^yMDG z7EmiJd(nN^e*co&J$dBV`ieV8?sX$GeJiJ?+1u_+;~a3ii?Ian3Y0Fivfw*fd)+B% zy%jM(8Hb2mFb5Lnz0pg`eswS%e{%>r{?6^biU1bBcaO@1uP+EeL*3T}c{;v<8ZokU^ErCrv9{FbiP>r^ zM?|tApwQM*k^{CZ)*EZUY>qnuZrM56GST$zzFzS1&g$vtjiA3DqW0eIhj`QEe(! z%FF^nl_IK4q^g&yKGO>k7f{U)Q!Nc|aT$24l1fS*$iRxL-$``a`2KvN=S}G^MG)IG zd3yPbncSVl-3so`o|ns$7fqF5NYfO5}XJ z`J~88CA?pbm&YQ+sS=dFNdemMq=rc)T-9;rXx8WVdSsnWJfO2x;tbj3Cy9~b8%&VaEJLSUp!$n~tVjO)~g0FR%Ij2S~_>Xh5f#;Jb< zlROYHrKplnE&^09;x~P;I7=b5D|l+9(iJe<8 zu?iS=bas5S2)!wXh7?}+f(FA79HEOTr+dgeHi5T}nI1h_w~Wih-01<5FC-T{Lx1MU&Q&RWk+_lm%i zA@EeoR0pQ6xgqd4=ye90hg@hra)^|H41-OKnnH#H2MuHx5GHz`hmO+wEZx{3!(~j_ zTlUOTz3_zG)|iU1@ZcEvbxlo;P0jTUYt}c{*VQbmYm)5C)(NBT(EZjQv03$OZ9TYW zr7~P}aE8#Z7L66TQA$X1*xn?wK%ZHsxM_pm@}*j;xS*`XNwEp54`I zM|P8TjcB|F3#M~N2&O5N<{ylb67q%%G*Y5ywi5d|yWtp5N=a#6sk77= z?=&VFlZ>*Ga$}BaCtSP(Va{f^5f}yVAhw41SOYH2S~HyC(5Wo z$TgM9)2KXyx@S_kg67Yr?&GLjY5Ei@2dP?Zx)iF0&@dhFMDX-{i8x);`wNM)U~c~` z4A1aS-6Nl9Z%E}laeA-ufk>17|N!_T!8_XNej753Su@6ASkG2 ziKG=7krd6VI}d2g2ZKWZM}Z)hLSf`P4nmg*L3Jrxy1QTA!)gZ-3JwSSp4zggwi`st zdRE7UPnqiUDFSg;;@(a#9`otNb3VOz)vi!lxgT(C+)s+-wQTk7fjSDZUt`oj5fje~ zuLZz;?lbvOfeA_zNR#S1)-*Vjutn_&`$do(TgMY*C*w7WyUL})5H37U(N1NjwrG%v zyA0QUz5-wMyUNKu0Dy-yqXQ9#GzUQR9ldx+qg=;RaBS_+j^2GkgNeN2E8wk#4}6MF z=K%VfvB9Zb0=+$b2vB92kt`!`l`v{aP}s#!92(a9H)AgXGz!=n1_=4Fi=madm3)pmBo zyL#ty@cGN)ogLfaJ!dy`E$i-U=`C)mTil=WPye1^M`_t zIPmPQws;$I?DTBi6Y`lo-QB&lvA!hm#Za~1bYjdgUY zKA6rrvT+$@$Pkj<9ZxKX`)&NV@nwxeNBxsb}m$Tj8h zR4%3RBq~pVSw2;!nPo81pH7t-s$h?XFy9H!wmjMCcI9)ofV)N99mm}X+?~kX$=sb< zPG-*HPZh+GXM#|zYg|W%EX?OA2KQ8x2WmFtoVuOA!1P^?$f}MEG=erWQLZKqWTXZp zgj4hhf{{+oNaAxg$(4G$C52PNd4K{x^{^`BsnyH57)}ivgmysanSx~k^PLAAgtC&T zQy8P;HnI7FYF;9bJDiP7Zg&8b;3Lmkb6*q?xu}S`ihH|TyE~H$+B#Z$7hoG|i6zr) zWb!lswI;J^(D?|uFb!I}U_%mTj!>EH3!qgmh$a1~XSuVZ1z#5(DzinY6wsU|8sV_F z#f2VaT+?jE5Jz)X(A*=Ul1AU^rDKSJxujPz#|jT!$9rVZEYvZFql^K09G1x(f$9s6 zSj84+kwYHE7YZqXfLHNXg<(?cQM{h;_(Nf9q-iWzjU4o0XO+d=7v{Ud@TF{08TzZr zJ1%t7i7@x2sPape6vgOQLAX$C{i>umpdTrD{V=a}a*bq%p9_x@Gh%B#Oby;Q$r1^T zSZcM{QS@3AX0)Xs*eE)hyhL?P3ODGB_A60=j!w~_ubNVr1F~BA0fiZ21H`}%X)qJ} zo^AI)J7MECN`kfORtW?tvI#xc$Lr#SZvZ2z|78cY>tMPa^zygx93; ztQ6p7HZf&(65(ND&Zh3>GiyCHgI1UVGiW1Wc+kNaG=(t2`*5go6j{Jxoi&@$)~zrt zNrr`4$$R7p*+bgGY|zr04eJ}5Ya7=@8kTQps$0fw!>y@XwXSacQ7mRnT3xedL(QsH zr#9EDTi39BO-?#e-7$#(i?Y##rh3d~29@THHoBogJ)|sq2G>+M-^MNzfWM`CZ?9kra3K(|9JJ-c?R|9jC%K&k0-PwS)+Vr>LRF?3Z z33X*j-i|JA>tfEKV`o9}bz`wsk}{2FrehVww`}b_dszmW z8|NCMg}iZ=_Uf$YT)NC%)fL8n>{%EotGYMa0H(8hGeYPcNi@l#HpBajif?+(sVMuV z@0>Cyc3D=Wvfl2pif?+)shBT!KrO_un7C`kO_~&BQd`&nsRMFjBo5|sXvhv;frkg+ zwljO;U+aTZ*LQ4*cZ;peLqy00#MIG%uJc&qL*}8ewc*^(&)G+FR~&etSZEK9EtRYo zm_%OId%0I`O&&usP=wKEg5#{{YvVnM?w&0;#Ng19)MKq@u1;=Nwj?)C%`}%-X2w+3 zov@mU)zIS&ZAVyjq#em+@s_^LPD_2Z#dB<1wszEUgBfiU9&tpoZ|#Zq_MW{Kx<{|p zhH+?n95*bI1!GwupOj7&{Q+}9^pN7?eD?uBAYUdoQG}Dgwyu1t=oYjPc zPJ2gl$L20H9)VwTrs|_F(d1iSIlQnCoL&?twpM(yMgrhOMZmv0x@yqC#IiJ+_8zo% z(%#+E@s0S@Lzjyu?Z^z7U2O}-GO%PN?y(5qJ*Vs}7#txICxK`zeLaE$Bd3La$WK5N zWg?`9xA~6jp=!Yq<%`@_X{$Rz~@?Sz(+8 zX>;0#=@VIYd30z%FeDsiuo3`yOJPb`6{zcKg|^sZ^d+&;a66pIBup3D5Pg*2R21oG zT!4{}oMhV_x=kW+-iGj53_b@8gT^~5^54kK9Rii8smt~g6}oPXFP4yxC~ zj5=rrO7Jau++#IhG7qgGRau9_^%nY)NK8G}xe;AS*?xfBJ%VOCKg zyI5Ctp4icQ+dCjBJ_8Jng>@V>2P#O5=4s(tOSX3;#$dp9;aD;pU4C~Vvw|8;ec-kw zN3N8XG}WE7p>Ey!=JgG$>l!ztSo8$6Q@FmaxfW*Qb!*l))T~-(eVI1OmsIN)5YF1} zEg+DzSveH0sjFMI&YIm@AS!YoC-%?G{3Sn2@?6v13n62g0Aw?Ev_6?h&^NZ|**F|_ zsjKeT*3(C|v6YRzBmN9%FEDql6E6ZC{NUo{#U^9HNEUJXsT1)aIluI8<-3i|9>0)*xbR|Tpx zugB*LX}oJ`J|947-l|Z*kA}*^0TnH^s3D&>s8&~ns?fSx733HU`GVjE1Aa9a^jE9l zs;W`Uw^dhH11{CUDoiYZ`1(C)0nO+2`ZZsu+UFa8s3Ax51p{HoqBnWTcPwbfd? zY0K4Gt8Fd+bMAXHZzc(g{{H{ZKcCEf=iT+(eR=18k6K$-U!~SnSJ!FPRhVb3y0W1G zeOK32*Qi+THEL~j19DwcTV3THeh9=MwKcWb!^~@1Rb3_Nzr!*>E^6zsJnGO&t*fCT zt-*q{g=*`okj=)*+DcDibMhpvd(#Ikdk3ks(JUo3G@A*9!-b9_n_ zj7524z27rd7eGOK!Rf{sMu)e{yU}y3Ox?uNe#qF5 zn0gNLoQql73@mL6F!elOUd*a`K1Q+~?JvOJMfkf6?XN)lD}i~g1_syQZwJ0#kG~u6 zSHrwJ@o_p+Zvm#=isU``+l{|_@wW$k-;dA7@c9I=yq^F|FK2nrpw&q%9r=D1sh{HS zXZU*#S$Q6xKgZuM@YlrH3;1{$TyKNSQU;K--{Jd*`1=Deh2!&ImX00ufB4%hlM)@K zUW&hKWM*6^vk^DQuIpr_gv4hhDP5A>nUb9D&KT8~>y@&KBuLMi(3gv*uP;~1n2PTi zl}Nd(k#g6OT?5%2N7V5|oq*KjB}h$PO4Krp@nrIQ%H~`-z21Lj-)XC)^s_LHs);Z2B> zZ#iVtA^RQjm+%fi-af}-zeB$3kiT-sUpwS`4*460eBU8|>yRHf$skbiT?zdPgshy2VTKX=G~IOG=&`A>)Z(jmWc$gdspKMwg{ zhy2DN4?1L@94F6p$Sn?eoar1cW0r_PpKvZnXUmQrMmMMzDEF$#US-Qb!zN6H3wfb?{v zl+Kn?WzEw=8c0$%%$71CZ6hfjNzZPQbja95noBa<=SUflRUkBlWUmzI_-;6nl&mzi%_6iUn3gHD#!Q!F@B`&YlKt{zSpk3v zST%Dc$vEcN88c@!&7M;t5q`)>OXy%51ff_WsRI=*fuLLrme>Iac##PGb)*mDQwWj< z4C{`76ju2AN>C>m1HU1Kb$)|T;&CHbf(fJ%Lg$-FZ^C&pfkBdVf~IP^iPjg&gocu` z{{ZAl7s>~~i!GmDEWAatXOa+Bo_wjyFO^ABYp*X~IQTs(2H}^yCBv0El2p#|cKfu@(B^@BpoM6UFp%paBm*-?Ks zhI~X0=8)i3IEOzU<1fm=Oww=ivK@%--@Yna@Hm9O^_m<5=-(?;667mo{0%$O5g6&) znEQT_`zW!=VtM_D^7^q%_$;Kjgt%Xc)}JRZ|GCV+5FVo0br$nq%KS^4$#UUfGx;w$ zSP%^t@UP^+NdHKwjDHJsj|3KA>AaTK!j4=fYw(lPO4Wce24H5&0b-p zdY!_rQ>;{LgoB;x^-6G5G(3vmpu`fpQ3(`A?Cn;|eN*8tD}fv{hm_;&iKF)-uL4z$s`pie zUaj`=ni3pc6dujrv2^FO{kzx75;bOA(}nKsvxd#Zu2x> zIM@~R8Fu?9cKFZZ74!uqmL5y&e3c;W)xack5+;@rOYBnBN$gUglmR`&6T4F7SE^QG zCkY2Tv8&YJq-b~&zgmqYwu6B9Gvl3`65Fj(absdxG3#HD^^0o2XZnO{6-`fli0b}z zHFiII1-vdG0ka6VK-?0~m0nl*n<5Nd%g)wNj~LNUA^z%->N1 zx&B%OAQzSV{no76lbEqNjmoYP3lxR7&;?pFq9)MNARsOjeYaetc z`yZ-k9|39~{bohHdHmDzRVfW_p0TT8)U&E=3(`Emzf>(dvwD5jSgNxY`75FKpgg*$ z9FPnCwMc8gUn2=T!T+gIvo26?)|(AxqlH*_(6Ktbv5cRq1*VzP=!P5Lq6MdwhNtoK zw7_(8del57aIAUkHvbHaXR8*RSsI?n&({L8%vl!B-8L=IL~s5k^l*U|oK+N_#V^(Z zv(4E>ImL7*S&Jf>ZL3I_gD?I$P$n?suF&k!>}oBL8klR&jrRNJ$)agpqhZs^rAco& z7VnLun&BobFyEZNBkNcUd5adDUlN|rcWJTSE$}C9)dJZ?RCgKqLTiFE4cx9d)4-h+ zw^vLjRCf;x4EnRBhc&9Vhc*7FCTe7X)vq7ZM7{MvV#O`QihEoOE-DQ#;!oHG_LN3N zdYpNjd3>ytpLVRMl%Gu~mY+Gr^4y?e`FX5ZUZi3C?T}3;tDJg}W?7W_3u*MS-^?WfkY_*(oY?O_5gmSs`6|JD?WbbOqdB@5 zOX)*VN~@#~HU5!ibu<14EpSrQe-eiInEdAB%1OVN`u5+2=RE1}8s}J3rC3w{&;m2f znHEC37V8&Yp+rEG?{r;5qTyK?1W54TB>&%7{x41T|359Tw8Xy@SviP> z78Rv+E@A4AAf^Je($OuRF2qSv7ZEPEBD_Qw5nkm)NPzs8>Vc)DBErk{zzTCkQ8oc^ zUa1FHmV{UGtMynS*H9t_IwsPMiQH@_a8@t>@f@!R#N z`91U09a*E%>tZ-1zi zKTY0*ij&Fc?FF519d!#t^krR4-~xa472TQz0~qtG6r_+e4(+45d{2+5n+lS$q1!-u z57W3EfF5^%{GQI=*R4sLpoq%)krXrQ@9cCw(1UqJ;k=9%8mjIDg%kp z-LR{F7a_iXtOtUNf)b^||ELcHf@aWMEwDcSq!Y-k|NGcI2-fK@)@z7>QZb2U&EHHo zl%HTS1K~XWcafE%Y+~Vnpp(~boU%7s#_au!viHr9?0sWp?;9(7-{}0{knH6O4FSOw zJ}tb0Z)U-kqHs$*f9Erizio`4&l2*tjXC+-&Jy!?0ZYo?MJ%4bi!lu=e=GPUn9M-9 zglnX*mEuHOWa)v>`EKFz5J&BXYaU50BF zFJ1U}iv><1XTK>0{HA}K7;D}TA!uos_a4s9zl^`8(Qv(Qm>@!b!uu@PRupdI9}o}Y z>H5zj3eDUx*!*b{$BKIzfHVFTi<)b!Iwu`|{qa>UvA4(4CiriQ@f?~2|BG?2kiu=^ zI`w9Q9HRa(^18*C&$k&ASq|-swi{83BD98IXaw5LcI27H-iy%3>47uMGt3UM4K?yh zjKE5BWftv4E{i*M(s+Q5m&a|^23pJ(w7J3vt}LZt$*|h~CILSmI28w#_*_8qByOkn zSRMXa!`Z=HFG888#wQgVsAEvIv@F1y&m(j$k!+XQWpObjJ-5Ui4S8-%KFt?yq1ey`ylN9b;Q zjKKH-vAVyX0PKrtK);K+?&Crrc$)M$0nv-8K8G;Ao-%@BMSvT}r;R{1tzw8Fe=mrA za1 z=}m6ab%#&+P{|A@rkEt4Hr%J~nBbQq@LhRSsUKbpEJ6H!;t|FRM{Y1CrH+-BO=32! zc4@^f4AROZ`<;&WxZH{d6r1)+`*$$eqw`3?3B(mS4(83 z{_qJ7CpagXb^2;s%G#bbV#3#>onq+i5dv_%T}AQXb*d$8eS|KRDBWrYOcEh+i&4Rn zvPdX(8aODyc%Y(Q@;6lz-V=c$G?F4)>WX{J2(`9~=m?>UAiXpZ+4Q4jbC@wJiLtKk z?%^2ACeg|DZOJJU97pf8qfdG80w5=;gV-$~C)Vf_TSU5vExoOEd2FRL<4B3NugAsM zv_rM5_&uG(Ya)%`K2AHj!^*fV{BAOC!>pt&kfWN)TD7{evF=c^YieC}O`}><-%zhM zR1#KPV^yu%P*GE%R@K&43Nb;gvbv$RUaM@ZudmQ5E2`1Ds;;3*t*WZ6(<Ke7G zirUI5wXvGyzA7q6&aJYhvPP|`CNZtNRRb@pZ(hc?14Qh2G zGFn$tSEp9jW8C!>6^&|bO;yEE*|n)@CmGA~mKQ)ldBMpAdBzH3rMKB=_pbMz>0Pe4LD5pv(n&B0@|QEPuCy`+ zF1nGfrZOdyDOm(D2e}0E1O-eP#k4{OMNFT-lu`y0nNr5sRHjrgqmn7rOsQc;9W&~g ztC1PUFy&aL&0xw*rp;pRIZT<$lzB|?Gxq|fEM#yTgX0-HfiUire3o(|^DG?+OgWV) ztC$jGDXW?CeU=kqN(*DHOfeZ-!*at+S0!COB#V@{i77v1+K-rW z7E{h<%DEWVX8di(-v#&^&6G(@xgM#zfXNR5%YOuakAmwFkeT-}$fs+%;(ER2mcXTD z_oYcGUZhe+AeA~2snjtVM zFI{pik|ft+^jUCv-#8V0Xj=DnIVHvIZkTdL2e_Knk*9Oe(-z#fj@pKX_d*a?g~wh5 z^2Kl|TmqLtoV*;a07$>mvAD`1uXf059CC+4Uh9z8Iphrvd80$_bjX_=@@9v;#UXb& zgs@hhr@% z2LifL_}S>GPsl|GAqPcgi%D%T&;h5uk8l&u2fkf+u)lYv!-c>v1p2DF*Owt2{7gm9 z{2~ad(Xh%dhJeveV2S)vu!I?OmQG6NNfP6Bfm%+&46(#^CnUBT_#WXQp4k1s@3#}n z7Y=q}4?xfz4ZHb+@x&e$*om>k-lD|z3I(K?7^B2OXuU5Xv3;CL!+=yv7_dAv)GRC<5+}$qzKcfvk}z70jloL==NTn1 z*_>RIeFC+xCGb;)|5PEBSY*4oMaw9~21}n*MsMB6pHrfyuirlfc4X06{qy3LJocMY zLsKzem8NFCeej^687hC#NtxLxW3h?vJg3O7kZg%nK(8o)QHw@N$TELb8Ss5CRL);h z2JA+D8h>5EMjoo*Z^Z2a{7qq3$=^~2qGna7n#4**4n#{!{3F$}4Ejnspag2n8h@=N zJ@89~G#C2X=#zb*!EC@l{zerW3YKNmUxxL)pUN>)!E*e7I_3c(P%?_XX*Ea(6l#QI zo*|Rjp&U^77eX>7_Fb!4#jH^m_@^?T|4TVS!(WRYzg9$-%pvgfZ>*}ez8QH$8>=Q8 za~gWC76qoBtMY?(ft{-cru(N$#2(+QlHSr|LdWne>fUCpf8Mcj87VB`+f?d@vA4@( zZ~RJ}OT1bUG&daG)+{aaOjhe|_Q@j;6XQmDl5R0A{28D#y?`Yie!akpwW=6h6& zm)&aMSiueP>!$?nRp;~jRZ;pgCGoBA0acWKBv$(VSxOmyNTvMK$b%!%!F*;Q*N?V>`Ow!%d;dc^D{L`w2Dd@i;+I+{M^c+l<;v5 z(-&Ik=+ny!NnF2ZalJ8#>(|v_R$z89ESe4BEdGX-hbFVhoI?T_{&~pKo5IrX$3l8b z4bCW*!ZUc3*vug|Tae5B#O1G4Ye*)A7VpIqros9*R>C+DC#L+{!D-FMw0>u$wE)xl z068l{o_RKEixB{7V+&GMU)pqi&J=cU@3`CRRorq%PImVnI{RuLW?^Q-K}ptf7XWi z#xwZa&h(^{+i7vYBzHmF|@t@?@pDx~{>9g&lHYG5C-o=^QZWI76+hudmD2AYbz`uk6h*3cX|U z#tO{QaRpkz_<~|%f>Gif>upd{KqZV(51ms$=196Wg$qU1#bh^wR012-GMSpoR4-k9 zQgfI(lIf!u8_m=ry1rCu-;{EdvdmhRS?8*inOe-U>RBdf+o0_}&NF(N1a3XAFH3f3 zWlyAAFCz-bQMXX=g;^oY$|}gN7F3Ner$MgQ<&r?nA*fL)ML^Px|m)JZX*yj1kuiJrR% z^4{90F=GW2Y{lhb z7_jeK#>ViViGwW^`EUbnbW zs~hVp)tZ{hO0}}Fs@{_rCTVsyzWwwuWad#TE30a9?ep){JYCEr=>-`DnFUz|*+!0$ z>m6x~$i7ca-<`u=q6mk5m)H5ZU$l^Qa+_cGk_?9M@_qnEs$)-}Ss;RCOW}Pq_gxM&}X~LWh1tVQJiD-FZx=9x( z*ZHJ-MTS|@2uT26%b*HK$O19t5F{is;)jBUD-Q?Q$vBH#1VK2NjsxR*4rEm~T$j^! z>X?{tr%W4RLptUFxBv~eJcG}$@vcqH)YtFlvuLPiIMmM>*panFT!m2P9e{k*&*w!= zgG4y}0daEGteU!C28xr#rlcFCT@TFL~P);BSN<}kVUC7r; znu*3sD~X+zbW^1nQ&L*^_lSvfWa2c!i6!AfzG^;i?l&{H?&mF5@&mEdRo>dHuFoP} zou+W0#Md;79Tn+g5#ny`7W}p08jHzxQ?f3po345E@SZ3}yN^dGY`?gUqABQcB6|Fx z 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

~0h}jbwSe;hs;-5@3l#Tag}8J4!)GZ< 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

hJ&y@SE++|eXywknW1YNUHNmX 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 diff --git a/samples/client/petstore/flash/flash/lib/ext/flexunit-4.1.0_RC2-28-flex_3.5.0.12683.swc b/samples/client/petstore/flash/flash/lib/ext/flexunit-4.1.0_RC2-28-flex_3.5.0.12683.swc deleted file mode 100644 index e41bc68abd969ffbbcc736ff8543b6740cb94ee1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 194680 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

h-lptIpe;z<>mXEWr^6cO2Du~P4-yR#jS!6z zjS-C#O%UxQx{>G&L^l!L!s_aw$~ATeIUSNJQP-Z;c1boSSD-GMVna~~YTR3yrfq?B zCbKB0gT_6mw`LXlPg^-kK~N>#!Rp9=qjRn{8R~rrb3p-@B%69)+aWNCt2d$dl~*U* zO)yGYMniQnMOHPxP$xr``osE>94_iIv0~);)9+1bYcFQBZw;t3{c4|PRjrDC8YLTLR^ci#St$uOkyd1TD``pzzHes8 z_z|W*!irfx#!TL4*aFPo!iYOUEWDK&>`AT7CabEp75G2RL{mJ?^!Kn_!R=(#*;8c= zknAk7y^zsJkxU~+viGu7b&e!3q^D-bH;2aw<L4A7STBu<~=HLRTLAnYhG) zWDpj(BYme`+r-t-3?lGdyBW1>$tGKbe;2Lo9byeiA(6{xQk2S7bl)`@yDA=ClcnNU z*T@J3jHgY@%gg6fl$Ms>c69J?#m!SlM2b~z^LO{@J@7Mr<%~o^0j(3Yup2&m~uM>1$lkEi?@toi_~{W;KDR z7VrlGQ8nfd#neb75?AAiC@kj^iKvQGK!abYYECUV0Xd}N$ z1C~MtCR-g=l!0xkX42|{VWVnCZyk8{L=rHqk}FkQtL9oQS}7eW%}why&4nHpOS5j-YPEZ_?h5!-1FJTx zy)IiJxf@Uo#FvH8(#Gs6X16v&Ot;nEmUXvC_H|Nz1-D+_;O__!4H69z4HJzJjS`I! zjT21}?IgO9=oYrpXR}JMmULM5qsO4i{VoS%UW5~st8U>MQ>qd6Q>`IL(OLuowbUW_ zC$C4CPHV$0RtvMOxW%F}J9Dv>XtnNe7mE*IA*Zz!oDFS2(VpR5C@D)>vHvlY)Z- zIcWG47a)((TBbsJ3>_7U2u=fvQ`JzO@pg!S&IaL8(j}Qz1?JiXlRm@HT{R^wVPsEW zM0k!OtdgEXAJrm)2P4?b2-C(wYMSXYMuakqV8{BQ63r_{gjZlC*TP;w07#>b2rBsZ zv{J%?mO|W1SWsPfwXOgrPE-H>lCj46cVQt=kbI`4)T+!Xf6ABf5usB}v>p(6SXue< zlrIqGd5-2q$-3oa^Tmmdzh-I|MY+K261##z71wGx6$eLA+^dnvzaC1F3+NuqZX7Z7 z#uFrLguQ4r^U5gH6O*FN!nkHrX!ep+VKrr!9WEytZKIPSiC}jbZrlhqrZDo2Uf2P> zGl1Pt0PYsa-xc8{NY2Pas28&QBL9}MMO_8q+OEh@8UEhN8WupVFN*i3*WdF`A$Nqd zAffgcsc7d7ob6kM@;tnEcfR;!ifJQ_V?3ub3;=AVE$##wo+9gs)+K9P)JRrRIf8Dd z4UR!qT(xvMU@t`T^P^c08jS3NV~96DJUW$bTbkQ|5e@Qn>=S2kB$>>g%b6@WSd)}R2&*`4=`$8x{4+{ z6~lzK32w5C;=kyg zal|gUOf!p!X1eBOr!XqLt7vj)@;goz<{x8Uu#j0cH=-@%aH(hpt2j0?HZa%4$81j^ z+_3QvT<);W7gig<;=75Olfy*SB5Ycgd%ebVxn`M;EGExoCbPbIp4ygN#JuVC_XsoV zvrCJckUtVov6sW{(H|%PH^f3=znX~p0|-W@2E(BU>^5TwH57&2W;~n-+6!YzjRu1; zHRzAV-LtzQY*k?&nuvx&u34i&jYbkNN73g`4FXFw5|4z`L?{+h!;wf>jraq8H5Lg3 z)I=m21QLY1Xx#588YC+Gj;N7vJm#4@DX39@DC(X)1*wr}G^&P!ekfHq9<&$QBM

c+=2zb8*`tZoifDYR)0wel8Dk`8bzH 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

=VKvD_j_= zMdFE&jA{{0P*5p?F2%$q!V?D?5lw*nUM{B_YV$^euNWIaRBCDgM ztjgodS|RB?erEID>4@Eo@-h6_7~?W@WV1heZ`l^kdGiNCmz?I;}w5;IgtQF4xS8g5{fnjQO|Oe5wv? zv3yo#7Y~274y|;|JAc$q?e@NuzrT9E)KigH#jRW&xiEC4T(~wwX)mt? zcRe8lBh2z}Y91SbBTy!TU1Ur|bk`jf-31j~_7B5VNesTkUI6L@NP-b0{~y|gn0`Lb~N;azuxHw{X*-SD3FYdpUBH6GvUmT+;t zJK7^h;$a}&JxoTA^wgm^H;d9(_x%2%%(m8psNW497;gKwVLZf4%LwrYsy1^6Eq`0Pn;Ft&NA ztrF~XVhy#|QK^ASjZ|u)5`sBPt<>HIHapv4Djm@~SffrV26e{rNF7w_rP2w&0g?u& z<>=^3PhNY9emHeF@Hpw47>`1~mSg34`nB9Z(cyvr@JZXG-TZxS=gn(ekh3a4@Qv5`!So)WZ zgQ-KsCc4>LR@RIxiR9g7C~lEb(_%}Onu`iyw~ohp$0jrBe7)JH7nxf+a$c*hTl`P< z*!FYlDn8hoI^5JqvubTI7uI?sA1J$N&|O<2aEScJ+!WzWw-rl^ypx^91ztTjFANP1 z4_q7>yRcE|yf@Xg`Hd!X;LXyy!)k)&7C4D*KV!2`FJQNHdiag%2}cvCQBDLyk$e_Q zIT49R*twn_NAU#&c3hgG5fB=>*aGGPmW@@|lZn8(*HzYCDs<2mDlv_n-pk~=Hg{+8 z+-`H0mdT;IsHRoc7E(DE+P~j1t)A>F1)E951{+FS*yI2h(^wXA=fu87H+!!dxthMc zw75JuU$n|J!`}g9IoWV%l!YHtup=L<(cnQ#fJBcEh6`A+uvoFyDm?>tZfIYlZR`gxY~4NcXF>CB z<00?n4F&l6m>iA9BJK^hSdR6CAeBor=-oUqIUWynSC-i;@n|CC*|@H9 zJQD4x-RjwuW1)C=vFbpMhvLDF7F;=!h(-bSG-@y2)Wh+f5QG`^cokBM(4&e&b21^s z<*U|em5v&!9ryKW{k0wS9SSvb&)Yy4(d-VFr-DdCIR*JjMFl-+09*(J5I3YQl`E*~ zrBWr;tElXwwi?VS132^;Lv)bJhp2J{LW>;7s53zA3ZyZ0$kY*{&M?)Z)Y(n#J=B!| zk;HKl!iyZIsQWZvl*)tDIYgbq)cFimFH!Z`22s}}DnCc%=c&wwdXdT#RDOxdQ&gUz za)!#YRDPLCxAohSenhV2wn|A>!B**Q6j77wrDE zu3mshb=P6P9uN#kjo5dVNnsV$Adq=$OOQ`Zo9o{buIB!G01_a7PoRK_V~+^RV>uB8 zvd@bsEJ=#(R{(?H%OYsKKSI!?FNBtTVVlqyMIvKT#Nf#I(vD&w@X~G&d zX(A3gPd?-Y@Dq)y?&>!mJu-emJV)A34QV=C4pIU3YU}bL<&9FkPL2v-5PfDfRgbEaDVm~hS*hLEKD5Ir$6_REtBYjhEQqu_Vx zoFLW+q+Vzc#A*OtGKU0!&*xVmjtG4!LGYs1kXNlCBjl<%WJtJbT-!9{bsSQ~Az#c7 zInIV`6i724Qp*oH$7;RIukrvJ@)bZ*f*~*Qlq`J6ILYL%GGpA@G~^r(so{{f^FuC8 z_){&(7Gc(JyjpU>Hi?bi3!{G@Yw-Q65Nz}T;(+D|9=w}6m^qkfOC8D_O15Jz+*K$^ z9tKQM#9oCdj>W1E&u*BwWPBe)DfQcM z;$OtbF`W6kYz*m;ARd9ZLpz(aR4q7Q(kEcj?-5MMTQu#TC_n9=G^gFcru|beZ6{27 zinaaLv{|Xq~H%|S>$fmi!hx6@s;N*X%F!_I2X7aB5ioZ_~<<^`$gt&df znml_3@>Bm+!k>wwZ0f%TQ+Hca|Hb^&N60UhO#PVfi^TZlO;i8Jo2ULhpSlaD{y|~t zzYbG3pA$A~ya-Qz>c0n5|L4V1{}<(^{;$ocA7fMh4otnmn)>hNr+%LN?uM!VE;0Vu zrm26pdFsE%r|!Y2|3P8ue^_SfUeN7;!SFtAr5Azt_HUm$Pn{?LYl4rNG9r1@~AA#)){{Vr+si5&{_T~oIaI5 z3m=5Ph6**H@(H0mu{U)h<;(bjK%OT}vwf`W|0SuDg+ife7Ltnno#~D%ZmkHiWYL0i zM^$qZIw2~;Q4t$P;Y>B{K#E58`;{|X6Koh)F!koym(#4*g2gtYQ!dJcvr(!u_-AmNrsuYT5@`Hae zvyxu+zZv|T|8`a%ymayEz{tg+vsEWp$tiyZ5QhA73;q*thCX+ya_G6Ci&t-+9XX3* zTpAp_cIEic>q{6t=I4eyKW{j7XT?7~dFR&bN}-(f;4bults`g6sid)&UG?D^dj9gz z;MJkCH_u$Vdh`0gSYz6pLT{nnYm?bttgT!axH>po$0@(6xMBF#+;+IG#b>rcU#+Di0 zSauCiSB9RdimOnvfRq#G3nwl*qbF^2=`_t@rq_hjmSd=F{7-Q&nR1iA%hK&QC135F`|cI z=LRguW&!@X{9?<&);6SvkhUW|jPwZ74x~qs9zz;HdK_sd(k`Syq*3Dbz(&v5UoEM* zyd0s!r4mByNxQ3-?fH6AcU7@1T1rYT4V2x)+?rce$%SVWVt%V!D9Zm_Mf4@e!sj+2(1msy1XIm%4fC`Ww zR6IB#1+-ado#;~AgdDKV%Im}~ADU1Cj#*`$IFtFMADyrTe6zN7Qe!(dVGq>K+Sf^)Juu-2)XzHBNrU6~gfq}M z>$ISUZJ#t5$1&?(@n@>ZIFPCUvtbYje5Ty2tO-9;KjGN5*KFP+FOREaeYI}Hc6Mv* zEz|tfr|1sbw|TrmIzC(0D$8!j_LYZ|8{XF?brm{3^M;9+iDtGfgWc^#uubP5e@qAf z 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�Iwww)XcjwIo#rJbLR3YP}}dvrlO%1=vp8YmLu3|ur1IMg|=HF zfI+AYdmIc#0fRO_bhRxQfZ>30Epl5cvqunaQ364~Kj6wE%}}W&6maC+E6FV_t$=r^ zH3H>>(NM`;tOX#|5{?wkI+IWW;b6p{=injK76eG)NVHXsL?Zz?j3W|+q44K9!GR)y zP!Pr|ik%8YvB%+X)bb_~ing`Mtu39ZpF76Zi$Ao7Jg@1l$7E9hgK-WE0q(k<}L7+d25tr zufNQ%1-!uuQW2^Mdn4Wh-ecZ3Xb%zZlf?Tm;{7Y){U0JZi6}8m4X4XpKx`i;R20!- zq|D4k5*JlGXa$!PQK^`UC8+VMdMPPKXQWaUrPWmQQE4R=nHvkSj*4rj*htAbDy^r| z#!5mxEv6-{O_Xe=;ubWiMYd7WNyVL1+(jL`sn|_P4;A-NaW9pwqJ;;k*h|H0seB`q z4pT>*ihWc(LdDlmF+s(CDh^V6B^7U?_M54_mfDA?;}%*pLdD}$9HU~IisMu~LB*4{ zEzqG`Y4M-YqBm0UDPJl{oZrwOs0BEaP#|U*!Lixwx_xU|b| zaa>=3zfZ#7r{V9j@b`K6`y%|k2!CIJzpumJHwZfWDEl@H+jrpa9DvIZS~vyC)A08S z{C$tuE&%r52h61(049G2zyAn-KZn0xz~3+7?>B^&|2O>JDN^Nbk&36_?=<|q37*fu z?>!hDGP z5w{x7Yy~1qjtRSEsj6e5U68j6!kQiMwBeeGE+RXx$FOYp zO_dNHJyj{nySraM(KRZ{&h9(lm+aYdFS+Y(LJsb^k4(UC*`E9HSLl5U5riAx1wr2j zAV_|Q0LJVyliGf;e}_jC9_h7Nv# zOu#hi9r_ZhClB@h1xCIMt$Y<=%U{FbC8$+a);nJIO~SoncE3#a_R1#&Ncw9d>01QT zMEUmdzajS!r?YFXApek@lH`NqoU*P%Q z`Lk|5{|9>>|201U3ZDOqKmU$D6ZzmDph1cJ9K<~R2ydnA zetal<0ODlL_*wC;w}~*yihj$A{-qWDwiW#=EBYNP z`duq}&WdKN=#&-xYb$!*ie9jy-?O5BV?}>xMgP`{{@9BCofZ9w75#fF`VUt0AFb#= zS<#Tst}K`8AI*4XVtdjzuDiS0e` zvx(T>3qMW7@c?14oX0zbmBiK4DR_w6)+wwe1rt!9g?Liig)&ljv{R@iMdfI$qWE>& zg;k`)g+?q&#SRpI^xg?&*ORgpokATcZ|W4nWX1a+X$`5U=n$F(QW@_Q3Q5%@LAw~$ zkHgPeQgbiaAw)^-u}-0e`0CJl#>(3|g$A-JwL>T;t8eNQib>sRC>tPad}vmq{+3Rm ziZt8}NzG(!W2fLEjY@~mCy;eor{E^*-w!!K()0vD(;6EJcL*Zc*wrZ%kme6S(mLY* zApDe)z@ZKSiFNQXc=VExeY;>M;Q$||mM0;xoAbm9SV6Ww19kjl z$4B62BiZ>;f~G*a9)wreN@CDP2RSICUg{Qj%_vK{YpZ}ZGTbPpDGKpE(j+GcH?ygz zu3sw5pvFP8Uu}BkD22ppvAA8hR==)K%nXV8^<1Qs*BF8t!=~$D2@(%NBATq!-%9#u z{Seh3AShItvc)vgs6Pma4UqT{L7(hri@bt>uA3ZjCsQSJl9+=udTfyTFp0ZjE}>C> zCt|2blA?Zw0PJ@&&r0s|7fGe?Zlb@3^cBQCF^@1*puf*(aguNm)<*qtqq!%H=7!L6 zVlDXq(LX@qg{eZ6F^v@y0H=R2$JAu1ybdtFft3=h|Z;*IJsv?uBMB|HRV%1RZ z>m>7H`jrf(r)o<7=G9mAZy_X221rqW^j!w2UHC4Vl+0kgRBhas@-@U(N{xEPNLm$N zom$P4rkK4)399de>K6<|zDM-$aYU*Sk?)guT^=fR(ChEzq4GUueR3E2)FS90M$!Kc z2ks|?=hq2nLB@gVj2{sp^Ji>UR9%3XfyyUc!p{hx4Lrt05)=QG=>I}8se0DdMAdoy z7tsC`YxE);;-dX9mO29+YY>cL7xe!i(^C~IA?sIUDz(;ETm;cylQ_(ewVBkq>D2mI zqtxg@t(D(HYP>1c)U+?wDDtHLHIw#Zl76Si-X%^kiq6<*iozVbh0RCll&GH)^XB7# zte+P9WwUs{%%LLmyNF};4iQy#-Y@F!5Oc@stZ0taBjQwQqpuh>gB}%e6gE!b5E%V^Of>p?i1qh< zqA|lK#lDJob5FA{RH45=zmpgAC&X#v4bBJr}O&vA#u9ty6J51K0K>; z&tUId&^gEVBrA@xgZGV{L}s$g>?h+I{*4(M1N7lrjSfN15gWLrvcwIPXns(%*mnw z0P+>FFHk=e(7$S6cP`dKus8bG5W3Qki0I#7F?2D9n0%8xCB>s878MdDo(eQ1%hOn? zrU4^w5=PVm`yKr|b9DSX){wAdqE)}Z9`OBqkHvCdQMD$cJz@QC=K%6!R{CTSy8ZjR zER3IU7@?+QPY9v^J$r6S!TbH`Eb#iz#9gHCUF2~R3M;VlDihiTv02z8$ZLeng5(yq z2#Q~DqC)`E|fl z>HnQgJp&c=KZu#T%xMmv)?KDY#!RYnI<*~MZUYR;tMJwB$fS10yHZ`T7*Y&rDihlU z7~L&#BF{dv(~|L--Io3G?lF^YXJ6iZ5}@tD^>QCz{eZ;3@dqTt_yI|OP|9HY3diMS z5o+~4BpGe@qZjr35-~OgEWZi(4*x#>d8l#5O{c^vWsI1ngrUn(c@Y}DxswtX0tx4Fp{(b<@ z=Nf!P7^xFdl@ohV9}tj4H1!W6PQc?xR|{m1aE&1C6%GjE9$>i)mggBZYS4jaB>f{W zIQwC-DaO^c8Zw_ZGoP3A7o>BL3(Htps_YCDDnY)e5DI-33hAGdkTXivKt?Gl-W-LD z7bToVdtSLn9w5SBNcvZ#_@UIH)U}qMPJFx$Xkiq_>Z?5W`uLvIo-0dOaoa1x@^~Yz;;hX+X!G4fI0rM~J%nW7 z=eYvziL4QS>P7O@#g$3!n6z}Vod-@1K z(!VF6MeQ=|ZUMCLQ|#_PNb$kcAS9RLP_4jaS>n9o&m{flQr}=^Xi)!WoJcFMKm`=I zQ^o?o-QFqdcggWoDwT=dj5t^+s#Vy64Th=VkqZ zQTG_utu;&hl$CfB5q>J`|6r6D!4f{R#C?i^;eCq!W`&m+#S$yAxAjos5wpZ2%0=>J zLLPwuP>kLlhY#~z3XI+=bCNv?rS+#+e(H4qW;JFwAmekG@p&v;XC{3elfHpTYgAQH z-vCK>sn}SzaF=?Kyi5rG>=iNWl`w3V?^gA@)p!*egMb%brA$-}DEcY2U&&zv>xBB) zn9``9Hj_CsXeOUgk*n%g7;U{5%B0eOXuV1mHG_oYeul%hh;Tng;(mt2{R{~V|B}cL zAuh^0RQ;`LCVnDy;ssnGHKbqhlc|$0oIJ}+??0fzGV)yl>xiU3q{eT}^xR4&ZUubb zfjx-dmb%UAgsMLb~+&OAP9di0~40`ELoqpC1$PB~|~rIyGGk8xs8+YJ7rZntnp2CY%1A zOioWW{gh0`CJ4;)Zz8O9h~WW%^&JDl@2L7Y14DFToKfRl`F&OY0bscTvHansvHTIjYQnwJZh-ao29|%X>i@v76iZe> z{eM*BcjaIiy9;W1a4YdM%rFpSsrt_m-Ug%v0f6@l6SrRgQvX88FI4@aI(3$*$?F`c zeLDta}l}QMC89Q!$bsA_5VS5%@T9J2}GJ2h}=mT zB6m{#ZaT&AI7JyA7Y#g4Q>f=R@wkt2Jnp0V{nWzaEi`^A7mrgW9uHuKi3g_Y4*BIIGJzmrb+N|1$lgd_5w@Rm3#k7CuJiOPEoRNhPV$sAN3r}5Ld zsGK%Yc>*&`R4`Tl0KyBIs61_=@-#=~X{tX1s1zeAAK|F{HjBzfv1-^{1fFMAe-G>f z)jvVwZz7qVHxUBdNehm58ye+#z% zHmzZ|Af6?HxL0^55y-f(iAd;64j2TDFEo#8xX?VR>F?5@`$X&pkw7_1~{$;*XN1cZofZ z5^^m`yo=~hXnps>8@re2AJY1i_+upY7(tVkPipy7=P51!9X_pD@9-I|?+|+e?sVvo z{t-lf3u=ltoI~=nC;l9XkEh1{@n=cuSz`P!qf%^R#;rly@J5VPnc^iw{jD98!Q}~p3CatDN2X0A@+W^Qx9^)eV zBgwgxrRk3S`}TG1=yh>f)*YjO;=pX#WoP$(CZEOFYUR0Lv}5r?HuK!JO!e; zteECGDREfdWYRU8)28=hnDD;w(ecF5EVL~Rc|tFq2A?lyMs8^+Xz=CC$}J6YgRgmO z=Q6r7&YNdy^~phQ1e(if!zTb;ij9trC&#ugA98GXWH>#P98`I?w=NTsfuP+S%+WD7 zd{EN58(sgx(mC zRxP(520ld`JOgFQ1M?)KfRVWSGDt#R4+2B@}LMo{?hT+-v~d>e$?DPUfxqFB|pzp>SU`rAPTsR(yGLG%Ht(qB~(l^@- zCI!|cTr)2ZcFwBH4O8TsvngT9L}tC~_#|-e?LOGswXf^Ikpo?wJ8!rgnvlok6=dNe zd)&42a`=y2PVoQ2=h-EB>BIS77&lrOX+e9Hfgrjy3(3JyxJ3>IL&0+HeU2^YCyoP$ zU{;h-blcHAl14=u)V`O4t*ud8AQ;`~hyMaHN<_<{U`wEM&gD>!gj<73AP@|MoVoK- z2>_TtXTSJc{Vk3hE<$c;4TKyyD}x;MNBnXq6o^3mP+M4T3${iaIZL1%iG%`jFpTEe zTB2b&6bMG-a7)1Np20wcBaxsZ=ktQbL#+XYajTkXR={=C=<)$fmcwCxpkM~OB)5cu zVQ4VumxIxk0HD><)&ikF6qZ|IXyw*uOPe#7t&m&VB0)LY>W?^b-o`AcGgWc%Nn(SH(XAJPAIo}8!Je~Z56jmb|NYolRowk+aXHO&^L1vp;2O|q!2wt zkYY*-DDhBIf)+$&=5L5pP_dHARp>;H)KIw=C6UD$lF0SwTuxkzQq1ByssNBCDsH5z zA3YP%7OF)kX+@c2Z5ySXle=d1=FQ%X;)0GIl(uv3K?heZJ1gWaK-s;5jVP4o*^5Gh zg<6L|1yZ!KLs(_Elj5chVU0ja8c>X`^eU7J^zK7Jy|Vq=1yL+taWzWERj8~|rK1Dp z2B|7WfxPNQlq9TaN6EX|HWUH$U4xQ{D!Ic8xj*G-Y?$CGjsd3svg&|en z)2H#M2GzO+eS*oMkRcm7oW^s-A-jGz>2t)LJx*cBp`RkmjiW2&O1V+YBIdzUe4bdC zDohoj6GxW#CZ1T5DoK@Q6VF)Hz1hV3cw$+qEMA@}kF9{DHxrL(686cZr@MD5Zh-{Dm$ieX#+bQyZQ+YxuQ}ktw22k@&_;Y$Jhs`ZVIZdn(mD+0-*R zmGVzE?VUu4r^%+PIIicJu%3y?j|lg(_9LSIn2X^_c+2I||H;7cpHLi*{G8}N&uQeJ z=W0Yw$=OE!m5Jd|jmg2d^j~HDkyGJU0PrCB4TQbof1%fG>9-Ibl79!`waV`yyiWZe zqW_xoHDyx4p(gz|*l;RnH2q)ju7arzr!VNgCGk)yl!2)bCZ`8v{ddN53wu`d-xEOa z^nj}Wfy5&`D;jGh{VE`g=jlo;qM}FgSD`cgl%YL=;yVr%&^`uOpAk*0`^9*BHn|;>^#{a$ z${e{-MSVRq`c5W-bgl4CY>HsmD`L1-!tjucVZZW-*tA=JRLrpPXQMBrq{*g%$)-X5 zT_RpMCMTOx`eWi`KfIKiC!2=!cSBs6Y#N?ydaeE*akA+a{k`HO4$q|6uL1@x6N9G= z44z^bJjF10iec~+!{8}~!PAJrhjTFyQzFCQnEs4~!AEj1_-Gb`5&dHfgJ(GgALkgj zWmQqXi1X!(eB@=EfL|1GzPtqCaq(pcUnhMX!ZGS z&%bwX-OVypfwak`GAwg6yuyZvpEW#HWT4hllPfz^hY^IdUj zDz&xAiC*ga6;_5>GCwC`a(a@dO`cBp^^7Q$+ZKsQ<5s zv^UkkL?T{g51Cje6C#5u#kl%zgevzjxg21S?vwO4OMNTrhgRzMOY!Y-SA0imM`~w} zi^R4=tp~7H3D&BIS`VAG9+vd8R_QLY^gFS1sp$yBrEf?I@!nLgKYlQEkOl0{<^beW zvn!i_ax7@h*RVO;Y?!%#z03i2bY>d%y)m?~!P@p&mEZrTV#e3NaMMf-(V#Cocs2HK zt|PfmJD1VtStDp%-XxDEnNJaBGD%8|jal~wi?9W(4H$NBO6TZ7U3k$BLX1-?cJ_|9 z2y}e(`eR4y{LBi~L96R%?ajr`t=V{_o41x4cLX_wpr(TxF=tkJ3{#4p5vKmSKV|H9 z({3|?ox`O~x3x4iI)=8&oyOTB8wxu+W?)fu{Md1{IcHwENJ>ya*e@thYCeE`qY~Gld$FP8#cMcoF0H=t@ z42xZd&|vO-_HUU*-J;i-UILlNKRgEX@k7*WW@Vt2h@GS3Y1@FA;3`50@^(u$ zA{tI;h|*4pg6_a1hs{N7g#?e2#A2$HQW4eIZ7U#!9VCfWRCM84l3L@gAnsb?_7S&( zpl-WVfrm=cYUZV84OJTOEQzeA$_7dT)E-2YZL!52A?{Ye%h>fvi2Yy#x=HlN1xKe|=a>0lDePYK= zyBNU@yhIF#2m+xb${ZogaDl+RSg+=O3|8xPxZPcIE;B^*dh}Wb1Fh7-?poM>k=O_X zc5yqD-_a)_d!0$iDP=Mt={r%G4a(BDh>*Jxx7x1dg6O820qh;KqWrt1DA!QEn0 z*>*BvgUxF&N$O7?6ZH@lOCOW;FptQ33y&yzv`#pWyS2M6c!ps!mL$_ts~M~|+>*!b z5UMdd*In6!dvoT{aSM}PS5r=e-oZuLS%Pa4o9SdJGD~q!Vtd+7RzoIPDU^iz373S@Z$jQ%ku+KP89IMRU=y_$d=oZweq zWKyeQt4X3xABGJ8Lnj%eYT?%a9jdANQTFDe_~wDFKh`hj)LEmC^h595iF$n$Bd$b) ze!O3viYY>3t^PVpYFzVk`b1)#J`NQT(B|#@ou9yB7`e3{J?N>jEGy4pf8U7xwE?;t zg*QUq$Q}9}tm0P0;JiLTrZTDZ(DI#RDh~VV4G2HhM4*YgVMFaaTQrEL3ERa}L_b9k zlKv)0-&ll#jc52Y-ie?tc+eZuy*#ChrRevQ=}f9Q6VBH)S zL+OpIbh}mhHCIwf3YH@TzbOkI)`8jH;8eqe%Pm+U>veDEFtaa|7`xqWMRS*7)2yr^ zX+ehVM{eOBMN^~79*l9Wydbyrx?oGirN?2>EOuF9aIkmus#&NO#LxsIju7vY!HREO z%+On}OkrVgQI)b?M$x6E`9ic?R(qZ1s3Qx^oEr8fZdQPK7`xr_c$fl?eUQAC+kQr~ z;yV|Gp~=@=V#wGw#lI*>i8TL(p4zhgmeHu&hDFs!#F-^9E>;p)R3)?fSkZCJ5*vsv zs&|~ClVGZFXOxDuEp0e`kQH(aCDJC4$WmKntz|t_N$K%1 zd$ybph<@YZhHiY6kJI~3F{ z9WC}&05h8Pg{`hahgk%eQH|Yj0=wy^vYpBWl?1Og)lw>Zsa#H-mFPH2UX7l$v^px+ zQ+X|w*W*p39Hw#$l_OMcrE(XQcT>5C%KNE$4V8;+*N6_zL%PZ)R6$)KkYdN0i7LU> zAPA-F1VL*Oh*r9BqDIt8E28L0vBocyZeiZHoLj|hogLd*xPyf|Sr}vCE*5sPa1RUj zvhXSv?qlKAEIdGJeKwmw9CC-?0#xkCXA*90Laf{ltf%DJ4$P=rg||yeHC_R!CEEp& z(1Pv2o@z>mpaN4=gSS<I`nX#7?&D)Br*g{ z9dN3^j*^`hi9_tVNSx9xy%QK$VCDLhxSHuv$&jM&WU7O7LOZYTLLZJY6DrqtPxZ?w zo8i9kg5HC^cBgwB1Q^LieOJHyB9sKaBIPX2y!xuXcbDN2%moNtbIz|HFibT_$Xwlx zEbn1vP63!JZ9oRTNog2R;fJD^ufrEfHHlv&HDVuXsUOkfz*HeZ{Zl84zJff4Qy$O< zxQEH7nTN@h%IHP1N=@s7z)7WSsN+3^hso0^4?IB=`fK~;vqh+1bc>OGt&p$*i>4~pD@KGAT13ScNs;pNh4f|no2e`4}#NPaUW-%s%B z>n!TUh}b{XbD)(wlI1GKYP^qodgl-+-X_;%}$@sb6MSAxC97AW~7yBpHZ z!{`c6l8a;md5Y*y6C8#N4#Ii;88USi)ywsdkhs>P37GaQW4JVt%F0tX$DU_UyvPyP z2+so;Kfy2{z5roR`UHd_`I8Vjl}{7>1ryK({SzFevXpZihWpdFV;N9AF&yd77+L)) z47WGsJ%jM|&k=Z^3)Tc@25$>3InY6tNn86^Dw?& zCeyo_JqTH81$+q1#MC=JrBH5`6kIUZDP~jGugCx5;a`DO;F9$ zZgH4v<10~P&yN9en6;3`U9A7(TrSob+tr*Sa)#$kCVyGGDsLfSW!q<#?YlDEB?G=` z25?v(az(c73<@`FK9snfIeu}Xi0{tPac-YH=h$dLsczz<>`-@qY7snQ`b0mhvt*+K zo9pJ)wk#OqoMTA`uN2D|9iLyI4u`t?&i;@rv#O9;EouBYXe_ z6oTjxKBNaSDbi$*i6nhq53z+vZ<(qSoJg6Xkazlm2ahewu}3bH$L@xSleJ{>c;>-bq&(^#ZhgJ zBVN<@Xmi%AF+0yUzwveX4oYVfx@N{~Fw1R7q(eCq!A#D6)@H({e0VSc%rjYKAaNp{ zEHWI(=DhjhW5a2dnv-VuG(W=X6d##gspQBUwbUc5+PZlxbBgi>>v7w zg>8YLdVmEggg@Y|1X!Jwazx**RZgWI8__a zADf0uwLlmD?{i&6(*LL`y>$oB2Pnk&Gk!*{MakSV7W-Q;TQIM|7V%!bFordwMg zs)`x|`cTe~gUgYMl_M1^M=Az^CYS5g=Q7Y@jWHT`eiEVhW%o#_XxD66J4Q`V8$lV5s zyUwxW}7xQb| zoHF}U*}d^4y-_#Jk9qbWz@UEl-&DTGYWc|MiE;k|@Mfi`X_nHwK)oD`|E!x_)66)X zn~w-uYv_>J+FGS(FjP3JMgcnF&Uprc)utlZ(WuvsghzHU zr`teanBQ%rJsv6+BFRz8(CM~ZWvhg}FtRO@tRdS1n{bsDOt=L}W3)vn5{pYqyeuqd z;R+U3u&|og9X3S}C0hbNMlFG41GeOhV-SeO*&Kz~kvhm~9(922M>%{LC7e2x=-zYN zg-nc)m?$tyhlG2#u7MA>7C8}LpVB14CVVAwBq&IT+l+dw?H20wwXjV`Wo9V@e9R;i zYuuGX3N``|zp>3$tk2aIccRfZKki^zz&=-d_H(_O&ar*ry2`n(V%hg93$Mbz0w}&C z-*Y|JljyvJUsu7N%zEL>_uT5l`|q)?+m2&aAkzxT+&-p&KPT|14!#*>>rnI5ul zx-uIiu8^FII`oFCs@NHJc(RyOSX54rj~>rgV9D_rn!n-T`c3N>7^dbNA4%-H%u`n8 z`pX*@2g7htYG+P%xvyxZ<+^U6>Xwh+e6O&EU#FRVU}v~SRc3jEcIDwSOSQUbA$)Ql zvTmADI%hF7>!vHS&*G{zGiHTxFCUD^!PZdFAnS6lB?1Z2P*@H|f z@)c#P?vaRuOkqW3RW+6@tQQ*^*REsXdKPYA;YJoVv(V4NAPYk*470F>g%K7;S=h$H z_EK@{Hnjsoxs#=AC)G8;C(1TYhfoeAy%G;os z#WnOLaxODefYR|(LmvI>*|zeRI4P4P^S`HK`gFuvN7ha`?6LI%SSk6-Zce zY$S0soxOm@t1Tu6nQrbLIXQZZ;Y8SEjvMmtu(I{DcTZOR_PqLIS7vR@HkiF=vKri! z+aM6BoGVhp)A)|%A)hxA^V~qsxYg{ze`DA(=TXAQ7bw0^m8XY5D{vg)9` z^t=n}*p*pW=bKW8XG|%+-UeV*4EkF_T6R=moefx5m%+Ah)R|keD8E;@fsg}jVZR2e z9QBH29$4i(?5wkdsa7iNY{Et*Cp+|XvvW@eRf?!oLM1P3<54J1@=<9ORqLp_##ToZ zcJK*2x;h~%#9=SK%OSYR_->*?tgNo8VPP!`SF&(53+qW?k&O~Jk;M*J?bvAqtc0Wh zmlx54TMXPk%cPKPCzQPHgrul-z__>b?L<4S5AE;-L~j!lK-&x?Pt>noZen zbmGp050J05AryA`Q97%II^Z0O=K#ED`I~i%z>1wqCXc(i&2)TnAK{Me4VUww#lh*y zt>Zj$-11o;SR8;HFZUKcm?+~YF=3j;bP0AH2!c~k?o!I+o@ef7@^aIz&fLe);+o2< zlijm;&`!|s$cdy`p?(q2fGpAk_jFE%3$i27$&x64CCSxu0h&>^Z4r&-9St45omVu3 z!T27S@*T=p`_iGABRa>H*1>zo+R;Xmx3RZgn1;>F;EAKj!F|bF84Y(BRyf#X$oq6O zQ{La5Mwe{n-ZH&%-hshZoVh)9=z zqMn&ER}KXOt#TmJ;+I3MfuI~{2}G$u9B>T|%K`N8h8Kr&sHLSvg2^g}!YyHU{)a0E zL$K)$v;{(*nIu6D1_N!>{5oOp><5^^fIA=6)pOFp_B><*izw5a-@QmA)Fwxw!KmC4 zX$i<^ZlXZJZLg@ zsZ@r$V7Zb?)r^s-p~@<1UrnWYDy;w(f;yPAlH|vYu+xx`r_xp`?V!?bD)pe7H)%gr z4%iNewo0i0SqVW>VH+yBCNx3u2!d7w>#gFQC=u;0chyAs3c+3rDMf20e8gVbIMD!M z1VTZGP6RlE;&S)m4jYQXLrJUHwyAwH3%9Uv8w)#F*vZ1}EZoV$E*8dExQm6|EZoDw zy)4|v!mC+$4GRyk@LCpL$HMEyRc@OoI6MWYS1**a>lIRkqW7Y=g9+VBl_>ip12Y7D zL=h;FZM-$ucsp2{R>5@jYfw1KUW@Yjjxuy->`Q0kJ#VK&QZEnFOmN0QE zPjQFf7Dyr5WFT(Qxf3cCtwQFixFGjR+7!mw4!hGGjE6Ct(a1_EBzGgvr3u}759Vdq z-HK#NI9&~OuECA=ZbPaE6R(5B>v31f&SMR=f!FX`nAhkD28L~q`%$S|hIxj(-8dE~ z7sfA=6=YmL!8F>PnW-M9$jY8%?pB}$WVqe{E&N%$z!xikoHwFIHfj_cfSkM7ZrLZ? z1?=8RayQZMMoF9Vp0y}wa|*V#nW>bF`}H%hw>?eRlPBdl6Dx#G_}ygc#q{~9OiC<0 z_v)+q8LrX|Tk$wRzMo0{IL}`s4Z{7Xc}?DeZHNyL{Q+!)+aN_DCBS?dz&caTGf-ZC z8<~P;ien|Pv3`I|znH!-%~VFk((ghe4>MhFiOR|&C>+L}?PwRUm3IUDCh{JXRTAF| z;YR6w=zb?&)Ker(6rI=KN6?V9=T>a?1BCIl-jo+w)>7IF%$WTLXQZA%Nu&=!!ny$^ z<$ZBLMOEsAS5q}bf0B4M3xcN+s(qMDS@qcHKQnioCs-LYJW%?2=*zQY`XrMydye$c z=^?6roJ^xdf^*Cy!SjUK*#0DmS4_n!2)g1iYd>c?Na&Z(atWu;l6Yk%Rtcp(j|1eu zX%vF-`3if#0pTmmg6daEA0H0b0(=dPEU>r(k3cd*<@(pLs?(b4E~IJe0Sfn$Q!ZQ} zINL4|{re2u53pK^{zE)KDb|04wcU8v;b)w@FTR>z|3QG#5h#9k4*lw66A8Z!b17n_o6#nVx&1QE3Gf;)aXLKG#wo9>S&C96MZm@uiv)!?rMrS@LfY=wv-k?T~TYn zxeXpR8r+oE;0)=-q9f^{(Gy1p(Snz;@#X4~7A*|rJC zIGZb+)hW-+mTbMZALqs#w_SB2J&smtPYw?zeJLY9?Msc0`36Rh9Z!r6!`txz7wpR! zIN$iFk2k(^nKW{2l z>_E8k8gX}`6f5j$`J*Xd84UVcnXH0W^Hwui1-Geu%S5F_C)+|4u`9GnDx=LdTMeP2 zj~y?<-b0;`f&X_*$f7`L;e^Z04j7BY5^rf43sny$75SsrKy?w6AnkjuCXaj~r`q4kqUCXAq+K1_!wSB=1l44xr zRv}^H@e7aL%jnpgL&Xn*vLE(>MvtA{0AQbijKc7w$8Kj=A)6O}Wik8szI!2&oFx@O~q`b%?3gAR<2!EP@Nl;SErVN9C5 zI!_vOBbIB=D|fllpobCUrd*IrcAiHyQv!bd{8;3no+s8xjYN4ECZ+*4U6LoCX_Tm6 zpb4X{$%q>BK9}#6f%5w7T#B+cdE59Ui%N7|$R1VL0 zKU`!q*e10`+Uz-)1^g|6!dV@0=GJx~X)xkaIMT}QfHj9#)QY^d><+lVya2YNcoT4F zimCDRb2X%-t+fjTFg)vDHOke90MBgifJb{WiA8I)LqC2YbPy@8)5O5`l#$Cw#6 zN#DS~?hSf#rpXgi2^Z=njk-Ud*(!;<@hs5KIW7ohNOXG^V78Drr^nOH2f1&71N_{SxDS;;A4W@^7A7pvHg|-GN zhmqx$>;qX?)=sVaYQ9Mugw2?5c;sZ_=WzjgBudb~8H;*|M}z zo$+$!+SqE{MyAT2=`df9tLD`BGs@C#UPxg#X$$V3+Ktgv`A_>2J27nC6VFSAUVFuv zEd!y$v!)Q|v!WqCD$a!DKr|GQ1CeOBc7d+B^C3}l?6b;wZ7nt~u;O)VMOvxXhvbSD zp~#BJtby}Qq~xG-0TL~_n5rd6v`}iLkkXY@US(TJsI*$YC)@fPEJ{q2q)dK#9`zPTQG?e z*JO@lIp6PYUMj>~bha+Fa{lAIRPDWgD#zno3whQAFb>)R0nf}a=9WkTuo1-bFuT|3 z6`9hY4Q0iVg1L~0!G=r*I<~^*;H(y!Qd8Y{e=RGj2oFU_zfdU)SHE z5`5^WBfItOQ~Y5^-K)FxuFMpwF6%LT*p-=L?ihDtvFt+`=PNuyM%ak3Zx={Z~W-9F}6-#X{Ld7!1T+0Fyf9)R04*%G4MFqKluTvheu(+s% zgvYd)-hDF5L#utl+)4V>j zPYs*%L^`=;XxIYQEIgd9~Q+7;9p#wbIc6(pN&_yzr%DZJJO zUZ-*Tq-l=B$w44L-n%PL1wRmX^FxGL=c}A)dXmg>M>5J@OEa46ycX@ynAFsL@N%y} zIOI)P$moH)JG~Dcjf3*yyfbxPyn2qb_AH1wFF^!bHhtSlRw4_GQPKTNq8GxdSsW)l1h-naffOmcMq(U> zrwk4^yAGyIHN@tt%^PR#7to}a=9}}b%YKvDI_;OLbN`j&p%^P<(x|}R;eIwHEZ)k* zWz!{aL74+{IoQ7VE?jCjie`hzE-kh((+y*A2@M%H{rslND1^-RytD3)J-~-&5Afkj z53q4`5)DwZGeLh_pzIPAvixeaErK?fRDPTSOe!7@bA^4o4Q=%o;uW`4Vk2shwHglxBI;S;p||IaRIK8<6^~Wrw_trU}qu zeiMZ!Cn*w>1b+RLV{ff4ZbQ!0j{zQ6P&~q5-`WXnk%EnBewN-n0%Ql?6ABaW;OtyB zVgDE`csmk6n9T2S>%Il0y=KF0p9k)JD$o`R|+#ksz%{JQ8CyoPuG(46bH|&{nCqfnj@6HEo%l7S(2Gv~*CR4$@ zDskLBm>f8oKxDY>=XnRZF4`7a#`r8+f75*|aa&Hk*IeOu0b^riBnMeCbAx2;ORU|I zJUBcs?ijW}kl{<%n&(c#a~k7^>V}T2X@mO6A8AT4ju>9yJS?zfs9G~i4_{$yE}d20 zeQ*{emND;IwS2;Ico~G{@VxV#uT=hEn;dA1pkHQxR1O9rt$f!EQGc*-)}+D<(x@D0 zZG}Bfz~5GJ=@!sQa!UbU)4Xd51m6d7b%zXF??`m(OWP^PGvmfpxwAM6H!;OD2 zpU4su;9#DS(TsQnm8wuH&$Y^MSA!~f4b;63og|~#!u7TdB2^+(YDMc|bTjN}Y@5X# zi(#Tmc30j*91ht@3QE>a)DWShX`%)T*fxsI&|?;cSQutu3k#zxY-3?N3pcTF3#qEM z*-5#q**b&*SmH`Mgc4X-Rh0f0olG7~QaXec0+B0l1y(9M1h>OM)H2)`QMMzh!u42F zXRgO+PppTp$35J}U&h!2p@r~+kb8*d9=b@J=rzS9UVD+arR(%-nQ<{S6H`%21a+jY z!yV6b%ARtdN!1&s&NBCYH=<5gzx+6+#hD8cNe0kq06l=9YlMM|q?Qa`Bt9{9k*t)C z>Vxru`kn$ZQE*;QaYM@!g%|XpKIe3*XvnF*b}Ex9t`iat{U|p%UXIFK$I#1V%E1h` zVwP!S9O{(*_|;eS<7ksw#_by_Gu_Uc{(rq)S#KNH6`tX&94?|rbJap>u@y(OGQ*v+ zyLbtesDUfMNt?x#KvEowu`C6qEXOI@5)KOV7v!Z+1^U*91n5)$g=qusQ-4F}AGr6N zJ2NClBuy>x%f)aw_s*H^p5=b$JI}xZ`Hom1VdD=kx_V?!F#fphu133+C{&~Ulj)h6 zrpLAFe05HrQ=tLVW7hV`{>=}?t?h%-z$BVBPHVRh4~}Z&dp&sIK(Z~X4q%eibA4n_ z{ruQA>m=7lodmcK&C+}3o~fO|-yfe=?vb}*s8eXMwDbmkJ65iAYLOi1xqf5lQtcpx zy;2Rk+nHf>*H10kS%G!>`GIwoaQDZ&95gzf0X9ahFo3ly6id+&R~s8O-~jrrkjt73 zEV54yQ8-HveTV#FWHuIpl7Or$uBe$uEkXr*_rd`BPT>3bsYe;5VTr+dWGe|BsCu<_7DVq5=Nvs!s$kWH>{ zz+p)KF#~>oLB3MI2*X&aMvDN^fBQg@SRs2*SJX`ExRA632OHE7zNo}#@e-7H199<` zL7{ou6fRub-M!nFc0qlZ`UO3jF|WbosRPcWgY;>H^HK?J;v*T;^9T-WHQPN&JU83z z)`J5arAGu-?k57XX{5@hAkiAUn8@&+Gvwq?9^q8}JBTI`C>lcJ$I0}g5}<)YdTf*OkQ9vvt9<1yX@#BIk^M@(e`g2LS3JmCTf)W*zMS3 zEE>6G0Z&`s5m{lJt&4hz1}MzTBCS(3`{Mfu*CO=B02R;HAujhc8qIe5!d~am-;swV zouF)EmGAc#YbQ;Jg1*pPAY0y~F%uS?JpRmjmlqAHI%2COU^d`!zYW41 z9mrfZDJvQ%_dBp;bO#pG?~q+Y&3}lY%L?YrY+&BZ<~Cmy(w5pL3F9HvpG;3c1oD6B!fX?Hq zY5=zblydEU;JSG{YaL&$2JwgxgC%gbt?rn{1I%uhm`a!hB1;&cw&7Y-3qJp%s!#jb zD7i5-Z*zx;-h#Wa!nAd#3ZGkc?2LJ52h_o^jHvDD4BTEc+|>*=X7kQQZU?=99w* z51NlFL{E}w@R{A?9T_-_boRa5FZM*%Owg3Ca%krR&e5@~pN?Ua$MzjndN+4+i{&?G ze_>9%g=WZ;PQXr6Xs9uA`y6KV!+vTh_2^y8fJ?S4IcyWMnqmj z_j=aS?6L*4_5yJkhe1*{C~+aP%pw;9B!@^D%x1yu=1{*&vy!mvPOy@gk;JS!LklTz zjDIQ+MLiyp<~lQMD7w^1lJ;^ZiBZuLblvH(q}>{&>t^E#x6H;^Sq6SD#)JBuMnhdL z43vU?_Y>V7#GokA`2mI%6--B=LD9G!6deH2{S`FyDusH3;$H>DzY2lT16D_E+NeNS6}qB2-`Fst0>8A7DM{w8vDLMpI_AyB=iI}sG#F^ zSRpK)l4+)IO>uy1X0<#q<;aO4p8WiLGtP4Y)ho{F17-6b*++@3HfX`O*2e2Eq^AIr z^H!@#oE>&eAiG;f6D$hSWwhuJ0hhI0abo_G;>5RqD7A^Fcj;}b+TZOnKhZPr?u0R_ z2%%dlNov2W4*Qr4gCIpZV^_0oVjW+`LbRc=tIriq+ zrE=~VtHz%E{M0%_UOS4k%9VQLI$SQ7?a}IJYOWY?_Hz*CaG8SU!=gU2>=ULUfoK5N z`=%4YNR(4pSFd7l2st<{FV*FT6~2(fqm$~5S!F1eCD#>6d`}W7l|zumj@?SQ17zI^ z(lYFPCxo%%q${9Pdf1yXRl~1BUoliQ?CjR^c{QgM zv|3KzZPtrrwb3Zm>t(I1@7DBuvDqjUnp#0E?AEkmUeD%sGxerg%;yWGx~l2L9Rw5X zm^0DO{nE}qw{{!p~RrXLz2MCYCT^AU>0s!H?0sv4;0|XQR2mlBG%b=G%00000 z00000000003jhEBV_|e*Y;R{Scx`O$eOYrGN4DnsM9hCs=-otawISqtgQBF{h_-Bv zDBJVaQ3Q%)jX(g6#S;71PiAeXC9~?}QUD~&5#1s|RAyE#C(rVo@4Wi&uTRSte#=FM}|JFR-$IJD@Bznmod-38`(fBU=jsGqhs&z1uz)f86h;pZNdZ#Jl9>i&gf(@%O_vZOn4J8Q%1SAQVpW_Fld?zJU2qZV&0cF_z+k z6AtE(W+QpK`YYY8S5Jv(?Kqys$EP3F$HQusZ0iFmKQSH4t4V7sy;`Ps+jyHEH*)^L z^NUTqfBgAn@!Qqz%l*sZ8{$A^o4gp8I6{Y2x}V%{`R`xW+s~5^+x0$~@8i2AU(Kg= zc9s~zA;zIkef;u8)f8`Rk=(yX7sqz4s&=N0b|(MzqVd!wd+Pd@AJP5uMog&cJHOri zKi*3DwY2fISCjl@v|lb+yiXU4WpX@2?H6Uf?u&NYl)sRqh2tanTkdQoY-lND6X|BY z*V~6lHRs!Gw@+r}t}iAy@Iuc+lut8%lU@3-%0%VOV>17|J3RgTG7LiOk;tR+>E~Ts zRWF!#F|E3gzmVjStJQj+-lzQP;desz{IA&uqLG0WXtcIpe@^)G*SqJ{T&&?I@w;9V zBtIz(BNmYeg$O*SyJ@p0z*O=JDA}&! z<*sbviVrVYPT$7!N3rGG2giJYe%mgR?e+HIAa3jr%foKAdQ7(bW?apa=Gwvf=#G51 z=l82#_Ml-6sD&a4p+x zlFJ3l?il@d%|)DC!kNBWHa{Pe4PR7lHJ|<6bx-xu6U0JN7 z#N^^8*&UX969q;oWpo-byRgCH%H(|%qGdeYt|6OX-581xt(9@4FzX8>2UC#i=hZ|Q zwhR$f7MuNDx-{JE4$Kc7QKh>eLhapc;(4;0X8w~|@s~j*8={E!nu7y|u8z%dTAMlf znorSW_O|%xO|nT=3x0f`+vaqD8TBLI!-3rJVqw5d?I?uX(^qBp)1L0Nw!or#{McmP z(6Qk^-pz*{L|n0r!3Pw zT4yArm=VT2{;zb33B!RG3FoGUA>Grh?S1twPM5!}KBZ5|`mi5YLp+A7oyo z8@~NDU%&T+zWuu4TPB;E!B+QMuKPIbTS$kKdpNlAJpX*XT4cxUeY}bv8mhEQAIfaC zOjo88=FXpB>*5&8^#a(J=klNc9j+z|?9e&WZz`_-;x`fS4mp8uMk&Kj;@UBCrVQMy z--Hv!r57M>e+7u>#VYGP8D0}*MA6EZUrM6JkW8)#hiXAr(Ed|D{NzT>X?s_6ugsc* zNaAuzcI)L|_BQLeqmH_+HeorQQcE(h8Ni1_LtFSKD0W=o0^Z$y^7(|(R}Lol63HDDQI;vD(P^+nhYcgq2Fw;&su2zYpAi%g zc!-88`FR&7bKW{sHb#S^7%3r5sarJhTI3J_S~9*eFI)7PUdn()IW3CA+UoD$7nXPF z_aqY1-S5 zQ}=Z}1()wLoLeggiy{|DiL(~I*sRM1TT7fl0v#c{hPbCcHm6997_)Zoz+YF(xO4(g zlxvm|uFp+-H(mPZttkTYTg3XyDEk#La8$xwkunP1A`u??l{Z!jJ0U4$mX#@+9!$Z_ ze0Rn&@}bp6Oi!HmAfiZDe-TU0pD?DCVdHuSwYFnh97YV(_FL(D&W_ZnzjcPJG zb!HGdc=_Q{abW4G((WD}<-QzTi1Rh0IL7>FsQ3j@}@J#= zAMSff!+s?bJz>lu4EY?A_%4%#tF=Vmlus_358mK{glL2ii&t)3$|d<}Re1#qfjXMx ztZJ6ZPzfn?5vxthoin-1=bCk1zJKS*`2nlN+zV<~wmd;nkOTzM0ihV5UEIj>gB`~$ z)cszV+Gp@fak|-%XW5^k{)E3n?YOr-z*4QxW(Gffvn~o|af@)*CsZ z-q#v{hTP>+14h(56e@@%36Hh^9{Ie^pe`smfeu974uVo+6>E`T3h}zu7ii$@AxN-h z+g9i%cmN1*q&^PVg+BVoeq($qoyoangLaLlk8@GGTQJ#7{Y#UoYH9XcoD(Ko;iGB0 zn@3EQ_W?^_s>QdKtsP4#i0(amlValiqrXQ+198L(mg$)<8YE%t3U~k2Xg93PV!gt{ z`UN;699Bi4^32;HmvWaE-01L~?A&Es^+xxvpV31Rj);$z-O00Cr;O_frpo~}QKT4w zVK6TKHtij^F(TM$Nj;B<}f@unGG@te~T;eg*IWDtrhUV zJQL+6`7s+rcYy42@OMMAT%(M?cOyS7W>3w_cS_YDUET*W17eg>g1CDJFstqE)F9fu z*i72U;4NEownV<5Q(NQ?5!3AK-aDE3;j1@W02mZY+otHiQ-f=FoooG$sym?4h8Y>_GESNX9%Sa#cga9bD1ZEg{I-6L?Tl zsHWlXVLCx^ty<;6UfEPXzlhZy1W5$WJOY#8x#0`=zZ3PYIrP9^HW?S|2;VDLx1m(p zr~1?_h1Fb%JP8TxJ<`sHWltQ;&+J87l_u0pd4k-V=QA+KsZ%pA;SsCH?i3rI zFnXg)xp-~o>zR0P5hQO=O&nz(@*ju4MzFQq-OQV{pFA_N!ovG|W&hijJ)#&{nSG?0D7N~mr?|tfp@O>43>_mFO{u{8b_$1PBwRJC z^pPnreBG;Nz8;KFry-Ebh`yhPZXEWnG(xKS_(E3Cp?5aj`1{9+wH$9OuQbvr9L5df(v$7al?b(w%uE35eAsh_rDUow`b$BgWcuTNQb>P5g zjr=ZEpxklw5iM2CI$CN>VA0`(hU}u#oS}-l@BM&#*Pg`9>oJo)A6XsXf~tnYYT2&S zFWePo)owh*wtj;()-2lyZ=wx&YxS6C#ojajToc2hw|VLsTe10Hz|MDJ829D1Mn}0V z)uDPi(&$yuA}NtQq0PqM>Bht*l8aLuwQ)qH{ARzwo&jD1(!TtGYsTV?Q90uUW4x)a zu;Bh3OJBL?5ATUf&rWjhnEpm_kc7EF*{&v6n-A3p8lFqzan6 zZM>y+!lQM!QXs9}o66xVw(NwSNUvzq zaHHcwmme`URouZ@eHPC8ZZSyiWu~gfdTb4|2`#Wh7}R)KV1b*aQY47LJ@6~)o9m!> zemtJXL#~2ByB0;5y2%jMaczKM1&9B`v=%H+yMEA%~m zP+qPs&j7)la2^W880(EdRYg*3|42?&(T*E29AxZKDOA4;9y43|hor=wi53KyZda7I z5)v{FIFKn=9T>Fbw(Z3M=P$+u%Ox-LpB`0j)lfbqgD!`G=aok<6WnRcLgi)ji3#Ni znc<`r38(d!_%-xu)o!>Qyxc*|GA->QnIjBJ3F0s&T!v^8x`g4NRd`~sPpCl>8Pzq4 z)A668)%GpKy50SL(U}rRQM@c$rjlm@JWbU}+bZVFvgU-#K3_^W3<*-WdR2KKPvTCa zB;mq|BU)KfOsOvcUv|qF(b7U7Xi;QD88Fc$xtB_Q)TM3!TJb_V$TTEQ9U7g#D+z_9 z6YH69W>-z%5f!&qg9<=*zF^3B_V-cK^s?5)~qpsBsXYPw~(aF3Ou5Xll!_G%V%SiIwDb{LlBAjDsKo`xphfW27JE zVw}PFG5!#qFSw_8Ln#kyww>CfNxqK4e26}g;<@5_wZ_8aIXF?+Db^VD)(za1luJn{ zHA=F>%;=qN@Ov}|X;Pb3tmTl8vV}M}e%s%*NW4 zEB@_kMBKFo_)N-G%5K6pG@(eRr3nh$poK=}R*mUasLVV!l5dGDvC`e-A-@^MD z$zxQTojKQTeVM~XW8ryirv%cup4``xpsMHOg4>T{_zED&jlv|Fqi7N%EkgI3g)Rgn znj>g2w0^}(aMe~jnkXFKyP5K?}FGQWWAx58uV=y36?Ne zNmuiljohwel4DO!9c#-(JM^0>5&!^gjhm}Ch}Jn)bSDyIeyEY(%taV@>t&P03vk}L zHb|OtqINtnp%|5-*)@D^$&qq)jMaC%Y>E&deqK zfyWbNxi+v!+hqyV`YINz(T5G{ndIg*? z9Qfo5x~8l&^>8FO68{0kNrX2{)0rJE;+T}x40gDsVu%bSc8rxNvC3hV37%rYuM|IR zzmObk#yJG4ew)l3#$1zh*P-(`vjU~_D{6~F%i4vd;FgVw1a8v{@PZp;0jO~5FYZOl zY6Rfj0C(N~6QwX91C4vA zxO0b6kGuk3kg(}m5-WO=sMHbQ;Z_sxOnkOkz+PsAbo74VH+Kwp!bwDf8rwSAL8f1l zX|+V}W-nKeYN4kyA$a(QUZtS3vC~x(BYOoUPo=%C7_bRohe7&!e47Hpp zwr;qfXfBU#K*1qO@FYU<(Gn&x7Iy+I`s z;>O=@IJt>W^WAl)jolhK+1&eN6?yY$<9rhxAl5bW>i_y@$t+bD3g%i&IFf;+!q3d# z=2zMiXX*=Q=izMoR;fQSQIbIjPRqa{K>8#WYM2-ny_*JAUEl1(jLiSaAwKek^>7Af zu_` zd-N~*P(%BqF*~ES$|vMs71B$*mahL}ZPUH)UoRvyanu1~%nw#k?WHV0GJ*sg=%JK0 zOD6Y{Iyi`0fwK~Lt_>)o8d0N&=@wTq&w8sZy>Ux++vt%Ubu#6qsak%|qmQwgqQ;R` zR6mg+tLhoH2vEO$k2R)e3~{*}u}xO09=y>0JwBnC-SxPKG-`gjyMy0TD%Wia$<6ha z_k_dtaB75b0xWYh30FQt@yF%+$9Bl3r`eDD#lw$sBivBiSRzm>e?k^fEGr-?3JCKd{%ht~iBR#SRQ$((m)Re+P z4i|lbHlZ;dksS;qI653TIKx`{Agsihfd6oJGeM_DUo|o0kBf)0d96cGfc_AV>O>+& zi~tI=(r)IvJgy5}lj-{uPo^hyq2T|LT+y94`c*>CyI~?N>iWL0u6oOVG<~7xK6C07 zpRWa$P6=+4zd$dG*s3Ijgv@|8^zc{**g}{&03ukhaAKf>aVKdV`(Ap~ax9{=pP6X(*>-9)^G0>p?{Lk$ zUKkuLeqUCrqPRR;c%IdxBwrmvtf#sVBu40`9K1^%iBAhO=Y=uX(?s|?0V_% zmXF_9bIqbT=zQp95ANym$X6(06kG?8O~}nJk=FwlMM~ODE9s_MQv8N(_(WX%Feg0(BClSR3 z%gwRj)SQo;fC6D}9JFB{9ZpB^iwrFbu%}HQB~w?#l>}i@s6_dDoQa*F%k|y;ofJEJ ze&bv3E}Bq$iNL8MH+cFn3jLOAYHOdpmjcPL&@7Ku0nLz|=o@YNZmb)xjOJ^xqp#pJ zq7|J?5KdiYvvetc6X=j|h@9Q~NenEb)zT7ywOeLGn*S~x4ROx^P6C)4T2A= zR`JE97nh!P+({JH&8pao7iIq&USgm4%Li&Rl<@YHY*TP?S&lk(7dH!$u0gbuNOKED z+z0mBjqIh{B~r!=N{g~{de8Ad->4A=XpW3wfW&f=(Q5dO)JXMhRe{VT&Qf zb-+nZLs0&`2VeB|soYfaT^>r>94IiK{UDgAZ|44DUSs1fn*P#<(v;nT^(4j{2it^f zRfhXAOt4h3NnI|;m=(0GJ929|Wh(9kual8=P)Sh1Z}l^z1k^vIxuRrJysGxibH3^W)}uHWR-$zyHoF@-_^kUm%j_~yP4 zfAH^g)wb|rP|k1q-)(XwVv3N~q6<((fwPx0;@!%ETPkaJ{BBHRDUn!65O2C}IyzPC zK_k3)$O%TJWm6K=F(7#THjVP{Yc{fVjK}{%)dis-I9mT)l_tsoO0BQBE-2T#oL4^p z`w{dW!udp1&mau<)JDgeuO@l+1HREE`n}QDRy>7p;{%zkE(%8OxM&tEWJGK{)#?2b zSAXUo|9l}_fjDpvWk{5iraAUa5~yF;%{wh4GW98h zE{I)>3+^;b=SHzq;jN=S|H81#w5w`1pR-c3W~xXhmM02?oUSsUlG5+~%d^jXR}m#m94f zun}+3@*4V>T(T=v1#p7aB*c&kaLR zJ8mW)y9+~B7e$18bi{>?YAE(uz9sjhhzyd~K|^vStWOd5v9^Bn_k4EX!zK-V4h_aM zY#b<}>Z~>8D3IOZYz#A%x9*!X1o%jxauERPtdi`_U)+v6EUnkkE*cllOE2B@RjHc( zdS|kSEnHzZt-6Q!C+^}Ky{R*vNN5;~9BLv;;x~fQjwz%~uU{aw{Wt>=BqLgXvJhA& ziJ*QM0K+R9thlGD9L^Y&=1E6Hojmkd7s-zIXDexS5#KiMM9w+y-ftk!_tTaWhxC|Q z1isQjO*>R)I#4#`8f&1h83Um^PrP9Nd}r(0&qq94+XSnw9~;S-$urCd={ut!x1i$= zzjtu*Gm#zl`_GC3Y?%*P+bKr>J-SplillH?ri|BLyv$W`Lda-awlSF__&_6UoWCH3 zQZikQy!j&9+*~sDoehQKCY=FOVfH91qZzNhZvY2UpQ~#83WedlX~`=S@eh-RqW~E2ltOyNy!; z6;xnCe1sAomX-4+@B=k~SPugtLiYDxZTjq0 zpoi83>1z;z6eOyiUE&Ht)(dMq2Sma0P@46yyct>YcHs;CICG&(}w@~Wk6Nf)c^ z(rS*_VK9uEVhc_U1?I+^VxA?CigY*8n`oPo(;(Y*tCU7acd+USV}+9lDKGE>bAEXK z;Tf7-3Qf;B;I&|8_TF6bF7-Xlkgks^5Lo$9Rv{hIYAn({TjimYD6HhO$yr^@*1W!P zUUUi_jPa~Ota%4KD(*l`CM^-J4vQVwC8vRxt-60=ayEwRzQp=+)w2w5Lzs&6s3`P7iZJ&9N#KL}z zv@RG5XXDF|Hl}@WGnN8e%zqXtLP6!FId`*7u?0ffs{ZXb4c6_*j8cu@W8k+fuuazZ zLf*>zAp`G}-3PJtWz|?>AzDorE;hBmoQvV1cp(6D4E_rk)Nqo2Qe+^Qx9Spk<^AuN zLc^Cy7n#@AFq(K^OLu=vl_r6PeA8Qg08RmDmnAcU;Qei@6ed;pZ9IMfcLF* z=~gDSkOiZ}X@-`wbBXtCmr?{y1VKj&q|q%md)eRQ0BXtQSZVqR>b9CI7S3P9NlM}1 z^hYFL-qPLkG8|&wIS3ThE+}NMy(PR{A2N!(<+=AVf%P>xMw=rAZUHFb24=-JeoN(7 zBwbKb;aag>%Go7fo-wS4soi4#;PVyccoLkkC>O?p-(W^a)cptAfMs8U9K7w# zEQ%ylT*hN2G7UrMJsA22J~fEq^>(#Rhok|h4u3;3c=j4y52TZn5&W%SEjRk6T(m3z0HY99{KC@RKsA<0bjXJX`)=2m5XvmQa({`acMbAHMI48=l^BgjNR%ru~x!4FX`ShT&i1I1@O7DtJOt!J^wECRhR zx=wYQJw_jlp~y8V&n`ATCya2vgQnPXIZ4q#oYS)9hu;D@kdI`t3G*%IqffMbei5r2 z+1VUvrQm!Oobu*%iX3HhU{wD#5!J0P8Z)?cr9?ngA!&6kFhX8t|A9-8x3`DC09mD& zhkxcKzUUA4NhK`XBdG4-|ByR#>dY3mD3ms12#EV7_#XG6Fovp8(l{?EJrSBscrOwG z677gp&WsijXKHnmUL}=VLdzc5QVk&qtUg8YffyvwINAw&-MkJ3hadR%VfRcm5!5m{ zr*qS$lxCkMWweehOpzMcj9Or1_s^@kFLpWfoRXo(mp_+|5~`n&O%z>O%~+w+0kb0( zgtkfQ(#tskFB)X90+W1aS}7% zAVd}v>-(UE7L}rOALS~18z-lgkwvb^#}}JmB)SRsZhOZ=wz^FE`qOL)E&?um zuJvP&T??urOCPIfDxSy@{7x=s5Q5HeUQk0_#*`ofJDhlR-!8ljYzC75U`ddsJk&|GS=%=f|=D3yxq&M?M)cT~I2p~2u6r`3k z<-kag`U&f-oKE%GHT8wn?&)xKHxQ>v?Vw-Xcc+E@jbL$$jAe`xKc(}&6P%Mo7h5n| z>xcMh8w(_|?V#dQzhPFPX5!_vU*Ig>s*#!a2M3iP8IlxkPR*!I;hZ>`n#75=R}D?5E-Hk zuDGDOn<*Asc>$owG2CZ=S%c(`ClKY}$y+B7VN3?)J^$m%HluWFL=W`rzw!re6?$*RP&lVi1pGfc| z{N$8%+8t28m=YoU*L?l89+Hv%&nVI<(_}Po+mR1Pr~U*JTlitAywd`Zy=s)hR#phB zO%kDKsAt7Tf9^}NyN^=1;{;BV$_;+*=gn-sd#Y%~&kpxx44*X=KB)aBR^biM~mX}Ci0)YGoq8Rz!##ib|xx%InmNx1+Yy@ z3U-xLiiR70c_hNW=iVt+jRRG>JOtTsUO6u+epY-Wo2DKsO zI$~RE-*l8#ilTxAeKAF)PIjpFZ`T!~g0v=1+tqlPThqh3=7I-S;#DScUDtuy7j zh}0{Us3>P?vgo35h#~@Ff^_%_6lK5n&G^hgyVvNChOzn&u7trFop8mYG8KLO>gQ=f z&(sZ+hG^#A2F<|)Nvu~WTwH{CZ*~CCu5Jb8Y$ry1hchp?nA!|HURgoo1a3jxIJPv{ z5lF0JFgClY15V)OGghyEGKg=Toc+t4d%!A|#``P~TdP$kR-MyC;0q*$)@fr?fVLt~!6CU(+-1k*uMAJG<$S$+^`sEBL2^`=Ub+^**jw0jw%19W5QPgt!p63&ouV z+1@XF`rNp6=oZj@e=YPDvF@foOEsNuQRE;Nvaj8ckNf5~m@^joBY9VGoC(W6Yq*0umjC&)Ti?hFv)_9W-eB&Jh>qd+ z&*+W5@7L0r{Vcc_rfyZmq;0>k#ulG-a-h3M0Ie#wG|94l0CrN33M zBp~S9I<^p4o=Qry0jLo=mj?gtYbwVT_s`g^LbvWl3!)ba)&3S2!C(A`UW2uJLPl>wka;JEWduZdNZ-gk8{8P>#1F6<>tkvy_qAj5f=FX^V zqr~Hkc?&QmpI#EHj0Q0X%W8y+F0(ev*fc1*blxG$G^AKKTX1aM6i}1p+cJ4}l2Hi( zt~~m*`$ul~(&+Ct#WY2&h#kkgajdY5Irr-@{5a)KE7#Crw&x97)GB>~u^fp;fDT=r z0L8=8fOKNC>2Oc$n(Gk_0y4Vmbrw^Xb!vFHk(VOPpAmBWJ{7xPAvTlMEOlv;8EP0w zoIvHlgng8QBAig@8x<}8#LPItUM{BPF+5dGQdMJM1`1Eevliq*0;qhO|AXivL5z8{HvZd~|u_x^?vz!gm zvem|4v{X;8b2WEfbAPn`N}@0rM!HRdY6P}&(l*V~mz{*Dur4%~Hd}?>>!?%3O)t6L zJln7z;|x?o8XBb~>GGo@H50J|CW`-@3aafYRkIhbsARyTLkPAxZBw$7aXAz#n)8Vr2$1v!+-lc)E{NzAsAj_8;BRVIrn_ zM0)NQR2pfIF&%{;R(CkYAo)g!jD!GDw*2d6R2Eu|l<-rP%1=pnb=WHOmsML#Xh;mx zRCCll+M(gjVdueT0V+PatAnG8f!_JQNzmyb*y-pVIQm+vwkT@|yBD#uyGdA$DeKdE z_Ps#q-(LQqem~CEdqs4fs;6TrtU|p;U%c%s4__6@Q)hG)$=8B=CIsk1SvH4|!XlYY zgbFIZVcm`RF+`^cRJ^@J9mI-1P1j+La1I=AA?@`zAMHCi|I*E&w`*FG2QAd%^A)fQ zeN+0mx^#}Mx3^wT3VADDoM2W~sRDe4KVt82e8nFKHu0zbaQU)cHT#6eh|C2SB})Rc zVVa&wIu?S?*m|8F))Lp1rmIyhlF$7cQ<;bhN1Q9K1~1@|ryALB0F#D(v$~x+LOli- z65P$qTrd}y4&h! z+amV2d%=0^A&j5Cb11xlu5I*6IVG&6lw0XXa|vo+H1ufp53r+=r*Xm1d!KG{`@KQt zkQIThlZskx07}F>GJwEY)JD@1-sCFa4A{;cHG{%+s0y*L7P zwjmbGNFzI`+Ic$rifS$Jg6B>a~ify%OXp+27Hj5h3^fv4|?%5d?D zDYBTNAL<*5g>RmFnGZdlOB(t>6B2@qrO1oN$eDjaEw(-s4JHUA&V^OCWg#2vaCch zxe*k7C<4X&Z*tlWtYTxo z>~`ez{f#MIPer@Me0$lZ*etmp%_5N#VnJva@Gx*jD}Y0tLt0gJ-fV6c%Pxm(*7JCy zjR=xyjHV<~JZa>6=hi*V&F-|eJ(O1j;Lkd+iET4dPW_CSCAeQxXICw6l3hQg!KtBL zU#1NUn%>m@MJIUrsMwv!e*sFuPTvs^&++h>vUa1DyncvBRqVO;T`wX>lOMb(u+ z+h1M-(a!Qw(JC=fOkePI$v!+b&9%x5GUzOFa*}rHI7f!hBJ$)Qi%@AJ1;ZK_DjeV+ z2_joZaOQ-lt?M%Gs?W1hNa@y(@91YK-ufKm3*#vRU7H~D8GuK2*%e5PA$X)Lgq}+R zFYIq0&y*m#%EE9@G|ZS959}ztxd`D5>*N~4>1w44*W059%Wx(=(?CB#PN0CV2-O4F zjNO*o{)z41;*YQe1{TzD6fP%um}x9@{(5R!nn#rpvwFk2X_bBkYi}lNOT!gSn*&4&RFp0sKC$#b z9(8Msjqf-(bR$7Ag7_w+%cmw9$y_$+RNy9+zXWJE>H}R#{Ls1WFHLLZi@tu!V~W5` z$|fi$U%fA~*~BrB<~}0mR%wswqf3pCOz#B`5DE&|FBHJuG_v(x>(obGngRt~b|Zam zq*8fALaBof)it5foI~|63)x-1k2-a$yyOiS)v*nFU7a8n)sg8A>VR99Z9=4*iFJ~n z&~KFklpBniC~wuG+f@t;VeKTD%sLs;g8YbX@%|bzrTjU!ohm44jjyAPrw zj0{cmcMzU8j@o>9skBMFQN~JA5ohmc%-0}d84jkN2z|uX;$tLl7_R31LW1QeNuhAK zwDJ%SUtICkpJcnndsPe?b?W0nAjsT=I?9vcA&@~KEvzTej>>gnuo)?Jv)4_8k{>54! zceXLSu!7CZww4Z8W0>hyAKxgYmA7y{+CHtkxukw72StP8ArD?*d%*xBM9nxxlJF_k zS3Now`B>1yY0$!yW(9XNxyO~`RY$ut8ch_&5`Dc86H6%_DgkGoi=}1WcD+!Dhh!}H z=m6EX*^pUuoYdFvi9+_gwLS7mN(E2Lw%DK`f%iFyLKng5{3bhfwd0o>MtdtF9XsTd zR!R)UrJwl-a@9{01cso^0Gdyx8btb2j;ERKCSd2rkOztU%KB1~M=~e!<-Fp-gIu-B zaWT=V`pa1waGCCG;nqgri>^RptTY-r$x#tNd4r1*H)pozn5}TA4p~NjwvNZC0xAd- z?yePMP6wSoH5NJYE$+9d0#Q(F3f@cc0l}1$22I=IwJI-lS;43xi&B+bfEF!h z*mg;!>q{9KItfkM2fuQGd-i$Ur(XjMe7li*8x6nCo!SYru;+mNJ@3JJ$WHUeC0dk3 zZyB?=a4ssLYKi1=-zkF4ItOi_t|C}%59%&BoFWUm;GL``H2zA4smYW*PafO+rEMoZ zxqSfh26|H@wg=aZ+{QQYHF^z@5PgESbXEHfAwm*2X(z2>meYVhkABTb9xR6mU|+AK zrGhGlkC;3Oab5=(?g_;~cgOS41u~>!B2^7olZ)5xzN(o`fPbt%v2U!bAu8xZV*GZ; zm$+MaP4|3E`12n8Sfzr6B-@h1wo$M4I3cjE8JPJK51gqd!jKzmudig_;?RGJ{P;g4 z1v;Z4DEtG5gv>AtU8mz_6Te?GSh(;=OSKWW`*#!&YZ~Emgx*87f3F5>$ZDHAgZm$I zJe|;bYGEN$P3lINCwGZk(%+x^ODAM&A80qH3gmEI{3AyeL&h2_xvTH#C%<}9?{1Q+(3XkI&Pcxb@2dj>m4Fi!4bSfvL9VL4g&leEFMyP|`>4)P!Jz7rpWUe^s4vQE|0*UUK z>J-mwhU1SQs4dC|sE3$uF_Yq{z0NG!g$_E7^TwTtoz|?J?`Z{_*Ms7Z%)D_1m#>>| z$p7$6tsi-}ITsL6ZSsG3CNKyZ(EkH8|0lZnAE5caFIy{PXCr4XdKVA#|9{~Bob-PW eRQe%7{|D!(C<6}h->e`%xAV{Y_66kU`F{Y^{hrV2;cIK(!jvH+av$#K;_3%9 zM8b2g6xz@o23}9sROMPK+*0aEG7^wSA5uj8xGs0cg;56hU{7oB-Bhk~_EmL8M$n|3 zT^*r~0ZV#i)s4Oy_+(Xw0cKO8LhOeYJJIFJdKiy zQEwM@kcM$vznqAe+>jVkrWNXSub4P(R#Gxo?azm#DA@SP&b%joZfvybm%xB)X+Bp2 z*v=!KUPUOBU)}ewR9_dnW4yett*?JKuMNP%edxGvWBQF* z-1>Ns&AiB(8qX~vI_)e@YV_n(mxPuGY{lH7xfDllSob^mYFv7-L3!|vU2)!4bVDyG zro3(f;fJcaDS_(16n>SXts*)K_CevN!kATguFoQ!gNK9tbyj{DZB<|CzV@8{#5Hl{ z8DtWEZxUX%QnS_AkEBQ24DY4%O>vs6FxWzm=(jQhV-*Asbw1r&b@6aWcSCq1)P5EyHulyfC~{)cC%XG5->u zc%9}B61g|nBm9dWPo8+wE*ilWnORzx2X=VNWXnehmW0yYX6~lwYse)VVaNh81i1cG z9x3i;M2!Ga(~KnYAsNVgi_Kl;6rN&S-P$8YYJD$XfWt082*gX}d%hK>VdegzI-M#I7}Wr92%If0 zV%CcZwz;O)*@k3;JWa$QQ3>YY0U2DK;8E^kxu}emdMOGZ4#Ls)^m z)ypyvFh4w`)hWGQ%pg zP0T61b9*E`>6J}w0O7`G#qp1(<9tn*ovu`&Xu8TJkU>_%FS+_7W$n`)8-4@t8Y`!h zdzlxj4vYaXjml4rla)=@{OW!ti{OtQ{mr!46itYST7rIWlT+52Xfrt_3?YjzxJxo0 zy22#&9`^dRT(S7}+%k0GjbxVsT<_=YR07rfr|wA=mo(Vfk%3$hJ6lFa@Wa$>skz$M z-$R28+bvL%OOcZ$%Wgbrx8ewIr;aF3bMy8%j7+dqU|e)@!AoRc@N{;IRMrS<%`Fz_Vv-`5hWTxN?67Bf6YvttuEC~yyqZX#&FJ-WSCllU z-^vGHs(-Bc#E>c3-JXBqSFX8yBJWTv1I#zxlOaS;v(W6ND0rT6Qi- zVKPHN*dTe}vrkFh3g5IgZ&^a^H4D@_=zJ6pAkBE5CB2mX$V1e|%A50zDl)V!`Z7BB z+=_;OA4`b_3bxA-#!g~F7Q|U3c%lF2>&D1h$9G+$Ft_1&Z9!9SFNjW

8a+^k&lv zJI>ziUkcJ1dxiXgPfuNOoUNF|9^Bt<2zB?aN}R9~fR8&ay`}zJI$1k2a?l@x_2u>? z<3;6=T3a%U?z~?|Rx!NShvIWZSrfc&8Ch&qEll`QpK zU8D`UJ~cWK8aqwKW$)0CJ~(>u>ln^}H9YR9t7V#8R z`oZ2TW=hd@*!wd5w173@mhRSp1t&wOc-U0wsXVs@*j?A^GP7P($J(2qo*&;QOkFgp z&*L>J&uZtO{0LwD^0`mxZRkW+;$Gw>u@2Ea diff --git a/samples/client/petstore/flash/flash/lib/ext/flexunit-cilistener-4.1.0_RC2-28-3.5.0.12683.swc b/samples/client/petstore/flash/flash/lib/ext/flexunit-cilistener-4.1.0_RC2-28-3.5.0.12683.swc deleted file mode 100644 index b69064ac765f0f18a653b41d75eeced098798172..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11827 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 diff --git a/samples/client/petstore/flash/flash/lib/ext/flexunit-core-flex-4.0.0.2-sdk3.5.0.12683.swc b/samples/client/petstore/flash/flash/lib/ext/flexunit-core-flex-4.0.0.2-sdk3.5.0.12683.swc deleted file mode 100644 index a90af750bb5d351e5f4b937975b86b9c0e69dd25..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165338 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

;oB7G##fs?TY%1uw5tp` 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�~c8v?UGd z>`_R1kb6hMvbHwe?Nt*V2E>`mr6;es)=|#X&-{8%bOW(jznF|!o zlPRoFD6CY!0c;PJMN)TAr%n1FAWc%1&vUaJ--J{A>BL}=iz=OhQzUemD8zlf2nK`f z6*x6MSjSG}sR~;9M+o z4!2`Bm+Vu30|xskx1#9m@?N$&S(B`^DkEg)ga>?=Ux07Kk^WcoX?A%;f&+&S_U<3a z9PX3&#ekskx(*&4zTWn}=uqpirW|CDDW5r1bj!Epls|lF_UcT7nG-~}!Ijw!B8JO4 zezsk-8V7FLg*gtcntdl6y$JOo_Pyc?+v z*JO81(|#i#7ts*i%gZia%{SDG?Z+feGQTT#UY?hPIeckInDZ^YJ(HH6plqVCM$(QV zhYFEaGxI58EzMa6`0<98m_NIC;nXFkMq3*qNMe*3Ay3E`l99{^md**yK@wvwSLM-& z*+UXT^%|Pr(DMu}U>F64R!EKnv=T!L5i6*b874l?HIzz2t2VR+o`qm&TmZvUZ+Ie} zdch^ilE<5$QZ*=0%a0X9L19H|o>V-abBcP6yr_2Z5+2s^a48SNJY2!UD3s0d=uiTh z+%9<~e#qm&P28ZJUk=fhuapuKN%9idD=sgQ!#0vtnoeZU+63F!Mw@jTKH=W8k_%0& z!YxH+YkQQWN;~7Jgbv**3@WUhwg<6u;^x>PWGi&vwOH9E$7o6sY_e^o6ib^}7uPH3 z^|8xnYv#pqdrkOpyV)A7B$@wllKDR)MESeGWtNwhygrZRcJ_p-9g zIqifmdoSanr;gv=`dpv2!W0N*y?TLIc{v_}+a_i1d5xQtkY%##T$x)r@s!B092&8& zY#U~Vr{0lyB+tbBs*ku957olG8HP^ods0@q#^x|36hN#%+74CasC_gg-9X!df9cV9{uA)hKTW8T&&M_kH z?4n&E1R>5#46!pFZoBZ>oDrSo_`@f9$lEaw4&2DUdcg>Csr!!XAK15b;0C^B_-xg3 zJ{fYBj_Js`2Dqnl=j32y{&@$6TJdN1G%p9x*?jEDpL8~}I`{FsJA2P-+}U&R)t)KX zgzw@FT;;i;u{k(-=Bn{nw1uwfBWk=Q8dIZ<(PqO&4z%w#s8MoT6m4v7QR9t`jS5ay z-0mA2Ciz@fWASFp+Zv4rC!+*47K^qT&gzUcHbt<`SagzO@`cml!L}S=qqE3UpWD5r zrg*E`)EsM88=D%VYLv8^H9F#uHBZP}>NS1kQ0_NtLQBoKwzF)fnk_I2>LNo{4TTOr z<^s_pay}hOYej}pVko6_*r6gNQeh~5PLC`wybBFwv7yW{lrqD&j8uY^h#^M}zbzSR zC~FL5y`gL}ly34}q--;^9iAPsXReY@q=}>;4WTJ{DO1vrF*OS%@M@t{vFyzY%uAKc zk-SxyQn)Bp4c?NvR4s;07)nxeDk{jHyudEH$il4nP~0N7u54Sy!__=o%fogacJOc= z4>$0zlZOc&ZscJX4>$903lF#Qa61n#=izQ1UctjFd3cq)AmEWDUof9kMy0ZLiToMN zBau@%)Xs%XmARxesv=p1ebg$5prQj6Qv$=s)68T`cK`VG7 zQ6SY}-tm`5PLHQ8x#ZNVud)+Dl~Gl-B-VTvzw!5*}GvJn<+{ZBNciNOuRgDW`e6q$tB;yM(*W0j*6jb_mM=0@E~EH zp;kVK^@rg>k}i-R!f=K1F!_{77Iqg(slwCjVIb?Q!5gUA$AMG4AuEI}o0j=Jx6u5d zNvS8WX7*uBSlX{yp_lu0QX%XOnYyX5Cm^^=l7e+u?4vO5mgA%U)bwQ@<9SH8w&cy& zmuKnxhs?7+2R+8bpus*46Qp!|ifi3|0=VJWzlLP_c%mH0zl2lzImhaEpL+6Wp_dCk zB3X^+tEWO}FCK3uu?dYBbV=bX zxuNi#Nm4oU45sYyd2w>dBmqHq9cKz@*>f3)9ON3nIZ=ZcYZ1*ct|H(H@GKaRh((Q1 zK$8kGjN$ucoIj(31H*?&WoWzOseEMT5hUw|2KKGHDKnXx&;1pg3fiWvVB~d}Sx$>9 zr)v=hf6GMzJM9oGn7Ojz>B`M!GLF0slhFZc&p8IinVBvBk7s6&GNblv<_KdFYv#<# zg1;P1*vuKnBv5g{htH#$b}r_#{vyh>*~~5H+1Fo8qm!O<&odUzqQ>||wCeEW|9`04 zWq8A>-&riI#-`ZhQwL-g;}JCkA;UCfz@-MNM+dt7mGeFM{LGUC+;Bo`w9X{iEBo^N z0UieNwFbDL6uR`J*9xdaeGAz*)xPTkIf%w(wn+90Q+4t{ReOht~){fq{L3-$^~`Uae~*Is1XPCfQ5S;3S} z1t+)U*>%$)VYhSbWk*Iv$sqC3p?w3@mi>OD+8RDw-9LQbQ19U({5sXW2lrKH4P5o; zaJ6WB!$rcJ^OQLZ{&QUDooBM_nLJr+>xWG-Pi9QjSVL>88jDAoOlMTpSaUTLdL**}h!A)0uxGSy?I$tHtu`O4ziZVq*sM&g!=r0Iq?r5h%Aq{39b zKJXtbEQ~9#-8{%0e-(WQ-N!2k?Qc_ZRfQm^Uaf)?GU zCI%I@`4kr)RE3tIid1S97QLK`=1Z5e9Z5OO#V1V5Ovp+d+bR4i>jt@NyZTflT+FVq zRcSQg38g;CeQHL??qY<_)OkR7x?+&L@Ciiy@^lI{{lkX`>bph|Q(Pt{jDwRG<|x#x zpnPpP`ChX^4R3p8cAZ>5O+?MTc4XQ4!N`FEE-6V)M{nRc}!#W^Z2c86@(t-`JQUfT=O(YHUM@&iNE<%9xy${DSm^gW?_SQSvX+<`18p8jBRE{^3s|I zpQ|(HpGIend*|Z1a71iXuu7t)s(OIvrRt3~IacZ@#(AVgtXABzDR9!!o2$gv%fZFe| z9cycL*)MHX8e>T8$n&Ok+GFQ+bZ0a!VKO5J)n<>TE`HiBuoFYB{M32z&>Jr~xn%>i zXUY^3lvZ;*qDEUHaW&c;Z&IU8%?(vEbS;ouli`fL%{@jNTN{akn&Q<@_9;y;$WFP zXKwjC9#-(Ml8041tbstj$3z5`*GIa(3ddfcwM#0UUvc_H;b)uy&Pb}+_=~Io_Xw*B zgumKJ1hk#4BP6z-^L(A-bc*#n_u7~^#UD-#D#1ngxN)2a74ZsLLwYzds0E30>_*Pf z&pF2}4i4Ogt!$%Kg3@-joeMLVDbFiN&mb{#lvlEoTj3&;3qkUrxr-28brESl>`waV zq1%Uu(~n5;s`MstL~CQk+GLQlAtIz9!2^yJ0~sdtW9p3eB3xv?o=eEn*XA||9ke*F zekNmtZIcQ<^p|pn!l7H43mvWm=!HHVdB6SpMzmhi2+;Z{oY`t%Ah)U+tu*=tW*wk< zM%piM7=?EpN)pI*AWNT4aJ;K7w8m_3)?8@e+{g1`wTJ#vE?0O*_Dq=o_EB3j8k{`F zh!I4@xJ`@uEl8QL~ zQi|o0(oh)>%Xv5#WR1?gNO1geByS{x)SF44OeQ2HYdN-GbVc1v0^7o9H2!IXtd5~pB= znNu(_G_txz+QinTtBdKOy#_Y1b>re;ea)+zSZ8|NPY(%t*q9#YzBe~fwyqk<5yi9{`oLexb|^qw>4Jt|gsUGLeMkE6JB)byNndtYgHoTZ{DtW z@gLu=3`rH%bd)S>I>L@l8E7i*Q=E>bD`9>u!`CBde51;trfClhBLZ&`yGje~DlN1@ zwa^CD!dgiw7g*b=^!P*M)IR5#@c_Un*EXr#B|iXg8d{m#5Y7fqhEnlNvXD8| z7-!MYh$zqPl_PWBJ2Fsc*T}07%;^kg-K#HbFznqqF?^UeG2Q-_VZnKhjK+v3<2u#c zmGQ26?uE`RmHTNs8#uUcguEkqGPc>*T_DWU43vYbF0}i(kAGgK-+^h*lxf3}NE{jd zKcbN&IXjMvw=$cJizDoc<5-6R2JwM z6FACJ!Iz<}bBum9Od^C=u~kS!cLSv0G+UFD#}hJeYkzB#O1fJ?(zd;t6VZq}S7O<2 zDyvD|XCWUpBZDt*VVl#0$Pxw|J6RG@kGhGYf;iT6zo>$U&c$#6}|h9Wa#6-uGf4cA*x=PshXUhca3bt zNBh{iDCdM*WUrVetu0fJWvGwuTrR2Oz_Riju#gadgX7oDz6<9X zj>4%`WcCZsVaE+->;f9HuinMYk)4TX-}6qp*L#5XOda4o=N@4DB%?WMIGu?_TBD`s zD3Bo^n_HVm7*H3d8%Q(KS*@@j3Kk2zyO`Ay{#(M&TF=NGOuH4N~0G zgPNpA7)iu{P7e$^QQ&LsC3V`{-2Frxak1nPett#{l94(`24&LyZcSv;Wt~&9?VKgA zy977BPAeZKhbGu_oKA8j2H~}Y@+FG|dnH%%W&$*MM}|7F5MR@gss-Z-6$%llu*l*~EF4pnf*-#6s;Qa^YpBh>$ZivNJZ)@MI$V%_ zk-a*XwhJW#!nEr-F0!99XRD-_WlU-p>FM0GZvSxq^|pkP^UlF*ts7@lean_`J5PnT z!t1Bsmu+wA+#nE7oXM#79_$|^?`yWOZv7T5Y!Yqs^PjE$q#3o!GP+nLbxCFi=H z;jbW~4ymWk8~X=%0u0O%-*a*vj6`h1FE`w9!wT24oJ7Mf#LlopiHK`iJCZ2MefLEUgofNDWQ zFEk7;X(5Q=*CU5Lu~FHbY9azN6a0VgxmZ&&Oxl_ z@}wKMJn6jON!!`wj^(c1 z-0}dH=OP$a1h1cLwd+c{WOb}|v8$3n9uEo&URMWK+WEoBe@(KG=O~i63yEu;;u-5; z#ZsaK5+Rva(6doq5NXN_EQnYI0Vu_R5&8^!5p;`2qgJxW_QQ4Ty4s_s*--izUFGWB ztM(io_lh_X8_$co-8U}AoWtWMxw^w4-ex&+StH3H<|D}2XfD;VG+9lKz9PvgtBMDl zYN^beNEPcBsNf}bJ`zXB)$v-^I%`dzDODVK{nflCw@G%#I0c=}sn{+`xkJmL5uzf_ zcSp;MWIMt1k}1ROLj#CQVTFdtL!+~>FedDtl}-a-O*Gy-Yqg=~Sr7lT8bv<0>mvsD zqr1&of6-s`BGlbVIMYI`p@5`%{}6IK>nKO0d10tj@q+Ank}Bf%pqxEW4v+(>B17d{pufy9cwIww zuJt8`E)*yV1!wB$z03i zV?9V0rsCdWPIwM0cUahEjxcwTBg|c$t}dqSVSdsduITmy`4>$O8muOFXHXp_i){Uh z!F-#aU0ZamBzA_qEzQ00eUXN~-bO3lI1sZM`ukfO;#Nyzd|x!)(Ad1s8i+JDM*5=r zTCCpIcqG=}7;Ws0#QPhYoBLW@2ljFag1t7P+`IG8;i1t1iR@SXUr&EizrH@MU;G*E_HnZL@g=@OFJDBPWwMGl_b+~Yc|6?x;J^H@ z|NMXd@oN9q@&*6yX8+^Mhr?kzpUwXI>#wVDmE1;G%j9u(w+{CYGybh*cnH_Y{VaIN zAA9lQRX+GW{lq_ufhq*a%NMiaPj~C+>*;Uw$`RAKJ;v)5|0Z#LT737_tTyVayC^&y zcTq_r|NO&#xr?`lA6C(JU!ju!k8^ ze2jj4xrq)}tN1?V+}Q5o$M6vCukO~zcyqYoKOXk;&;0*y!hQ7e#U_2=^!d1pYg}#) z!-t*`g#1}H-pd!K7cig7%`raI=92&7jFUOW=}g{j{)~6Y<}nhZo#s>f_4#M@>A2ZM zyXu6B-?SFI6}uw ze3;$s_~*Zp-Iv+NU2=$)hwygISMxDR&k{q}$JlqNi(kGdhvI{+qPrLI>NL((InKN` z&g?&5)SlX=PhH>eBYJq+3Wln_^ULl3@==Pf#kH@!nq@De{c_RjL%dq8qth8`z9@5b zU$i}@{DmYVoF2*EazBJ&eM=!@q#b@IyZc$m^XTg~;yape)^I&LJVc4ur?dTWyIsdz z7|+BzN2^~pCF@<}2h4GN7jxF{LDLdPp^*Zo*|2tZ>xZ+VcR|sY#K%T=q09$fW^9HF);lXTC zh{)!a2;?u11BYQ8kN~nLG8*%ehWw2rk6dk%Lwpx=MTKh+>GMCQzYv4;oY&fDhvZAd zpTFKeZI)sKeionghA7_QZItnnPsobQu)L0s;U?Z5*D1qhi<@LuzfH={p=&ToS=*m&*8V5o}8#q06wJJN|bod#O6`P4VNP9Z&2&LC#jDp+utypKZ2jHiLs zq!f&dp)k=}8B1!dzG$+*f=r7p8DTgwL}(4z?C;~X;bymBB3$n7qy0Sf zi7oQK^s2%Tb-B}M>v3M_SO#bEgGf!HY-i{hMF<6yQikESu5>#NGmC&*dJ3~B_dhq; z$rSALkmq~Y!8(4EoW$7-3o+c)I^5h}?IQm3@-Y9WzFsOnLMGaIKE!JgVF8R}pqvlB znR+;OUWG$XOVDQgKz+kd7B{^DgC%lREE&rJ5h$7Mb9HF8C={ccL$qy+1W(~gbr516 z7Z{yxr!>Y>P?|R=sWxS}f4GYN%ruvG;@`J1zdsMlhf9&A3jTeJHWF8~f`6DIika&n zX28FUQr8};KUh3h--Z@8d*}L&tuxe@p`iVH7#}2FanDy>ZNzsOUj~hJXp#aP=1|DT zOiKQga9Ity&xRZX3)?`~!1zbFS*_#EJ>1Y3ywS3Qa3iybt3w-$kuW z<|yJ$7!i;8%*Ui(f0|3kOfBn<@#1mI*F4$eD*12m{ur(+Ndx6=3p{pCz;6yr{Qgtd zpgr%P-MfJlW3>_>F6NSHGG1(w*?ay!2;4?>?_vs#;tH{gw@c8v=ne3wU zso%1^qF%|zpW#|hcrWy)_sR0O|B!tGip&+4lI!qk{xuXFZhyGw05yW(Brq)+IMP&tR1r%#cX zL9kE>89|1Q2^D$s6{s0N=DgyDW3)T$^MBv{i?7_ieL*T542)3M^NGtK0oR<;yiTcK zhY=1;{y^{PQ8LX+a9<{=6?=sS9t%9rr^a5ag5WorEm4bfeOw>+*X!*=sLN&Qa`lV^ zM3Ka%7jJ9LVyYk>$f2v}6dUNE>6wdd-%DpOZS&af4wE{BD6fUK)>L4F; zVF}6g(F+NU<>@=8i0I@wf7j)g>&+?+Xl4qf7Vjyh4*!uDOJ_>bNmQa zq;uax`bg@37(b1mp@qX{YcrZ}w8@nW?s-DVV0*IABrrU>aLhEf&ktey_^C8Rih_XB z00)2&)Vw;rJ-tvo^AJ8RcYI&eNQ|gY7W8H}(fTgCe{bW>eT8i#j8Q9pnWpKpl!wLFy_aHE)udn&Y(%XiqKe%%B2R_7KF`OMKshn5)3#t;;$e zU3-7f5_fpIMi!kg6Q!<=y{?wpmAgU}ju+7-7el;?of@HR3UW3bcHvUfk6@%*+sn@w zrC3k0j9I3v2;;4zL-c!mct}gg_G)|IQQ7-WfQah^Aa8N4j8C$(fNAO26ZUf0<@JZB zZJJ*4^Eb(Hz4|#h{CBhww|w+lxIRXP6pgHCgAA>nHxn%6i=HlziIr+>1%u|)3>+i)+5KPv7! z!p%U(b$jl+W*JLCWJuK9M5%68&}cnd&iWE`nEJA*R!voiMwmlf!aR-SlKH?zyShtj zME3KyPy9XNWxWc`raxzBJv^XjPP>3CD&U- zLM8R!6t79^o$I@K48^~^2TtgCLb>=U<_bm?S*U=-BdX|EIr%!E-Dx0|MlF2|pozDh zD|JaxUJ|Wf&Zdj-!V9d&2L5AVjXfs(C6iscC?B$)%QbN@awtK_bpl0diBDZbkt#IZ z0biMuo!7{AxCYju%2q(D&aZd7@aawYi(Y{SokS`q>po#vmKQ9+3pkDR>IBXLIAk_j z2A^bWOaUVaoF!kroKdGmgR$)N^`=K3lp*X?qe?p&#PkVUDX&*w6x#=u=GO2CONHR-JxX|2noNJH6hr zI2~_^-lA}o5zk@NV?^N*0tkQ_*=N9;N?fJMB-fF9*HIwyr5uHqRgXs%@}pe47G2-E zi$9(^UcF#ii{>i|-vS&E*HzWa8(eLpDCLc6h5vsH*8+KGRn|NVQB<>Gv-#(-T~R{O z4`?)%syc?!IG!G>siE~U74T#SQ|)Opy2^~P1ROOLQij?HEYu=_=lFtlk%fpca|j}VV|FI{G_ng#uv&af4*XYfxIUE*w6~%ngNS0E1q}Hhf1otAYA&Zg z{Wg$LgO>VsKd^+9v%slcTJ&O_q31Db2;)uoSBq}VlcCMHQYv4Xm9nl;jyG-3j&o?UEB^yy}-MsX}~ z+LtasSfk^V0`J=X2ATq(KI3NX)uaWnDu&X4iy2BgfiDycl@K)&GbSMR23eTnHJWNk z3ENo;#xfPWbq&MO0@a@j)UqC5PVF$0ATv!tJ-k4t{a`)F+$KF$TwgOFKKXia zyLopwZq0H7i0k?;MezGZwrsK)SUoGfdu75!NHN`K0tB8*S@jAiF~PCtBSa~@r%H_( zIi!4xytPz6-~=*E`<(pm^^+h_lmN;QA)Wx|)2?5y&S(yp(a@zC zT%F#MAaWpibHuXR?uH`L`Iw0mqX2+YRLQ>Kg+*(^FX|GHGVFDM5!C?H z06epR;-`)6CXs|j5=C$6t-%bujyEeluBy$E0%U+oA%}2Ntsg9-1v1be2$10h&5j4oh5v_7|ME9}|p67DCJ4csnQQEib*zbh{ccgs|^BDCmbqXoi|Yvq>I&&TyTjU2*Zj~RA6>ZX;EP^{KEq5cc8eD3rR zU}uz1r+7-7rq)x#VMBGS%QT^JR&#{x^Q=Z7rjn2S0E^OLfNfbxpKMYaId=Gs;CB`w zrq}Ca`9%n?U-@rYhKrDM1?a=0h;j45L!eaSB0AGScId?|yi31qguf^`nj=Njf)ww< z<%3x4W>aAciHP_@wHPMt9ar{e<- z*+{SZI=bVxv*!ES%e)>Wz%1BF>J4rlAkb>yZnG+5yqxqA(1tGx``5(9{x|G8FH6;w zq~~Wy$*Gd0(8iQ#>4Z4cMHti>0S4Gyn}*8hjJ{s2!_EEGF1izif%AU~QLZPvEMT|W zB-eU*8+2^qpIa4HJu7&2d14hyT*0<;gLHM8JwruGW`8f5*8v#Mm{O4!Pa%Qb?BZ#W zdM>7K#Z#frD9ZWdc|M~M`6|Dmho~`Q)uxVg6)Seinevquo8|hrio|(Kk6P5Oc2joR zBh*6X1r|b(d zGgi~U4G^@b1_RhaEh36wT0k)NnXiccnjjD=GXX}z5`A`{L+1gy)Bs7G3Mgnw1jT2F zIaK`WkGQman-#1I{g`2&pK}Q3=od?9>pcmBjC`LYEkotsz z+`LWh5-veer?HS}5zQM=)m;<09`X4l2)hAO^;<^H(s9!+Y~qq-w_S>IzJ~rZx*d8t za7E96az|oSc9p9tHKV?Oyz~M{shOl%L7TAJAK1XzXu`yqR%Vt{kodnk5)aKh%ohEc zR!fCD{HBu9+ril$MIG!cuf2Jn?6|m+CC{o_@9=HsyRPFx1b#_w-X_;|w1)b&MKk;-6z`ebZsaYlUUFsjmhJ(C#} zRjUdI0Tzme6txCI~oVAFel>HM;KG;Be&y%0h_(%F2RvEk@VipV>}!}SFEa|m0r1xu{8a&BDG?3 zpLv&Iu>k2XkN|t;5z7dI%9G9s@6{Wt>GaM>p4Dn+se{nf^NtrGEc4rKAqR-*4wGOK zaG8J@g*Zf{cgw}Rzx4Gn;?@dvv9G`rV&XruG+ z4&k;ie}*cGH-}`qjaILpe&w=PjXbZ!jATAyZs2#pHFWBYD*BUKdiAQXR08h{wOS;l z!eeSE;P7YEYY4nRf=zMn&e`I(Ki1 z!7)NRyykauQN!3@=~+O-AjFitlU&E4s*JggBF0Ou`%KjRRDNBYK1=+X zstzg+X3Qf__uV9g7i$vi+E&K+WIg$7MeC8g*c2GJ=$KP)caZ^u>H>4=%7aFNq178+ zWYX(i?}Yh?@-Ml1F7xt&tX4T=ias>Bkm7V@DOOgDQN!fH%lp!S9P1(=;jF!Q-4#0*jy z`y4>yBvYL$zpZa-DK>t@KgIu!RukgkfEULyyuaQ2KWM6_%@v#~Q*VS;C3O`qy%qGG zESH->sJA-?UL}*qjh?rQLt$0rn5mE3a2M}0DJLstbrrZllo8h#COf2G0+($6%y@TJk)wNSN}!c^C(d7I=7X z>OSC{%G3=FnF#ef>Ikk;0Bvpg8Z_GSz~<6{3vMus-Uuc>i@qK}ttc5sZS%eFQh!udhe|2uGe9veJ@L|xUlIm;#e}4nds%^tj;f5%FRcXud zH**?|Vf7E~P+5~D(DsxJ3DpWCKzXZ7WLWqtE=Uv@S_AG@L$@+%_c6AY^mX-0%jQ-bQyZ-@lyV>n9MC{^!F_py0fr z&H@j`^*RJJ79yMGhkQ9cCkddfnXv=MXdh_!Mr!*&`5XjB4_Fu4*b=s{XLv5bbM+Br z8|PCJu40X9R>z|Vc?1+uXeaB}X-;0NHn#-B$dI-tgYm7LIu&y?3 zCHjbjh*|?Q?QE2l`S&hOIRn!rG~1|IdRh}_!Gptwp9Zn6<^guPUJg$KZPmsE^b+i( z6Bu-JL$74Rli!uU-Onmp67~0Rx8Y|k$YG!=e4m`_ZYEAP^0nJJs z7YF=ktLje-BYNiyrCwCvUlL!279u0xp~$Bym0)n3Th19Fb%!P{cK6)4?2G}BW7fJE z4&!)hZN^FFIAgBCFgLiVu{%;(qs1;TgAyms)LW)j+S0VnR5^Z%+pxDyh2`23%{qvS z@XYp=_^)LhgMp>~)N`0m9S1>@&7j?i!RLRB7GiSbI&JX{N9HiMLM#_O48Os8)YVJ$ zxyz6SBtS!;sY4r4bjp(Pk{--EU<`BhcYrzFnig#ej@=yNgAsKLm{j@+2|Xf0x47*& zqC{)n#(L-=_FG5+B-&Zha_#nrY_!OIAFm-PEGE5ZOiM@2de}&I`eOK2mkKJ~cdiL4 zduD?i7YAkZyQhN1&A7G9I8ZHm>;ZD>wGQ;R73j*vBRkXYV;UNcy zZql8^Ti&6vq#JBj6);t;1qT5Q6pcFxrNr~SK*1UUx38tyP7)phN7JGf;TQ%{gYNo$e`){5kr1 zP2@HzbeF zy)S+Nc{(RP|0%ie{d)b3L|bk^iAVDTYeKf`ohOkXP$>rDd)Lzi-xr+m_XdxMv`u4n zP0*gGx0{UFaV}CaZc@J@7^4d_*Yo&+_O!5%=S^ypsST3S0B}u!;}C(NNjkdXNQwfK zFT1-x3d0DVOsVR33VTRWrqJ^^^m__2&{>++B6M8rWx!}r1S4(^(YED%=JuMR_ydVO z?yGLCjtjkvf;1=t90d!7r{Dq=r#62-Mw?Zezf69Rh>rpm1c>Q3F=+EQqdcLj&NLzi zSw4fEHXx#F8PKSbVGV?=B79SD5$j@0phlG$^!rQAGSYgclx5I-;F?jqT}QcoWte)d zOh!6W=HL*-$iWF^CYf-?I8Rd`&{#>m`reR7A-5!YU#Xt})xRJJ{D30Xq4{=cK>*z; zEArGyOC3^DT6D-^=QVSzC6J12pd1*f{k9w|y%oAN|RLwb4gdO=#J%q6pXF~=48jO2Q z8AgnHN?)o9^9yv@7$8>;v(N@&nvDXNJ>4pMejLX#n%Zu&*yq?M_jZZbd?dBHwal)K%w?aIk+$#K6EXOe!zJ@OD(in z%R*~Lo0+1)gTsvp*CUW#7dUb!?U4fSF{DrPLj2NoR==KKe&f<+tb0ZZpNre%| zi01~LLp-epJY_|7jig;$)wG!Q+(K|zvFF9O_Y?*D_I7F6f47kC+C6w(*T*jNeMqvF zqz7+{uAEK60R!7ZT)sv-5rr{uI@ zkd@fF8sN9dV*gG&WaAc_GWIKhs7tNZI$A{&tS(Ssrg!0h)JN>srN=FVHmD;W21s;H zAQ?MoLxVtFY(=6I8;26XIZpfr`Q#TXtBTn_bM> z?B>W4+_I{qeM=p{U1?v^o2W6~Brgjv4rGYWKv;O<2E-3sgpDl$Dc-b2uiCSVfC90q zE#o#mkDf>}<)o5rR@?}`w-Oz?brp)R<5I_EkRC}Asa;DjYtBJ0SY156HwO6C2#MMm z{N@nu4#%y|$i^*aNAx>&uz$d$`q@8pa5ej<1PV!yYib7076Np#s#N3`DnkzKxll7Z z@-)CDyv_;CO8sKAuLDwE)gl>cXgpgwyj=^mxhiMUQZqr{>{|{6FJeAL%wY(ksLDH} zPk;So957=5rUZMA11qu17+~%F0n8n54|Tc!+Acr8Pb5jbL|QH#ZODAH#%C%SUGIvA-=1ApK2&N4RSB4$ zuQ(EpOI+r4RJr3A%kisoLSiwsd?wA^4$<|f=o$-h6m(bm_~|EPY{Bs z@$)WyJ#KE@?gb|ELB(DLtVY09KNnG|5q+tWzskwao8;kc^}aqyS|O6Y!N$u|FwH>d zY8iH}%gd*BgyA0Y>?HOF~+9^+h!5TqO01Gqmb-Y={oBN{i zQwwb|P@n<&uHzu2>Mg4Sz1Nt5oPCd9uWqyN6&gwkKkz#+w{;lUf(~?=saxRL!yW>C z76v$x_DzwjLNW7ujhbI}xjt$QJx@2kXzi&d91YUF^#eUU zr~14BB0V!~NJQ4;YLv>F0khK$ZNrM|&eRuJQ%|s4lwiLtu&%RTInaQPz7`-po^?}T zBXDAK2WUrUYnTzPiCbb40UINxq!X`bD79svg37Vl3F0cRz`|8z0h&0=EjYHXVQJmQ zt%U51SarW&rm<(tAUh*g88l^tzXGb5spZeH$osKNo3Rc=Knx~_ycr)+-!%zWXi?lQi(1fCB+Z%{J6azLio+c=ei;qJ-EgoFb+c9Fb@ z#GFRvzfRgeaXo$kVmE+0kA+1gj@Z1gRHDpr1MDKNt6Q5Qa9X8i$yu-6T*UtQDiOE)wka_D zNvPvGEP$2c7@QWfGnfYsjLw{7xC)}Zts&p9Gh}sUYd~@H+Mb*>1}^S5Ty?j`ycTNv zNQJe9g$J6 zw-tb0UF{iWIldXN=PL0C#>h*{QDHq-^YP`c0m}$h3f}{K9+PBIi zR&nFLNhDB*DyYjq_`zJ&Hk2s{buzl1?*Yli=7?^#0CPJL@kYbfTEGs&}oWSBQ2>Z2v?*ug2hgi-+A(>YdRj!6N*xw3WS__Uw%9}HK%c5KGW z8iL)mcJoz0qYYln0g#+U^`^LpQz>M)icm{`!em}~qJwDpsR4K71jt2*>pA*pM+Kz; zPSI}$?Wj^i(1X>e$fBmq^BF|}NZG8&au8r+UF22r^0O!R!<&bj4?22lT?ywFGS=Bm zKuQx*B&d^V;t>u4RYeJQd`6gu6h-VhX>oFPG}8LAjK0@N^5rqyed%4T#?yJ@J22j) zz2xx5L^7X{IrWO#DuxnjYrp9aV+J_EQZvKaUN%$*FUQCZohIm92E}B79$@I1c$5)@ znPx3_XN<|NH>#)Drq;H3m_uwbZEAGyf4O;1=)oU%$$@hqTBSaK)4^&$2~$;1lybf& za8%Wh>cwab06yM^=&kt#Crsk)RjSJJOi{fm%~E89P{&g>d4Sbtf>f;MsT*-AzS}N^ zt7nKB)b{rm?&z7!9Su#$@))D8i>X2t(sY8Gd(!h>+g7~tjj_(+lb`s$%|p|jrKPHd za?EFp5vT#LByf=z_=M<*ib64Nk)1@8_Ub~4PADfmNDjM( z1Lpb^6IE_=uO4)HeNiMAO*_L2dd+ZI;k!XVnS7>xX-F6Dd6rtjL;xJE~HLJ0>)y~WnT~@q*MmBc(nDmFl$Oj+{S)`$Y=v1UROWQaFvLWSVHF z;-_7l1{DY8z~an*7(c-sXuaz2T<0bdx;&+iY#{eb*f%})odJkv0DOhj7}E%d#CG#o2g@guk$WY~ z)POo2a3o#ZLvjCninz`+Xg+-s54vZSg6oXvK7bZQgM7*Z!n#U1+4V#}y86%~GI%hx z$i5)Np>gpdcgh~@`I(SnfOj-p6bicUYE%G8Qdw)HySTzvLwxxrS$>IzfRIj-84oR9 zsV3X~lHOhhn5#F@^0t9uF_XFnB$l5kyI8WYXBKT* zak-w-4qNVu{Jt+bdGjUwlY&L8*ja+|$ zW!pjVQO2-dfMcfVRd$Ee&<&q!&OjXiBz()TYw!w|Fle`$RiA-9SN|mr7O+$ z7kx!5gqwJ7fLxFzH)_WV04U+`XgWyJ!r~u&!C4)vO`~0hrQ%i-2*tl&PmN0Bs>SBd z)j6f+AD!MDoITQs5@cK88a6iH3bQ$L)3r7fHZ-rCiNbt0FzX#!i>Ob3 zYGvqsMc?(ePyB&+soiuPbAvkYLF|#B`IYU<8|3AD5J>^%0jFo(o4sdeXBu$&p*U-j z{C5>5A!32gFk)tVTuvJjsMJLTv0G(jSFJAf-U<(_Y1SZ}UAy5&y~_sBg+@deir+vT zI3-=ZJOCc9XPE6g5C{Jz3ur5m@Kxs)W0!ay!Q7_yoh_p7T1L33aD&Y%6s&RgqqS6pAdSKE*Ee4H~{ZquQ!Utz^A<0peYET;F1!-@h#|Pfdf(dbZ6r$MyQRaD9w46j-jjx{jm5 z>Zxh4d1tr^m40=xc!(>${4pC{?DUsq0L0PzcoXj*lo&_K3i~dMqvn|Ejs0zc95rmO zBEgTigw z+K)+`%Dk@c)hhBjNfw~P>aTnVH{pF2zgBz*F)nCmVOT8P@ zPCUL&um<(Z{#%F8DsBPS39JuJZ3Qt!^J5ulX^PyM6z(KllGLgEpf4`?hv{fDr=& zn-ypy3L}#U17a%*@+K9~Ruoi_lbKYMSX8N3T%Lxm5!p~wjVFQoU66LP1bDNuflOrr M!Xh9Y)XD@T0fItD@c;k- diff --git a/samples/client/petstore/flash/flash/src/io/swagger/client/api/PetApi.as b/samples/client/petstore/flash/flash/src/io/swagger/client/api/PetApi.as deleted file mode 100644 index b35cd5efdc9..00000000000 --- a/samples/client/petstore/flash/flash/src/io/swagger/client/api/PetApi.as +++ /dev/null @@ -1,336 +0,0 @@ -package io.swagger.client.api { - -import io.swagger.common.ApiInvoker; -import io.swagger.exception.ApiErrorCodes; -import io.swagger.exception.ApiError; -import io.swagger.common.ApiUserCredentials; -import io.swagger.event.Response; -import io.swagger.common.SwaggerApi; -import io.swagger.client.model.Pet; -import flash.filesystem.File; - -import mx.rpc.AsyncToken; -import mx.utils.UIDUtil; -import flash.utils.Dictionary; -import flash.events.EventDispatcher; - -public class PetApi extends SwaggerApi { - /** - * Constructor for the PetApi api client - * @param apiCredentials Wrapper object for tokens and hostName required towards authentication - * @param eventDispatcher Optional event dispatcher that when provided is used by the SDK to dispatch any Response - */ - public function PetApi(apiCredentials: ApiUserCredentials, eventDispatcher: EventDispatcher = null) { - super(apiCredentials, eventDispatcher); - } - - public static const event_update_pet: String = "update_pet"; - public static const event_add_pet: String = "add_pet"; - public static const event_find_pets_by_status: String = "find_pets_by_status"; - public static const event_find_pets_by_tags: String = "find_pets_by_tags"; - public static const event_get_pet_by_id: String = "get_pet_by_id"; - public static const event_update_pet_with_form: String = "update_pet_with_form"; - public static const event_delete_pet: String = "delete_pet"; - public static const event_upload_file: String = "upload_file"; - public static const event_get_pet_by_id_with_byte_array: String = "get_pet_by_id_with_byte_array"; - public static const event_add_pet_using_byte_array: String = "add_pet_using_byte_array"; - - - /* - * Returns void - */ - public function update_pet (body: Pet): String { - // create path and map variables - var path: String = "/pet".replace(/{format}/g,"xml"); - - // query params - var queryParams: Dictionary = new Dictionary(); - var headerParams: Dictionary = new Dictionary(); - - - - - - - - var token:AsyncToken = getApiInvoker().invokeAPI(path, "PUT", queryParams, body, headerParams); - - var requestId: String = getUniqueId(); - - token.requestId = requestId; - token.completionEventType = "update_pet"; - - token.returnType = null ; - return requestId; - - } - - /* - * Returns void - */ - public function add_pet (body: Pet): String { - // create path and map variables - var path: String = "/pet".replace(/{format}/g,"xml"); - - // query params - var queryParams: Dictionary = new Dictionary(); - var headerParams: Dictionary = new Dictionary(); - - - - - - - - var token:AsyncToken = getApiInvoker().invokeAPI(path, "POST", queryParams, body, headerParams); - - var requestId: String = getUniqueId(); - - token.requestId = requestId; - token.completionEventType = "add_pet"; - - token.returnType = null ; - return requestId; - - } - - /* - * Returns Array - */ - public function find_pets_by_status (status: Array): String { - // create path and map variables - var path: String = "/pet/findByStatus".replace(/{format}/g,"xml"); - - // query params - var queryParams: Dictionary = new Dictionary(); - var headerParams: Dictionary = new Dictionary(); - - - - if("null" != String(status)) - queryParams["status"] = toPathValue(status); - - - - - var token:AsyncToken = getApiInvoker().invokeAPI(path, "GET", queryParams, null, headerParams); - - var requestId: String = getUniqueId(); - - token.requestId = requestId; - token.completionEventType = "find_pets_by_status"; - - token.returnType = Array; - return requestId; - - } - - /* - * Returns Array - */ - public function find_pets_by_tags (tags: Array): String { - // create path and map variables - var path: String = "/pet/findByTags".replace(/{format}/g,"xml"); - - // query params - var queryParams: Dictionary = new Dictionary(); - var headerParams: Dictionary = new Dictionary(); - - - - if("null" != String(tags)) - queryParams["tags"] = toPathValue(tags); - - - - - var token:AsyncToken = getApiInvoker().invokeAPI(path, "GET", queryParams, null, headerParams); - - var requestId: String = getUniqueId(); - - token.requestId = requestId; - token.completionEventType = "find_pets_by_tags"; - - token.returnType = Array; - return requestId; - - } - - /* - * Returns Pet - */ - public function get_pet_by_id (petId: Number): String { - // create path and map variables - var path: String = "/pet/{petId}".replace(/{format}/g,"xml").replace("{" + "petId" + "}", getApiInvoker().escapeString(petId)); - - // query params - var queryParams: Dictionary = new Dictionary(); - var headerParams: Dictionary = new Dictionary(); - - - - - - - - var token:AsyncToken = getApiInvoker().invokeAPI(path, "GET", queryParams, null, headerParams); - - var requestId: String = getUniqueId(); - - token.requestId = requestId; - token.completionEventType = "get_pet_by_id"; - - token.returnType = Pet; - return requestId; - - } - - /* - * Returns void - */ - public function update_pet_with_form (petId: String, name: String, status: String): String { - // create path and map variables - var path: String = "/pet/{petId}".replace(/{format}/g,"xml").replace("{" + "petId" + "}", getApiInvoker().escapeString(petId)); - - // query params - var queryParams: Dictionary = new Dictionary(); - var headerParams: Dictionary = new Dictionary(); - - - - - - - - var token:AsyncToken = getApiInvoker().invokeAPI(path, "POST", queryParams, null, headerParams); - - var requestId: String = getUniqueId(); - - token.requestId = requestId; - token.completionEventType = "update_pet_with_form"; - - token.returnType = null ; - return requestId; - - } - - /* - * Returns void - */ - public function delete_pet (petId: Number, apiKey: String): String { - // create path and map variables - var path: String = "/pet/{petId}".replace(/{format}/g,"xml").replace("{" + "petId" + "}", getApiInvoker().escapeString(petId)); - - // query params - var queryParams: Dictionary = new Dictionary(); - var headerParams: Dictionary = new Dictionary(); - - - - - - headerParams["apiKey"] = toPathValue(apiKey); - - - var token:AsyncToken = getApiInvoker().invokeAPI(path, "DELETE", queryParams, null, headerParams); - - var requestId: String = getUniqueId(); - - token.requestId = requestId; - token.completionEventType = "delete_pet"; - - token.returnType = null ; - return requestId; - - } - - /* - * Returns void - */ - public function upload_file (petId: Number, additionalMetadata: String, file: File): String { - // create path and map variables - var path: String = "/pet/{petId}/uploadImage".replace(/{format}/g,"xml").replace("{" + "petId" + "}", getApiInvoker().escapeString(petId)); - - // query params - var queryParams: Dictionary = new Dictionary(); - var headerParams: Dictionary = new Dictionary(); - - - - - - - - var token:AsyncToken = getApiInvoker().invokeAPI(path, "POST", queryParams, null, headerParams); - - var requestId: String = getUniqueId(); - - token.requestId = requestId; - token.completionEventType = "upload_file"; - - token.returnType = null ; - return requestId; - - } - - /* - * Returns String - */ - public function get_pet_by_id_with_byte_array (petId: Number): String { - // create path and map variables - var path: String = "/pet/{petId}?testing_byte_array=true".replace(/{format}/g,"xml").replace("{" + "petId" + "}", getApiInvoker().escapeString(petId)); - - // query params - var queryParams: Dictionary = new Dictionary(); - var headerParams: Dictionary = new Dictionary(); - - - - - - - - var token:AsyncToken = getApiInvoker().invokeAPI(path, "GET", queryParams, null, headerParams); - - var requestId: String = getUniqueId(); - - token.requestId = requestId; - token.completionEventType = "get_pet_by_id_with_byte_array"; - - token.returnType = String; - return requestId; - - } - - /* - * Returns void - */ - public function add_pet_using_byte_array (body: String): String { - // create path and map variables - var path: String = "/pet?testing_byte_array=true".replace(/{format}/g,"xml"); - - // query params - var queryParams: Dictionary = new Dictionary(); - var headerParams: Dictionary = new Dictionary(); - - - - - - - - var token:AsyncToken = getApiInvoker().invokeAPI(path, "POST", queryParams, body, headerParams); - - var requestId: String = getUniqueId(); - - token.requestId = requestId; - token.completionEventType = "add_pet_using_byte_array"; - - token.returnType = null ; - return requestId; - - } - -} - -} diff --git a/samples/client/petstore/flash/flash/src/io/swagger/client/api/StoreApi.as b/samples/client/petstore/flash/flash/src/io/swagger/client/api/StoreApi.as deleted file mode 100644 index 061878ad257..00000000000 --- a/samples/client/petstore/flash/flash/src/io/swagger/client/api/StoreApi.as +++ /dev/null @@ -1,150 +0,0 @@ -package io.swagger.client.api { - -import io.swagger.common.ApiInvoker; -import io.swagger.exception.ApiErrorCodes; -import io.swagger.exception.ApiError; -import io.swagger.common.ApiUserCredentials; -import io.swagger.event.Response; -import io.swagger.common.SwaggerApi; -import io.swagger.client.model.Order; - -import mx.rpc.AsyncToken; -import mx.utils.UIDUtil; -import flash.utils.Dictionary; -import flash.events.EventDispatcher; - -public class StoreApi extends SwaggerApi { - /** - * Constructor for the StoreApi api client - * @param apiCredentials Wrapper object for tokens and hostName required towards authentication - * @param eventDispatcher Optional event dispatcher that when provided is used by the SDK to dispatch any Response - */ - public function StoreApi(apiCredentials: ApiUserCredentials, eventDispatcher: EventDispatcher = null) { - super(apiCredentials, eventDispatcher); - } - - public static const event_get_inventory: String = "get_inventory"; - public static const event_place_order: String = "place_order"; - public static const event_get_order_by_id: String = "get_order_by_id"; - public static const event_delete_order: String = "delete_order"; - - - /* - * Returns Dictionary - */ - public function get_inventory (): String { - // create path and map variables - var path: String = "/store/inventory".replace(/{format}/g,"xml"); - - // query params - var queryParams: Dictionary = new Dictionary(); - var headerParams: Dictionary = new Dictionary(); - - - - - - - - var token:AsyncToken = getApiInvoker().invokeAPI(path, "GET", queryParams, null, headerParams); - - var requestId: String = getUniqueId(); - - token.requestId = requestId; - token.completionEventType = "get_inventory"; - - token.returnType = Dictionary; - return requestId; - - } - - /* - * Returns Order - */ - public function place_order (body: Order): String { - // create path and map variables - var path: String = "/store/order".replace(/{format}/g,"xml"); - - // query params - var queryParams: Dictionary = new Dictionary(); - var headerParams: Dictionary = new Dictionary(); - - - - - - - - var token:AsyncToken = getApiInvoker().invokeAPI(path, "POST", queryParams, body, headerParams); - - var requestId: String = getUniqueId(); - - token.requestId = requestId; - token.completionEventType = "place_order"; - - token.returnType = Order; - return requestId; - - } - - /* - * Returns Order - */ - public function get_order_by_id (orderId: String): String { - // create path and map variables - var path: String = "/store/order/{orderId}".replace(/{format}/g,"xml").replace("{" + "orderId" + "}", getApiInvoker().escapeString(orderId)); - - // query params - var queryParams: Dictionary = new Dictionary(); - var headerParams: Dictionary = new Dictionary(); - - - - - - - - var token:AsyncToken = getApiInvoker().invokeAPI(path, "GET", queryParams, null, headerParams); - - var requestId: String = getUniqueId(); - - token.requestId = requestId; - token.completionEventType = "get_order_by_id"; - - token.returnType = Order; - return requestId; - - } - - /* - * Returns void - */ - public function delete_order (orderId: String): String { - // create path and map variables - var path: String = "/store/order/{orderId}".replace(/{format}/g,"xml").replace("{" + "orderId" + "}", getApiInvoker().escapeString(orderId)); - - // query params - var queryParams: Dictionary = new Dictionary(); - var headerParams: Dictionary = new Dictionary(); - - - - - - - - var token:AsyncToken = getApiInvoker().invokeAPI(path, "DELETE", queryParams, null, headerParams); - - var requestId: String = getUniqueId(); - - token.requestId = requestId; - token.completionEventType = "delete_order"; - - token.returnType = null ; - return requestId; - - } - -} - -} diff --git a/samples/client/petstore/flash/flash/src/io/swagger/client/api/UserApi.as b/samples/client/petstore/flash/flash/src/io/swagger/client/api/UserApi.as deleted file mode 100644 index 06b0d079799..00000000000 --- a/samples/client/petstore/flash/flash/src/io/swagger/client/api/UserApi.as +++ /dev/null @@ -1,274 +0,0 @@ -package io.swagger.client.api { - -import io.swagger.common.ApiInvoker; -import io.swagger.exception.ApiErrorCodes; -import io.swagger.exception.ApiError; -import io.swagger.common.ApiUserCredentials; -import io.swagger.event.Response; -import io.swagger.common.SwaggerApi; -import io.swagger.client.model.User; - -import mx.rpc.AsyncToken; -import mx.utils.UIDUtil; -import flash.utils.Dictionary; -import flash.events.EventDispatcher; - -public class UserApi extends SwaggerApi { - /** - * Constructor for the UserApi api client - * @param apiCredentials Wrapper object for tokens and hostName required towards authentication - * @param eventDispatcher Optional event dispatcher that when provided is used by the SDK to dispatch any Response - */ - public function UserApi(apiCredentials: ApiUserCredentials, eventDispatcher: EventDispatcher = null) { - super(apiCredentials, eventDispatcher); - } - - public static const event_create_user: String = "create_user"; - public static const event_create_users_with_array_input: String = "create_users_with_array_input"; - public static const event_create_users_with_list_input: String = "create_users_with_list_input"; - public static const event_login_user: String = "login_user"; - public static const event_logout_user: String = "logout_user"; - public static const event_get_user_by_name: String = "get_user_by_name"; - public static const event_update_user: String = "update_user"; - public static const event_delete_user: String = "delete_user"; - - - /* - * Returns void - */ - public function create_user (body: User): String { - // create path and map variables - var path: String = "/user".replace(/{format}/g,"xml"); - - // query params - var queryParams: Dictionary = new Dictionary(); - var headerParams: Dictionary = new Dictionary(); - - - - - - - - var token:AsyncToken = getApiInvoker().invokeAPI(path, "POST", queryParams, body, headerParams); - - var requestId: String = getUniqueId(); - - token.requestId = requestId; - token.completionEventType = "create_user"; - - token.returnType = null ; - return requestId; - - } - - /* - * Returns void - */ - public function create_users_with_array_input (body: Array): String { - // create path and map variables - var path: String = "/user/createWithArray".replace(/{format}/g,"xml"); - - // query params - var queryParams: Dictionary = new Dictionary(); - var headerParams: Dictionary = new Dictionary(); - - - - - - - - var token:AsyncToken = getApiInvoker().invokeAPI(path, "POST", queryParams, body, headerParams); - - var requestId: String = getUniqueId(); - - token.requestId = requestId; - token.completionEventType = "create_users_with_array_input"; - - token.returnType = null ; - return requestId; - - } - - /* - * Returns void - */ - public function create_users_with_list_input (body: Array): String { - // create path and map variables - var path: String = "/user/createWithList".replace(/{format}/g,"xml"); - - // query params - var queryParams: Dictionary = new Dictionary(); - var headerParams: Dictionary = new Dictionary(); - - - - - - - - var token:AsyncToken = getApiInvoker().invokeAPI(path, "POST", queryParams, body, headerParams); - - var requestId: String = getUniqueId(); - - token.requestId = requestId; - token.completionEventType = "create_users_with_list_input"; - - token.returnType = null ; - return requestId; - - } - - /* - * Returns String - */ - public function login_user (username: String, password: String): String { - // create path and map variables - var path: String = "/user/login".replace(/{format}/g,"xml"); - - // query params - var queryParams: Dictionary = new Dictionary(); - var headerParams: Dictionary = new Dictionary(); - - - - if("null" != String(username)) - queryParams["username"] = toPathValue(username); - if("null" != String(password)) - queryParams["password"] = toPathValue(password); - - - - - var token:AsyncToken = getApiInvoker().invokeAPI(path, "GET", queryParams, null, headerParams); - - var requestId: String = getUniqueId(); - - token.requestId = requestId; - token.completionEventType = "login_user"; - - token.returnType = String; - return requestId; - - } - - /* - * Returns void - */ - public function logout_user (): String { - // create path and map variables - var path: String = "/user/logout".replace(/{format}/g,"xml"); - - // query params - var queryParams: Dictionary = new Dictionary(); - var headerParams: Dictionary = new Dictionary(); - - - - - - - - var token:AsyncToken = getApiInvoker().invokeAPI(path, "GET", queryParams, null, headerParams); - - var requestId: String = getUniqueId(); - - token.requestId = requestId; - token.completionEventType = "logout_user"; - - token.returnType = null ; - return requestId; - - } - - /* - * Returns User - */ - public function get_user_by_name (username: String): String { - // create path and map variables - var path: String = "/user/{username}".replace(/{format}/g,"xml").replace("{" + "username" + "}", getApiInvoker().escapeString(username)); - - // query params - var queryParams: Dictionary = new Dictionary(); - var headerParams: Dictionary = new Dictionary(); - - - - - - - - var token:AsyncToken = getApiInvoker().invokeAPI(path, "GET", queryParams, null, headerParams); - - var requestId: String = getUniqueId(); - - token.requestId = requestId; - token.completionEventType = "get_user_by_name"; - - token.returnType = User; - return requestId; - - } - - /* - * Returns void - */ - public function update_user (username: String, body: User): String { - // create path and map variables - var path: String = "/user/{username}".replace(/{format}/g,"xml").replace("{" + "username" + "}", getApiInvoker().escapeString(username)); - - // query params - var queryParams: Dictionary = new Dictionary(); - var headerParams: Dictionary = new Dictionary(); - - - - - - - - var token:AsyncToken = getApiInvoker().invokeAPI(path, "PUT", queryParams, body, headerParams); - - var requestId: String = getUniqueId(); - - token.requestId = requestId; - token.completionEventType = "update_user"; - - token.returnType = null ; - return requestId; - - } - - /* - * Returns void - */ - public function delete_user (username: String): String { - // create path and map variables - var path: String = "/user/{username}".replace(/{format}/g,"xml").replace("{" + "username" + "}", getApiInvoker().escapeString(username)); - - // query params - var queryParams: Dictionary = new Dictionary(); - var headerParams: Dictionary = new Dictionary(); - - - - - - - - var token:AsyncToken = getApiInvoker().invokeAPI(path, "DELETE", queryParams, null, headerParams); - - var requestId: String = getUniqueId(); - - token.requestId = requestId; - token.completionEventType = "delete_user"; - - token.returnType = null ; - return requestId; - - } - -} - -} diff --git a/samples/client/petstore/flash/flash/src/io/swagger/client/model/Category.as b/samples/client/petstore/flash/flash/src/io/swagger/client/model/Category.as deleted file mode 100644 index 6aa73414387..00000000000 --- a/samples/client/petstore/flash/flash/src/io/swagger/client/model/Category.as +++ /dev/null @@ -1,32 +0,0 @@ -package io.swagger.client.model { - - - [XmlRootNode(name="Category")] - public class Category { - - - - [XmlElement(name="id")] - - public var id: Number = 0; - - - - [XmlElement(name="name")] - - public var name: String = null; - - - public function toString(): String { - var str: String = "Category: "; - - str += " (id: " + id + ")"; - - str += " (name: " + name + ")"; - - return str; - } - -} - -} diff --git a/samples/client/petstore/flash/flash/src/io/swagger/client/model/CategoryList.as b/samples/client/petstore/flash/flash/src/io/swagger/client/model/CategoryList.as deleted file mode 100644 index 342cd70c001..00000000000 --- a/samples/client/petstore/flash/flash/src/io/swagger/client/model/CategoryList.as +++ /dev/null @@ -1,18 +0,0 @@ -package io.swagger.client.model { - -import io.swagger.common.ListWrapper; - - public class CategoryList implements ListWrapper { - // This declaration below of _Category_obj_class is to force flash compiler to include this class - private var _category_obj_class: io.swagger.client.model.Category = null; - [XmlElements(name="category", type="io.swagger.client.model.Category")] - public var category: Array = new Array(); - - public function getList(): Array{ - return category; - } - -} - - -} diff --git a/samples/client/petstore/flash/flash/src/io/swagger/client/model/Order.as b/samples/client/petstore/flash/flash/src/io/swagger/client/model/Order.as deleted file mode 100644 index d6e4e6dc4d7..00000000000 --- a/samples/client/petstore/flash/flash/src/io/swagger/client/model/Order.as +++ /dev/null @@ -1,65 +0,0 @@ -package io.swagger.client.model { - - - [XmlRootNode(name="Order")] - public class Order { - - - - [XmlElement(name="id")] - - public var id: Number = 0; - - - - [XmlElement(name="petId")] - - public var petId: Number = 0; - - - - [XmlElement(name="quantity")] - - public var quantity: Number = 0; - - - - [XmlElement(name="shipDate")] - - public var shipDate: Date = null; - - /* Order Status */ - - - [XmlElement(name="status")] - - public var status: String = null; - - - - [XmlElement(name="complete")] - - public var complete: Boolean = false; - - - public function toString(): String { - var str: String = "Order: "; - - str += " (id: " + id + ")"; - - str += " (petId: " + petId + ")"; - - str += " (quantity: " + quantity + ")"; - - str += " (shipDate: " + shipDate + ")"; - - str += " (status: " + status + ")"; - - str += " (complete: " + complete + ")"; - - return str; - } - -} - -} diff --git a/samples/client/petstore/flash/flash/src/io/swagger/client/model/OrderList.as b/samples/client/petstore/flash/flash/src/io/swagger/client/model/OrderList.as deleted file mode 100644 index bba3d8a4724..00000000000 --- a/samples/client/petstore/flash/flash/src/io/swagger/client/model/OrderList.as +++ /dev/null @@ -1,18 +0,0 @@ -package io.swagger.client.model { - -import io.swagger.common.ListWrapper; - - public class OrderList implements ListWrapper { - // This declaration below of _Order_obj_class is to force flash compiler to include this class - private var _order_obj_class: io.swagger.client.model.Order = null; - [XmlElements(name="order", type="io.swagger.client.model.Order")] - public var order: Array = new Array(); - - public function getList(): Array{ - return order; - } - -} - - -} diff --git a/samples/client/petstore/flash/flash/src/io/swagger/client/model/Pet.as b/samples/client/petstore/flash/flash/src/io/swagger/client/model/Pet.as deleted file mode 100644 index a4a7d04830f..00000000000 --- a/samples/client/petstore/flash/flash/src/io/swagger/client/model/Pet.as +++ /dev/null @@ -1,75 +0,0 @@ -package io.swagger.client.model { - -import io.swagger.client.model.Category; -import io.swagger.client.model.Tag; - - [XmlRootNode(name="Pet")] - public class Pet { - - - - [XmlElement(name="id")] - - public var id: Number = 0; - - - - [XmlElement(name="category")] - - public var category: Category = NaN; - - - - [XmlElement(name="name")] - - public var name: String = null; - - - - // This declaration below of _photoUrls_obj_class is to force flash compiler to include this class - private var _photoUrls_obj_class: Array = null; - [XmlElementWrapper(name="photoUrls")] - [XmlElements(name="photoUrls", type="Array")] - - - public var photoUrls: Array = new Array(); - - - - // This declaration below of _tags_obj_class is to force flash compiler to include this class - private var _tags_obj_class: Array = null; - [XmlElementWrapper(name="tags")] - [XmlElements(name="tags", type="Array")] - - - public var tags: Array = new Array(); - - /* pet status in the store */ - - - [XmlElement(name="status")] - - public var status: String = null; - - - public function toString(): String { - var str: String = "Pet: "; - - str += " (id: " + id + ")"; - - str += " (category: " + category + ")"; - - str += " (name: " + name + ")"; - - str += " (photoUrls: " + photoUrls + ")"; - - str += " (tags: " + tags + ")"; - - str += " (status: " + status + ")"; - - return str; - } - -} - -} diff --git a/samples/client/petstore/flash/flash/src/io/swagger/client/model/PetList.as b/samples/client/petstore/flash/flash/src/io/swagger/client/model/PetList.as deleted file mode 100644 index ada0846c5ea..00000000000 --- a/samples/client/petstore/flash/flash/src/io/swagger/client/model/PetList.as +++ /dev/null @@ -1,20 +0,0 @@ -package io.swagger.client.model { - -import io.swagger.common.ListWrapper; -import io.swagger.client.model.Category; -import io.swagger.client.model.Tag; - - public class PetList implements ListWrapper { - // This declaration below of _Pet_obj_class is to force flash compiler to include this class - private var _pet_obj_class: io.swagger.client.model.Pet = null; - [XmlElements(name="pet", type="io.swagger.client.model.Pet")] - public var pet: Array = new Array(); - - public function getList(): Array{ - return pet; - } - -} - - -} diff --git a/samples/client/petstore/flash/flash/src/io/swagger/client/model/Tag.as b/samples/client/petstore/flash/flash/src/io/swagger/client/model/Tag.as deleted file mode 100644 index 7387e2e2745..00000000000 --- a/samples/client/petstore/flash/flash/src/io/swagger/client/model/Tag.as +++ /dev/null @@ -1,32 +0,0 @@ -package io.swagger.client.model { - - - [XmlRootNode(name="Tag")] - public class Tag { - - - - [XmlElement(name="id")] - - public var id: Number = 0; - - - - [XmlElement(name="name")] - - public var name: String = null; - - - public function toString(): String { - var str: String = "Tag: "; - - str += " (id: " + id + ")"; - - str += " (name: " + name + ")"; - - return str; - } - -} - -} diff --git a/samples/client/petstore/flash/flash/src/io/swagger/client/model/TagList.as b/samples/client/petstore/flash/flash/src/io/swagger/client/model/TagList.as deleted file mode 100644 index 25ebadb27fb..00000000000 --- a/samples/client/petstore/flash/flash/src/io/swagger/client/model/TagList.as +++ /dev/null @@ -1,18 +0,0 @@ -package io.swagger.client.model { - -import io.swagger.common.ListWrapper; - - public class TagList implements ListWrapper { - // This declaration below of _Tag_obj_class is to force flash compiler to include this class - private var _tag_obj_class: io.swagger.client.model.Tag = null; - [XmlElements(name="tag", type="io.swagger.client.model.Tag")] - public var tag: Array = new Array(); - - public function getList(): Array{ - return tag; - } - -} - - -} diff --git a/samples/client/petstore/flash/flash/src/io/swagger/client/model/User.as b/samples/client/petstore/flash/flash/src/io/swagger/client/model/User.as deleted file mode 100644 index 2b6474de90c..00000000000 --- a/samples/client/petstore/flash/flash/src/io/swagger/client/model/User.as +++ /dev/null @@ -1,81 +0,0 @@ -package io.swagger.client.model { - - - [XmlRootNode(name="User")] - public class User { - - - - [XmlElement(name="id")] - - public var id: Number = 0; - - - - [XmlElement(name="username")] - - public var username: String = null; - - - - [XmlElement(name="firstName")] - - public var firstName: String = null; - - - - [XmlElement(name="lastName")] - - public var lastName: String = null; - - - - [XmlElement(name="email")] - - public var email: String = null; - - - - [XmlElement(name="password")] - - public var password: String = null; - - - - [XmlElement(name="phone")] - - public var phone: String = null; - - /* User Status */ - - - [XmlElement(name="userStatus")] - - public var userStatus: Number = 0; - - - public function toString(): String { - var str: String = "User: "; - - str += " (id: " + id + ")"; - - str += " (username: " + username + ")"; - - str += " (firstName: " + firstName + ")"; - - str += " (lastName: " + lastName + ")"; - - str += " (email: " + email + ")"; - - str += " (password: " + password + ")"; - - str += " (phone: " + phone + ")"; - - str += " (userStatus: " + userStatus + ")"; - - return str; - } - -} - -} diff --git a/samples/client/petstore/flash/flash/src/io/swagger/client/model/UserList.as b/samples/client/petstore/flash/flash/src/io/swagger/client/model/UserList.as deleted file mode 100644 index e8a1fdb27f6..00000000000 --- a/samples/client/petstore/flash/flash/src/io/swagger/client/model/UserList.as +++ /dev/null @@ -1,18 +0,0 @@ -package io.swagger.client.model { - -import io.swagger.common.ListWrapper; - - public class UserList implements ListWrapper { - // This declaration below of _User_obj_class is to force flash compiler to include this class - private var _user_obj_class: io.swagger.client.model.User = null; - [XmlElements(name="user", type="io.swagger.client.model.User")] - public var user: Array = new Array(); - - public function getList(): Array{ - return user; - } - -} - - -} diff --git a/samples/client/petstore/flash/flash/src/io/swagger/common/ApiInvoker.as b/samples/client/petstore/flash/flash/src/io/swagger/common/ApiInvoker.as deleted file mode 100644 index 6d8466390a6..00000000000 --- a/samples/client/petstore/flash/flash/src/io/swagger/common/ApiInvoker.as +++ /dev/null @@ -1,276 +0,0 @@ -package io.swagger.common { -import io.swagger.event.ApiClientEvent; -import io.swagger.event.Response; - -import flash.events.EventDispatcher; -import flash.utils.*; -import mx.rpc.AsyncToken; -import mx.rpc.events.ResultEvent; -import mx.rpc.events.FaultEvent; -import mx.utils.ObjectUtil; -import mx.rpc.http.HTTPService; -import mx.messaging.messages.HTTPRequestMessage; -import mx.messaging.ChannelSet; -import mx.messaging.channels.DirectHTTPChannel; -import asaxb.xml.bind.ASAXBContext; -import asaxb.xml.bind.Unmarshaller; - -public class ApiInvoker extends EventDispatcher { - - private static const DELETE_DATA_DUMMY:String = "dummyDataRequiredForDeleteOverride"; - private static const X_HTTP_OVERRIDE_KEY:String = "X-HTTP-Method-Override"; - private static const CONTENT_TYPE_HEADER_KEY:String = "Content-Type"; - - public function ApiInvoker(apiUsageCredentials:ApiUserCredentials, eventNotifier:EventDispatcher, useProxy:Boolean = true) { - _apiUsageCredentials = apiUsageCredentials; - _useProxyServer = useProxy; - if (_apiUsageCredentials.hostName != null) { - _proxyHostName = _apiUsageCredentials.hostName; - } - _apiPath = _apiUsageCredentials.apiPath; - _proxyPath = _apiUsageCredentials.proxyPath; - _apiProxyServerUrl = _apiUsageCredentials.apiProxyServerUrl; - _apiEventNotifier = eventNotifier; - } - public var _apiEventNotifier:EventDispatcher; - internal var _apiProxyServerUrl:String = ""; - internal var _useProxyServer:Boolean = true; - private var _apiUsageCredentials:ApiUserCredentials; - private var _baseUrl:String = ""; - private var _proxyHostName:String = ""; - private var _apiPath:String = ""; - private var _proxyPath:String = ""; - - public function invokeAPI(resourceURL:String, method:String, queryParams:Dictionary, postObject:Object, headerParams:Dictionary):AsyncToken { - //make the communication - if (_useProxyServer) { - resourceURL = _apiProxyServerUrl + resourceURL; - } - else { - resourceURL = "http://" + _proxyHostName + _apiPath + resourceURL; - } - - var counter:int = 0; - var symbol:String = "&"; - var paramValue:Object; - for (var paramName:String in queryParams) { - paramValue = queryParams[paramName]; - //var key:String = paramName; - // do stuff - symbol = "&"; - if (counter == 0) { - symbol = "?"; - } - resourceURL = resourceURL + symbol + paramName + "=" + paramValue.toString(); - counter++; - - } -// trace(resourceURL); - //create a httpservice and invoke the rest url waiting for response - var requestHeader:Object = new Object(); - if (headerParams != null) { - for (var key:String in headerParams) { - requestHeader[key] = headerParams[key]; - } - } - - resourceURL = ApiUrlHelper.appendTokenInfo(resourceURL, requestHeader, _apiUsageCredentials); - - var bodyData:String = marshal(postObject).toString();//restRequest.postData; - - return doRestCall(resourceURL, onApiRequestResult, onApiRequestFault, method, bodyData, requestHeader, "application/xml"); - - - } - - public function marshal(source:Object):Object { -// trace("marshal got - " + source) - if (source is String) { - return source; - } else if (source is Array && source.length > 0) { - var writer:XMLWriter = new XMLWriter(); - var sourceArray:Array = source as Array; - var arrayEnclosure:String = getArrayEnclosure(sourceArray); - writer.xml.setName(arrayEnclosure); - - for (var i:int = 0; i < sourceArray.length; i++) { - var o:Object = sourceArray[i]; - writer.xml.appendChild(marshal(o)); - } - return writer.xml; - } else - return marshalObject(source); - } - - public function marshalObject(source:Object):XML { - var writer:XMLWriter = new XMLWriter(); - var objDescriptor:XML = describeType(source); - var property:XML; - var propertyType:String; - var propertyValue:Object; - - var qualifiedClassName:String = objDescriptor.@name; - qualifiedClassName = qualifiedClassName.replace("::", "."); - var className:String = qualifiedClassName.substring(qualifiedClassName.lastIndexOf(".") + 1); - className = className.toLowerCase() + className.substring(1); - writer.xml.setName(className); - - for each(property in objDescriptor.elements("variable")) { - propertyValue = source[property.@name]; - if (propertyValue != null) { - if (ObjectUtil.isSimple(propertyValue)) { - writer.addProperty(property.@name, propertyValue.toString()); - } - else { - writer.addProperty(property.@name, marshal(propertyValue).toXMLString()); - } - } - } - for each(property in objDescriptor.elements("accessor")) { - if (property.@access == "readonly") { - continue; - } - propertyValue = source[property.@name]; - if (source[property.@name] != null) { - if (ObjectUtil.isSimple(propertyValue)) { - writer.addProperty(property.@name, propertyValue.toString()); - } - else { - writer.addProperty(property.@name, marshal(propertyValue).toXMLString()); - } - } - } - return writer.xml; - } - - public function escapeString(str:String):String { - return str; - } - - private function doRestCall(url:String, resultFunction:Function, faultFunction:Function = null, - restMethod:String = "GET", - bodyData:Object = null, headers:Object = null, contentType:String = "application/xml"):AsyncToken { - var httpService:HTTPService = new HTTPService(); - - if (headers == null) { - headers = new Object(); - } - httpService.method = restMethod; - - if (restMethod.toUpperCase() != HTTPRequestMessage.GET_METHOD) { - //httpService.method = HTTPRequestMessage.POST_METHOD; - not required as we're using the proxy - if (bodyData == null) { - bodyData = new Object(); - } - - if (restMethod == HTTPRequestMessage.DELETE_METHOD) { - headers[X_HTTP_OVERRIDE_KEY] = HTTPRequestMessage.DELETE_METHOD; - bodyData = DELETE_DATA_DUMMY; - } - else if (restMethod == HTTPRequestMessage.PUT_METHOD) { - headers[X_HTTP_OVERRIDE_KEY] = HTTPRequestMessage.PUT_METHOD; - } - else { - headers[CONTENT_TYPE_HEADER_KEY] = contentType; - } - } - else { - //if the request type is GET and content type is xml then the Flex HTTPService converts it to a POST ... yeah - contentType = null; - } - - httpService.url = url; - httpService.contentType = contentType; - httpService.resultFormat = "e4x"; - httpService.headers = headers; - httpService.addEventListener(ResultEvent.RESULT, resultFunction); - if (faultFunction != null) { - httpService.addEventListener(FaultEvent.FAULT, faultFunction); - } - if (_useProxyServer) { - httpService.useProxy = true; - - var channelSet:ChannelSet = new ChannelSet(); - var httpChannel:DirectHTTPChannel = new DirectHTTPChannel(""); - httpChannel.uri = ApiUrlHelper.getProxyUrl(_proxyHostName, _proxyPath); - channelSet.addChannel(httpChannel); - httpService.channelSet = channelSet; - } - - return httpService.send(bodyData); - } - - private function onApiRequestResult(event:ResultEvent):void { - - // I put this in comments. Here, it's trying to parse XML and it fails if it's not XML. - // Therefore, it's better to have the raw result that we can parse as we want. - // TODO: Create different parser (JSON, XML, etc.) - /* - var completionListener:Function = event.token.completionListener; - var result:Object = event.result; - var resultType:Class = event.token.returnType; - var resultObject:Object; - if (resultType != null) { - var context:ASAXBContext = ASAXBContext.newInstance(resultType); - var unmarshaller:Unmarshaller = context.createUnmarshaller(); - var resultXML:XML = new XML(event.result); - try { - resultObject = unmarshaller.unmarshal(resultXML); - } - catch (error:TypeError) { - var errorResponse:Response = new Response(false, null, "Could not unmarshall response"); - if (_apiEventNotifier != null) { //dispatch event via assigned dispatcher - var failureEvent:ApiClientEvent = new ApiClientEvent(event.token.completionEventType); - failureEvent.response = errorResponse; - _apiEventNotifier.dispatchEvent(failureEvent); - } - } - - if (resultObject is ListWrapper) { - resultObject = ListWrapper(resultObject).getList(); - } - } - - var response:Response = new Response(true, resultObject); - */ - - var response:Response = new Response(true, event.result); - response.requestId = event.token.requestId; - var successEventType:String = event.token.completionEventType != null ? event.token.completionEventType : ApiClientEvent.SUCCESS_EVENT; - - if (_apiEventNotifier != null) { //dispatch event via assigned dispatcher - var successEvent:ApiClientEvent = new ApiClientEvent(successEventType); - successEvent.response = response; - _apiEventNotifier.dispatchEvent(successEvent); - } - } - - private function onApiRequestFault(event:FaultEvent):void { - var completionListener:Function = event.token.completionListener; - if (completionListener != null) { - completionListener.call(null, new Response(false, null, event.fault.faultString)); - } - - var failureEventType:String = event.token.completionEventType != null ? event.token.completionEventType : ApiClientEvent.FAILURE_EVENT; - - if (_apiEventNotifier != null) { //dispatch event via assigned dispatcher - var failureEvent:ApiClientEvent = new ApiClientEvent(failureEventType); - failureEvent.response = new Response(false, null, event.fault.faultString); - _apiEventNotifier.dispatchEvent(failureEvent); - } - } - - private function getArrayEnclosure(arr:Array):String { - if (arr != null && arr.length > 0) { - var className:String = flash.utils.getQualifiedClassName(arr[0]) - if (className.indexOf("::") > 0) - className = className.substr(className.indexOf("::") + 2, className.length) - - return className.substring(0, 1).toLowerCase() + className.substring(1, className.length) + "s"; - } else - return ""; - } - - -} -} diff --git a/samples/client/petstore/flash/flash/src/io/swagger/common/ApiUrlHelper.as b/samples/client/petstore/flash/flash/src/io/swagger/common/ApiUrlHelper.as deleted file mode 100644 index 8779610cd48..00000000000 --- a/samples/client/petstore/flash/flash/src/io/swagger/common/ApiUrlHelper.as +++ /dev/null @@ -1,41 +0,0 @@ -package io.swagger.common { -import io.swagger.common.ApiUserCredentials; - -/** - * @private - * Internal class for the Rest client - */ -internal class ApiUrlHelper { - - private static const API_URL_KEY:String = "api_key"; - private static const AUTH_TOKEN_URL_KEY:String = "auth_token"; - - private static const HTTP_URL_PREFIX:String = "http://"; - - internal static function appendTokenInfo(restUrl:String, requestHeader: Object, credentials: ApiUserCredentials): String { - //checks for the presence api credentials on client initialization and not repeated here - if(restUrl.indexOf("?") == -1){ - restUrl += ( "?" + API_URL_KEY + "=" + credentials.apiToken ); - } - else{ - restUrl += ( "&" + API_URL_KEY + "=" + credentials.apiToken ); - } - requestHeader.api_key = credentials.apiToken; - - if(credentials.authToken != null && credentials.authToken != ""){ - restUrl += ( "&" + AUTH_TOKEN_URL_KEY + "=" + credentials.authToken ); - requestHeader.auth_token = credentials.authToken; - } - - return restUrl; - } - - internal static function getProxyUrl(hostName: String, proxyPath: String): String{ - if (hostName..charAt(hostName.length) == "/") //remove trailing slash - { - hostName = hostName.substring(0, hostName.length - 1); - } - return HTTP_URL_PREFIX + hostName + proxyPath; - } -} -} diff --git a/samples/client/petstore/flash/flash/src/io/swagger/common/ApiUserCredentials.as b/samples/client/petstore/flash/flash/src/io/swagger/common/ApiUserCredentials.as deleted file mode 100644 index 118d917a247..00000000000 --- a/samples/client/petstore/flash/flash/src/io/swagger/common/ApiUserCredentials.as +++ /dev/null @@ -1,63 +0,0 @@ -package io.swagger.common { - -/** - * Api account credentials. - * - */ -public class ApiUserCredentials { - /** - * An apitoken that is passed along with the requests - */ - public var apiToken:String; - /** - * A valid auth_token which could be necessary for certain operations - */ - public var authToken:String; - /** - * The userId which could be required for certain operations - */ - public var userId:Number; - /** - * The host name for the Rest API eg. api.companyName.com - */ - public var hostName:String; - - /** - * The base path to the api resources - used along with the hostname - * eg. /v4 - */ - public var apiPath: String; - - /** - * The base path to the blazeds proxy - * eg. /v4/messagebroker/restproxy - */ - public var proxyPath: String; - - /** - * If a proxy server has been set up for the services specify the URL here. This value is used when the Api is invoked with - * the value useProxy as true - */ - public var apiProxyServerUrl: String; - - /** - * Constructor of ApiUserCredentials - * @param apiToken An apitoken that is passed along with the requests - * @param authToken A valid auth_token which could necessary for certain operations - * @param hostName The host name for the Rest API eg. api.companyName.com - * @param userId The userId which is required for certain operations - currently, get user lists - */ - public function ApiUserCredentials(hostName: String, apiPath: String, apiToken: String, - authToken: String = null, userId: Number = -1, apiProxyServerUrl: String="", - proxyPath: String = null) { - this.hostName = hostName; - this.apiToken = apiToken; - this.authToken = authToken; - this.userId = userId; - this.apiPath = apiPath; - this.apiProxyServerUrl = apiProxyServerUrl; - this.proxyPath = proxyPath; - } - -} -} \ No newline at end of file diff --git a/samples/client/petstore/flash/flash/src/io/swagger/common/ListWrapper.as b/samples/client/petstore/flash/flash/src/io/swagger/common/ListWrapper.as deleted file mode 100644 index b22890ad1d1..00000000000 --- a/samples/client/petstore/flash/flash/src/io/swagger/common/ListWrapper.as +++ /dev/null @@ -1,9 +0,0 @@ -package io.swagger.common -{ - public interface ListWrapper - { - - function getList(): Array; - - } -} \ No newline at end of file diff --git a/samples/client/petstore/flash/flash/src/io/swagger/common/SwaggerApi.as b/samples/client/petstore/flash/flash/src/io/swagger/common/SwaggerApi.as deleted file mode 100644 index 059de642a74..00000000000 --- a/samples/client/petstore/flash/flash/src/io/swagger/common/SwaggerApi.as +++ /dev/null @@ -1,75 +0,0 @@ -package io.swagger.common -{ - import io.swagger.common.ApiUserCredentials; - - import flash.events.EventDispatcher; - import flash.events.IEventDispatcher; - - import mx.utils.UIDUtil; - - public class SwaggerApi extends EventDispatcher - { - - protected var _apiUsageCredentials:ApiUserCredentials; - protected var _apiEventNotifier:EventDispatcher; - protected var _apiInvoker: ApiInvoker; - - protected var _useProxyServer: Boolean = false; - - - /** - * Constructor for the api client - * @param apiCredentials Wrapper object for tokens and hostName required towards authentication - * @param eventDispatcher Optional event dispatcher that when provided is used by the SDK to dispatch any Response - */ - public function SwaggerApi(apiCredentials: ApiUserCredentials, eventDispatcher: EventDispatcher = null) { - super(); - _apiUsageCredentials = apiCredentials; - _apiEventNotifier = eventDispatcher; - } - - public function useProxyServer(value:Boolean, proxyServerUrl: String = null):void { - _useProxyServer = value; - } - - protected function getApiInvoker():ApiInvoker { - if(_apiInvoker == null){ - if(_apiEventNotifier == null){ - _apiEventNotifier = this; - } - _apiInvoker = new ApiInvoker(_apiUsageCredentials, _apiEventNotifier, _useProxyServer); - } - return _apiInvoker; - } - - protected function getUniqueId():String { - return UIDUtil.createUID(); - } - - /** - * Method for returning the path value - * For a string value an empty value is returned if the value is null - * @param value - * @return - */ - protected static function toPathValue(value: Object): String { - if(value is Array){ - return arrayToPathValue(value as Array); - } - return value == null ? "" : value.toString(); - } - - /** - * Method for returning a path value - * For a list of objects a comma separated string is returned - * @param objects - * @return - */ - protected static function arrayToPathValue(objects: Array): String { - var out: String = ""; - - return objects.join(","); - } - - } -} \ No newline at end of file diff --git a/samples/client/petstore/flash/flash/src/io/swagger/common/XMLWriter.as b/samples/client/petstore/flash/flash/src/io/swagger/common/XMLWriter.as deleted file mode 100644 index 0b08066775b..00000000000 --- a/samples/client/petstore/flash/flash/src/io/swagger/common/XMLWriter.as +++ /dev/null @@ -1,28 +0,0 @@ -package io.swagger.common -{ - public class XMLWriter - { - public var xml:XML; - - public function XMLWriter() - { - xml=; - } - - public function reset():void { - xml=new XML(); - } - - public function addProperty(propertyName:String, propertyValue:String):XML { - var xmlProperty:XML= - xmlProperty.setName(propertyName); - xmlProperty.appendChild(propertyValue); - xml.appendChild(xmlProperty); - return xmlProperty; - } - - public function addAttribute(propertyName:String, attribute:String, attributeValue:String):void { - xml.elements(propertyName)[0].@[attribute]=attributeValue; - } - } -} \ No newline at end of file diff --git a/samples/client/petstore/flash/flash/src/io/swagger/event/ApiClientEvent.as b/samples/client/petstore/flash/flash/src/io/swagger/event/ApiClientEvent.as deleted file mode 100644 index d64cd304d49..00000000000 --- a/samples/client/petstore/flash/flash/src/io/swagger/event/ApiClientEvent.as +++ /dev/null @@ -1,36 +0,0 @@ -package io.swagger.event { -import io.swagger.event.Response; - -import flash.events.Event; - -/** - * Event dispatched by the SDK to communicate success events and failure events. - * If a custom dispatcher has been assigned by the consumer on the generated client then the dispatcher dispatches - * the ApiClientEvent to indicate success or failure of the invocation using the Response - */ -public class ApiClientEvent extends Event{ - - /** - * Event type to indicate a unsuccessful invocation - */ - public static const FAILURE_EVENT:String = "unsuccesfulInvocation"; - - /** - * Event type to indicate a successful invocation - */ - public static const SUCCESS_EVENT:String = "successfulInvocation"; - - /** - * The Response object which contains response info - */ - public var response: Response; - /** - * Any additional info - */ - public var message:String; - - public function ApiClientEvent(type:String,bubbles:Boolean = false,cancelable:Boolean = false) { - super(type, bubbles, cancelable); - } -} -} \ No newline at end of file diff --git a/samples/client/petstore/flash/flash/src/io/swagger/event/Response.as b/samples/client/petstore/flash/flash/src/io/swagger/event/Response.as deleted file mode 100644 index a43b7980a38..00000000000 --- a/samples/client/petstore/flash/flash/src/io/swagger/event/Response.as +++ /dev/null @@ -1,56 +0,0 @@ -package io.swagger.event { - -/** - * Response contains info on the result of an API invocation. - * A completion listener will expect this Response object. - */ -public class Response { - - /** - * Indicates whether the invoked operation failed or succeeded - */ - public var isSuccess:Boolean; - - /** - * The payload of the succesful operation eg. a Word in a WordRequest - */ - public var payload:Object; - - /** - * Error message in case of failure - */ - public var errorMessage:String; - - /** - * A request Id that was passed in by the user as a param when invoking the operation - */ - public var requestId:String; - private static const API_ERROR_MSG:String = "Api error response: "; - - public function Response(isSuccessful: Boolean, payload: Object = null, errorMessage: String = null, requestId: String = null) { - this.isSuccess = isSuccessful; - this.payload = payload; - this.errorMessage = getFriendlyMessage(errorMessage); - } - - private static function getFriendlyMessage(errorMessage: String): String{ - var result: String = errorMessage; - if(errorMessage == null) - return null; - var errorCode: String; - var errorCodeArray: Array = errorMessage.match(/(?<=HTTP\/1.1 )[0-9][0-9][0-9]/); - if(errorCodeArray != null && errorCodeArray.length == 1){ - errorCode = String(errorCodeArray[0]); - } - var msgArray: Array = errorMessage.match(/(?<=HTTP\/1.1 [0-9][0-9][0-9] )[^]*/); - if(msgArray != null && msgArray.length == 1){ - result = API_ERROR_MSG + String(msgArray[0]); - } - return result; - } - - public function toString(): String { - return "Response (requestId:" + requestId + "; isSuccess:" + isSuccess + "; errorMessage:" + errorMessage + "; payload:" + payload + ")"; - } -} -} \ No newline at end of file diff --git a/samples/client/petstore/flash/flash/src/io/swagger/exception/ApiError.as b/samples/client/petstore/flash/flash/src/io/swagger/exception/ApiError.as deleted file mode 100644 index c8ac95a5c59..00000000000 --- a/samples/client/petstore/flash/flash/src/io/swagger/exception/ApiError.as +++ /dev/null @@ -1,10 +0,0 @@ -package io.swagger.exception -{ - public class ApiError extends Error - { - public function ApiError(id:*=0, message:*="") - { - super(message,id); - } - } -} \ No newline at end of file diff --git a/samples/client/petstore/flash/flash/src/io/swagger/exception/ApiErrorCodes.as b/samples/client/petstore/flash/flash/src/io/swagger/exception/ApiErrorCodes.as deleted file mode 100644 index e5ea46480aa..00000000000 --- a/samples/client/petstore/flash/flash/src/io/swagger/exception/ApiErrorCodes.as +++ /dev/null @@ -1,34 +0,0 @@ -package io.swagger.exception -{ - public class ApiErrorCodes - { - /** - * System exception. - */ - public static const SYSTEM_EXCEPTION: Number = 0; - - /** - * With Arguments as current key. - */ - public static const API_KEY_NOT_VALID: Number = 1000; - /** - * With arguments as current token value - */ - public static const AUTH_TOKEN_NOT_VALID: Number = 1001; - /** - * With arguments as input JSON and output class anme - */ - public static const ERROR_CONVERTING_JSON_TO_JAVA: Number = 1002; - /** - * With arguments as JAVA class name - */ - public static const ERROR_CONVERTING_JAVA_TO_JSON: Number = 1003; - - public static const ERROR_FROM_WEBSERVICE_CALL: Number = 1004; - /** - * With arguments as current API server name - */ - public static const API_SERVER_NOT_VALID: Number = 1005; - - } -} \ No newline at end of file From 00349406f8addfe2463fce5901a66cd13495187b Mon Sep 17 00:00:00 2001 From: glederrey Date: Fri, 5 Feb 2016 12:16:27 +0100 Subject: [PATCH 071/189] FIX: Fix the flash client library. --- .../codegen/languages/FlashClientCodegen.java | 20 +++--- .../src/main/resources/flash/ApiInvoker.as | 27 +++++++- .../src/main/resources/flash/ApiUrlHelper.as | 2 +- .../src/main/resources/flash/README.txt | 65 +++++++++++++++++++ .../src/main/resources/flash/api.mustache | 2 +- 5 files changed, 101 insertions(+), 15 deletions(-) create mode 100644 modules/swagger-codegen/src/main/resources/flash/README.txt diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/FlashClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/FlashClientCodegen.java index 2184e4013fe..02bcbd02b50 100755 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/FlashClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/FlashClientCodegen.java @@ -29,7 +29,7 @@ public class FlashClientCodegen extends DefaultCodegen implements CodegenConfig protected String packageVersion; protected String invokerPackage = "io.swagger"; - protected String sourceFolder = "src/main/flex"; + protected String sourceFolder = "flash"; public FlashClientCodegen() { super(); @@ -83,7 +83,7 @@ public class FlashClientCodegen extends DefaultCodegen implements CodegenConfig .defaultValue("1.0.0")); cliOptions.add(new CliOption(CodegenConstants.INVOKER_PACKAGE, CodegenConstants.INVOKER_PACKAGE_DESC)); cliOptions.add(new CliOption(CodegenConstants.SOURCE_FOLDER, "source folder for generated " + - "code. e.g. src/main/flex")); + "code. e.g. flash")); } @@ -124,8 +124,7 @@ public class FlashClientCodegen extends DefaultCodegen implements CodegenConfig //modelPackage = invokerPackage + File.separatorChar + "client" + File.separatorChar + "model"; //apiPackage = invokerPackage + File.separatorChar + "client" + File.separatorChar + "api"; - final String invokerFolder = (sourceFolder + File.separator + invokerPackage + File.separator - + "swagger" + File.separator).replace(".", File.separator).replace('.', File.separatorChar); + final String invokerFolder = (sourceFolder + File.separator + "src/" + invokerPackage + File.separator).replace(".", File.separator).replace('.', File.separatorChar); supportingFiles.add(new SupportingFile("ApiInvoker.as", invokerFolder + "common", "ApiInvoker.as")); supportingFiles.add(new SupportingFile("ApiUrlHelper.as", invokerFolder + "common", "ApiUrlHelper.as")); @@ -133,14 +132,15 @@ public class FlashClientCodegen extends DefaultCodegen implements CodegenConfig supportingFiles.add(new SupportingFile("ListWrapper.as", invokerFolder + "common", "ListWrapper.as")); supportingFiles.add(new SupportingFile("SwaggerApi.as", invokerFolder + "common", "SwaggerApi.as")); supportingFiles.add(new SupportingFile("XMLWriter.as", invokerFolder + "common", "XMLWriter.as")); - supportingFiles.add(new SupportingFile("ApiError.as", invokerFolder + "exception", "ApiErrors.as")); + supportingFiles.add(new SupportingFile("ApiError.as", invokerFolder + "exception", "ApiError.as")); supportingFiles.add(new SupportingFile("ApiErrorCodes.as", invokerFolder + "exception", "ApiErrorCodes.as")); supportingFiles.add(new SupportingFile("ApiClientEvent.as", invokerFolder + "event", "ApiClientEvent.as")); supportingFiles.add(new SupportingFile("Response.as", invokerFolder + "event", "Response.as")); supportingFiles.add(new SupportingFile("build.properties", sourceFolder, "build.properties")); supportingFiles.add(new SupportingFile("build.xml", sourceFolder, "build.xml")); - supportingFiles.add(new SupportingFile("AirExecutorApp-app.xml", sourceFolder + File.separatorChar - + "bin", "AirExecutorApp-app.xml")); + supportingFiles.add(new SupportingFile("README.txt", sourceFolder, "README.txt")); + //supportingFiles.add(new SupportingFile("AirExecutorApp-app.xml", sourceFolder + File.separatorChar + // + "bin", "AirExecutorApp-app.xml")); supportingFiles.add(new SupportingFile("ASAXB-0.1.1.swc", sourceFolder + File.separatorChar + "lib", "ASAXB-0.1.1.swc")); supportingFiles.add(new SupportingFile("as3corelib.swc", sourceFolder + File.separatorChar @@ -181,13 +181,13 @@ public class FlashClientCodegen extends DefaultCodegen implements CodegenConfig @Override public String apiFileFolder() { - return (outputFolder + File.separatorChar + sourceFolder + File.separatorChar + return (outputFolder + File.separatorChar + sourceFolder + File.separatorChar + "src/" + apiPackage().replace('.', File.separatorChar)).replace('/', File.separatorChar); } @Override public String modelFileFolder() { - return (outputFolder + File.separatorChar + sourceFolder + File.separatorChar + return (outputFolder + File.separatorChar + sourceFolder + File.separatorChar + "src/" + modelPackage().replace('.', File.separatorChar)).replace('/', File.separatorChar); } @@ -253,7 +253,7 @@ public class FlashClientCodegen extends DefaultCodegen implements CodegenConfig } else if (p instanceof ArrayProperty) { return "new Array()"; } else { - return "null"; + return "NaN"; } } diff --git a/modules/swagger-codegen/src/main/resources/flash/ApiInvoker.as b/modules/swagger-codegen/src/main/resources/flash/ApiInvoker.as index 98d94052ec4..6d8466390a6 100644 --- a/modules/swagger-codegen/src/main/resources/flash/ApiInvoker.as +++ b/modules/swagger-codegen/src/main/resources/flash/ApiInvoker.as @@ -2,6 +2,19 @@ package io.swagger.common { import io.swagger.event.ApiClientEvent; import io.swagger.event.Response; +import flash.events.EventDispatcher; +import flash.utils.*; +import mx.rpc.AsyncToken; +import mx.rpc.events.ResultEvent; +import mx.rpc.events.FaultEvent; +import mx.utils.ObjectUtil; +import mx.rpc.http.HTTPService; +import mx.messaging.messages.HTTPRequestMessage; +import mx.messaging.ChannelSet; +import mx.messaging.channels.DirectHTTPChannel; +import asaxb.xml.bind.ASAXBContext; +import asaxb.xml.bind.Unmarshaller; + public class ApiInvoker extends EventDispatcher { private static const DELETE_DATA_DUMMY:String = "dummyDataRequiredForDeleteOverride"; @@ -99,7 +112,7 @@ public class ApiInvoker extends EventDispatcher { var qualifiedClassName:String = objDescriptor.@name; qualifiedClassName = qualifiedClassName.replace("::", "."); var className:String = qualifiedClassName.substring(qualifiedClassName.lastIndexOf(".") + 1); - className = className().toLowerCase() + className.substring(1); + className = className.toLowerCase() + className.substring(1); writer.xml.setName(className); for each(property in objDescriptor.elements("variable")) { @@ -178,7 +191,7 @@ public class ApiInvoker extends EventDispatcher { httpService.useProxy = true; var channelSet:ChannelSet = new ChannelSet(); - var httpChannel:HTTPChannel = new HTTPChannel(); + var httpChannel:DirectHTTPChannel = new DirectHTTPChannel(""); httpChannel.uri = ApiUrlHelper.getProxyUrl(_proxyHostName, _proxyPath); channelSet.addChannel(httpChannel); httpService.channelSet = channelSet; @@ -188,6 +201,11 @@ public class ApiInvoker extends EventDispatcher { } private function onApiRequestResult(event:ResultEvent):void { + + // I put this in comments. Here, it's trying to parse XML and it fails if it's not XML. + // Therefore, it's better to have the raw result that we can parse as we want. + // TODO: Create different parser (JSON, XML, etc.) + /* var completionListener:Function = event.token.completionListener; var result:Object = event.result; var resultType:Class = event.token.returnType; @@ -214,6 +232,9 @@ public class ApiInvoker extends EventDispatcher { } var response:Response = new Response(true, resultObject); + */ + + var response:Response = new Response(true, event.result); response.requestId = event.token.requestId; var successEventType:String = event.token.completionEventType != null ? event.token.completionEventType : ApiClientEvent.SUCCESS_EVENT; @@ -252,4 +273,4 @@ public class ApiInvoker extends EventDispatcher { } -} \ No newline at end of file +} diff --git a/modules/swagger-codegen/src/main/resources/flash/ApiUrlHelper.as b/modules/swagger-codegen/src/main/resources/flash/ApiUrlHelper.as index 4333c6c7e4c..8779610cd48 100644 --- a/modules/swagger-codegen/src/main/resources/flash/ApiUrlHelper.as +++ b/modules/swagger-codegen/src/main/resources/flash/ApiUrlHelper.as @@ -31,7 +31,7 @@ internal class ApiUrlHelper { } internal static function getProxyUrl(hostName: String, proxyPath: String): String{ - if (hostName(hostName.length - 1) == "/") //remove trailing slash + if (hostName..charAt(hostName.length) == "/") //remove trailing slash { hostName = hostName.substring(0, hostName.length - 1); } diff --git a/modules/swagger-codegen/src/main/resources/flash/README.txt b/modules/swagger-codegen/src/main/resources/flash/README.txt new file mode 100644 index 00000000000..c9a2a38d6a6 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/flash/README.txt @@ -0,0 +1,65 @@ +README for the Flash application. + +These instructions are given using the version 4.7 of Flash Builder. + +How to use the Flash client library: + +The code which is given to you is to be considered as a Library. Therefore, in Flash Builder, you have to: +1. Create an ActionScript Library Project. (Warning: If you are dealing with Files as parameter, you need to include the Adobe AIR libraries) +2. Copy the src folder from the flash library to the project. +3. Copy the lib folder. +4. Copy the build.properties and build.xml. (You can update the paths in build.properties) +5. Right+Click on the project folder and go to Properties. Then go to the tab 'ActionScript Library Build Path' and add these two SWC: 'as3corelib.swc' and 'ASAXB-0.1.1.swc'. (They are located in the folder lib) +6. Create the Flash Application + +How to use the Flash client library in an application: + +Using the Flash client library (especially getting the response message from the server) is a bit tricky. + +The response message is given through an EventDispatcher. Therefore, you have to create an EventDispatcher and listen to the endpoints that you're calling. Below, you will find a pseudo-code explaining how to do this. + +After creating an application in java, you will have a mxml file. In this mxml file, you need to declare a Script (given below) after the Declarations. + + + + diff --git a/modules/swagger-codegen/src/main/resources/flash/api.mustache b/modules/swagger-codegen/src/main/resources/flash/api.mustache index 7fa8cb03d0a..2f5ccfe0dbb 100644 --- a/modules/swagger-codegen/src/main/resources/flash/api.mustache +++ b/modules/swagger-codegen/src/main/resources/flash/api.mustache @@ -34,7 +34,7 @@ public class {{classname}} extends SwaggerApi { /* * Returns {{#returnType}}{{{returnType}}} {{/returnType}}{{^returnType}}void {{/returnType}} */ - public function {{nickname}} ({{#allParams}}{{paramName}}: {{{dataType}}}{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}}{{#hasMore}}, {{/hasMore}}{{/allParams}}): String { + public function {{nickname}} ({{#allParams}}{{paramName}}: {{{dataType}}}{{#hasMore}}, {{/hasMore}}{{/allParams}}): String { // create path and map variables var path: String = "{{path}}".replace(/{format}/g,"xml"){{#pathParams}}.replace("{" + "{{paramName}}" + "}", getApiInvoker().escapeString({{{paramName}}})){{/pathParams}}; From 41c735b22cd5490ea1c952fe896355fd69836ec6 Mon Sep 17 00:00:00 2001 From: glederrey Date: Fri, 5 Feb 2016 12:16:46 +0100 Subject: [PATCH 072/189] ADD: Add the flash client library sample --- .../client/petstore/flash/flash/README.txt | 65 ++++ .../petstore/flash/flash/build.properties | 29 ++ samples/client/petstore/flash/flash/build.xml | 192 ++++++++++ .../petstore/flash/flash/lib/ASAXB-0.1.1.swc | Bin 0 -> 46948 bytes .../petstore/flash/flash/lib/as3corelib.swc | Bin 0 -> 255357 bytes ...flexunit-4.1.0_RC2-28-flex_3.5.0.12683.swc | Bin 0 -> 194680 bytes ...aircilistener-4.1.0_RC2-28-3.5.0.12683.swc | Bin 0 -> 2294 bytes ...it-cilistener-4.1.0_RC2-28-3.5.0.12683.swc | Bin 0 -> 11827 bytes ...xunit-core-flex-4.0.0.2-sdk3.5.0.12683.swc | Bin 0 -> 165338 bytes .../flash/src/io/swagger/client/api/PetApi.as | 336 ++++++++++++++++++ .../src/io/swagger/client/api/StoreApi.as | 150 ++++++++ .../src/io/swagger/client/api/UserApi.as | 274 ++++++++++++++ .../src/io/swagger/client/model/Category.as | 32 ++ .../io/swagger/client/model/CategoryList.as | 18 + .../src/io/swagger/client/model/Order.as | 65 ++++ .../src/io/swagger/client/model/OrderList.as | 18 + .../flash/src/io/swagger/client/model/Pet.as | 75 ++++ .../src/io/swagger/client/model/PetList.as | 20 ++ .../flash/src/io/swagger/client/model/Tag.as | 32 ++ .../src/io/swagger/client/model/TagList.as | 18 + .../flash/src/io/swagger/client/model/User.as | 81 +++++ .../src/io/swagger/client/model/UserList.as | 18 + .../flash/src/io/swagger/common/ApiInvoker.as | 276 ++++++++++++++ .../src/io/swagger/common/ApiUrlHelper.as | 41 +++ .../io/swagger/common/ApiUserCredentials.as | 63 ++++ .../src/io/swagger/common/ListWrapper.as | 9 + .../flash/src/io/swagger/common/SwaggerApi.as | 75 ++++ .../flash/src/io/swagger/common/XMLWriter.as | 28 ++ .../src/io/swagger/event/ApiClientEvent.as | 36 ++ .../flash/src/io/swagger/event/Response.as | 56 +++ .../src/io/swagger/exception/ApiError.as | 10 + .../src/io/swagger/exception/ApiErrorCodes.as | 34 ++ 32 files changed, 2051 insertions(+) create mode 100644 samples/client/petstore/flash/flash/README.txt create mode 100644 samples/client/petstore/flash/flash/build.properties create mode 100644 samples/client/petstore/flash/flash/build.xml create mode 100644 samples/client/petstore/flash/flash/lib/ASAXB-0.1.1.swc create mode 100644 samples/client/petstore/flash/flash/lib/as3corelib.swc create mode 100644 samples/client/petstore/flash/flash/lib/ext/flexunit-4.1.0_RC2-28-flex_3.5.0.12683.swc create mode 100644 samples/client/petstore/flash/flash/lib/ext/flexunit-aircilistener-4.1.0_RC2-28-3.5.0.12683.swc create mode 100644 samples/client/petstore/flash/flash/lib/ext/flexunit-cilistener-4.1.0_RC2-28-3.5.0.12683.swc create mode 100644 samples/client/petstore/flash/flash/lib/ext/flexunit-core-flex-4.0.0.2-sdk3.5.0.12683.swc create mode 100644 samples/client/petstore/flash/flash/src/io/swagger/client/api/PetApi.as create mode 100644 samples/client/petstore/flash/flash/src/io/swagger/client/api/StoreApi.as create mode 100644 samples/client/petstore/flash/flash/src/io/swagger/client/api/UserApi.as create mode 100644 samples/client/petstore/flash/flash/src/io/swagger/client/model/Category.as create mode 100644 samples/client/petstore/flash/flash/src/io/swagger/client/model/CategoryList.as create mode 100644 samples/client/petstore/flash/flash/src/io/swagger/client/model/Order.as create mode 100644 samples/client/petstore/flash/flash/src/io/swagger/client/model/OrderList.as create mode 100644 samples/client/petstore/flash/flash/src/io/swagger/client/model/Pet.as create mode 100644 samples/client/petstore/flash/flash/src/io/swagger/client/model/PetList.as create mode 100644 samples/client/petstore/flash/flash/src/io/swagger/client/model/Tag.as create mode 100644 samples/client/petstore/flash/flash/src/io/swagger/client/model/TagList.as create mode 100644 samples/client/petstore/flash/flash/src/io/swagger/client/model/User.as create mode 100644 samples/client/petstore/flash/flash/src/io/swagger/client/model/UserList.as create mode 100644 samples/client/petstore/flash/flash/src/io/swagger/common/ApiInvoker.as create mode 100644 samples/client/petstore/flash/flash/src/io/swagger/common/ApiUrlHelper.as create mode 100644 samples/client/petstore/flash/flash/src/io/swagger/common/ApiUserCredentials.as create mode 100644 samples/client/petstore/flash/flash/src/io/swagger/common/ListWrapper.as create mode 100644 samples/client/petstore/flash/flash/src/io/swagger/common/SwaggerApi.as create mode 100644 samples/client/petstore/flash/flash/src/io/swagger/common/XMLWriter.as create mode 100644 samples/client/petstore/flash/flash/src/io/swagger/event/ApiClientEvent.as create mode 100644 samples/client/petstore/flash/flash/src/io/swagger/event/Response.as create mode 100644 samples/client/petstore/flash/flash/src/io/swagger/exception/ApiError.as create mode 100644 samples/client/petstore/flash/flash/src/io/swagger/exception/ApiErrorCodes.as diff --git a/samples/client/petstore/flash/flash/README.txt b/samples/client/petstore/flash/flash/README.txt new file mode 100644 index 00000000000..c9a2a38d6a6 --- /dev/null +++ b/samples/client/petstore/flash/flash/README.txt @@ -0,0 +1,65 @@ +README for the Flash application. + +These instructions are given using the version 4.7 of Flash Builder. + +How to use the Flash client library: + +The code which is given to you is to be considered as a Library. Therefore, in Flash Builder, you have to: +1. Create an ActionScript Library Project. (Warning: If you are dealing with Files as parameter, you need to include the Adobe AIR libraries) +2. Copy the src folder from the flash library to the project. +3. Copy the lib folder. +4. Copy the build.properties and build.xml. (You can update the paths in build.properties) +5. Right+Click on the project folder and go to Properties. Then go to the tab 'ActionScript Library Build Path' and add these two SWC: 'as3corelib.swc' and 'ASAXB-0.1.1.swc'. (They are located in the folder lib) +6. Create the Flash Application + +How to use the Flash client library in an application: + +Using the Flash client library (especially getting the response message from the server) is a bit tricky. + +The response message is given through an EventDispatcher. Therefore, you have to create an EventDispatcher and listen to the endpoints that you're calling. Below, you will find a pseudo-code explaining how to do this. + +After creating an application in java, you will have a mxml file. In this mxml file, you need to declare a Script (given below) after the Declarations. + + + + diff --git a/samples/client/petstore/flash/flash/build.properties b/samples/client/petstore/flash/flash/build.properties new file mode 100644 index 00000000000..8e77d88c961 --- /dev/null +++ b/samples/client/petstore/flash/flash/build.properties @@ -0,0 +1,29 @@ +# Window and document title for the documentation +title=Sample app AS3 SDK API Documentation + +#Path to the source folder where the .as files are located +sourcepath = ./src/main/flex + +# Class-folders you want to search for classes to be included in the docs, seperated by spaces (for example ../com/ ../net/ ) +# to include every .as and .mxml file within your project, just state ../ +domainextensions = ./src/main/flex + +# The Location of deployment library on your Computer (PC/Mac) for compiled SWC file +liboutputfolder = bin +liboutputfile = as3-sample-sdk.swc +libpath = lib + +# The Location of the output folder for your generated documents +docsoutputfolder = asdoc + +# The location of the test sources +testsourcepath = ./src/test/flex + +# Home directory for flex sdk, change this to build for Mac or PC using # as comment +FLEX4_SDK_HOME = /usr/local/flex_sdk_4.1.0/ +#FLEX4_SDK_HOME = /Applications/Adobe Flash Builder 4/sdks/4.1.0/ + +# The location of your asdoc.exe, change this to build for Mac or PC using # as comment +#asdoc.exe = C:/Program Files/Adobe/Flash Builder 4/sdks/3.5.0/bin/asdoc.exe +#asdoc.exe = /Applications/Adobe Flash Builder 4/sdks/3.5.0/bin/asdoc + diff --git a/samples/client/petstore/flash/flash/build.xml b/samples/client/petstore/flash/flash/build.xml new file mode 100644 index 00000000000..4f021b0b8b2 --- /dev/null +++ b/samples/client/petstore/flash/flash/build.xml @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + docs created + + + + + + + + + + + + + + + + + + + + + + + + SWC created + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/client/petstore/flash/flash/lib/ASAXB-0.1.1.swc b/samples/client/petstore/flash/flash/lib/ASAXB-0.1.1.swc new file mode 100644 index 0000000000000000000000000000000000000000..c93590267846ce45564dfeff8275a0030e39b2fc GIT binary patch literal 46948 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 B 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®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 z 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

~0h}jbwSe;hs;-5@3l#Tag}8J4!)GZ< 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

hJ&y@SE++|eXywknW1YNUHNmX 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 literal 0 HcmV?d00001 diff --git a/samples/client/petstore/flash/flash/lib/ext/flexunit-4.1.0_RC2-28-flex_3.5.0.12683.swc b/samples/client/petstore/flash/flash/lib/ext/flexunit-4.1.0_RC2-28-flex_3.5.0.12683.swc new file mode 100644 index 0000000000000000000000000000000000000000..e41bc68abd969ffbbcc736ff8543b6740cb94ee1 GIT binary patch literal 194680 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

h-lptIpe;z<>mXEWr^6cO2Du~P4-yR#jS!6z zjS-C#O%UxQx{>G&L^l!L!s_aw$~ATeIUSNJQP-Z;c1boSSD-GMVna~~YTR3yrfq?B zCbKB0gT_6mw`LXlPg^-kK~N>#!Rp9=qjRn{8R~rrb3p-@B%69)+aWNCt2d$dl~*U* zO)yGYMniQnMOHPxP$xr``osE>94_iIv0~);)9+1bYcFQBZw;t3{c4|PRjrDC8YLTLR^ci#St$uOkyd1TD``pzzHes8 z_z|W*!irfx#!TL4*aFPo!iYOUEWDK&>`AT7CabEp75G2RL{mJ?^!Kn_!R=(#*;8c= zknAk7y^zsJkxU~+viGu7b&e!3q^D-bH;2aw<L4A7STBu<~=HLRTLAnYhG) zWDpj(BYme`+r-t-3?lGdyBW1>$tGKbe;2Lo9byeiA(6{xQk2S7bl)`@yDA=ClcnNU z*T@J3jHgY@%gg6fl$Ms>c69J?#m!SlM2b~z^LO{@J@7Mr<%~o^0j(3Yup2&m~uM>1$lkEi?@toi_~{W;KDR z7VrlGQ8nfd#neb75?AAiC@kj^iKvQGK!abYYECUV0Xd}N$ z1C~MtCR-g=l!0xkX42|{VWVnCZyk8{L=rHqk}FkQtL9oQS}7eW%}why&4nHpOS5j-YPEZ_?h5!-1FJTx zy)IiJxf@Uo#FvH8(#Gs6X16v&Ot;nEmUXvC_H|Nz1-D+_;O__!4H69z4HJzJjS`I! zjT21}?IgO9=oYrpXR}JMmULM5qsO4i{VoS%UW5~st8U>MQ>qd6Q>`IL(OLuowbUW_ zC$C4CPHV$0RtvMOxW%F}J9Dv>XtnNe7mE*IA*Zz!oDFS2(VpR5C@D)>vHvlY)Z- zIcWG47a)((TBbsJ3>_7U2u=fvQ`JzO@pg!S&IaL8(j}Qz1?JiXlRm@HT{R^wVPsEW zM0k!OtdgEXAJrm)2P4?b2-C(wYMSXYMuakqV8{BQ63r_{gjZlC*TP;w07#>b2rBsZ zv{J%?mO|W1SWsPfwXOgrPE-H>lCj46cVQt=kbI`4)T+!Xf6ABf5usB}v>p(6SXue< zlrIqGd5-2q$-3oa^Tmmdzh-I|MY+K261##z71wGx6$eLA+^dnvzaC1F3+NuqZX7Z7 z#uFrLguQ4r^U5gH6O*FN!nkHrX!ep+VKrr!9WEytZKIPSiC}jbZrlhqrZDo2Uf2P> zGl1Pt0PYsa-xc8{NY2Pas28&QBL9}MMO_8q+OEh@8UEhN8WupVFN*i3*WdF`A$Nqd zAffgcsc7d7ob6kM@;tnEcfR;!ifJQ_V?3ub3;=AVE$##wo+9gs)+K9P)JRrRIf8Dd z4UR!qT(xvMU@t`T^P^c08jS3NV~96DJUW$bTbkQ|5e@Qn>=S2kB$>>g%b6@WSd)}R2&*`4=`$8x{4+{ z6~lzK32w5C;=kyg zal|gUOf!p!X1eBOr!XqLt7vj)@;goz<{x8Uu#j0cH=-@%aH(hpt2j0?HZa%4$81j^ z+_3QvT<);W7gig<;=75Olfy*SB5Ycgd%ebVxn`M;EGExoCbPbIp4ygN#JuVC_XsoV zvrCJckUtVov6sW{(H|%PH^f3=znX~p0|-W@2E(BU>^5TwH57&2W;~n-+6!YzjRu1; zHRzAV-LtzQY*k?&nuvx&u34i&jYbkNN73g`4FXFw5|4z`L?{+h!;wf>jraq8H5Lg3 z)I=m21QLY1Xx#588YC+Gj;N7vJm#4@DX39@DC(X)1*wr}G^&P!ekfHq9<&$QBM

c+=2zb8*`tZoifDYR)0wel8Dk`8bzH zxID(?aV}4C`HftDh;jMNjH_qh`Z%+lVXRuLVVx4Q*-Nr6pcO<{5N#y7ChL-IzEzQI zYa3h}6L6K*+#pHSnOLB|PdH7-1 z9%l31o^1tsN48a3bClN24Jo%6VWWA%fsUGh`2l|E{}=JTVP?o-R6*3y_G~fom~>F z`!{w;WlXjZOr&xHp(>SjNtH}SA${0vnW@VUOWQO`u-ZGQ^C{Nw19i zkseh_DhyF8d$pq9njY@86#cg7(O%vp4RPTV6}RltxEQNG^Idq-eSEl!q zd`l6+sI8__yi9xnzYzCPH`TP(Vcd$5P&0(hL0WA(I+l zi&zFz1-4Vj_Fny7U|W^zsWRD~&a=JWEa3wvB~vw3n*a`PLJrjzec2i`m1&jUbcwYw zAZuY{>kl!M@1<&U(>=8^AsoC}oYmAzkjAr`3}`x(#~6yeYG#rRQnH32C;bfTS0UdO zknbaGCb?27oq6?D{Vil2gIS+44u59l{dR_#BVB74D52h1QSMJJl>5_!<1j1t_lVrl zlIE#G?(bzL;6#}L;-G(+Dwu4-qbIxh{&ejlGaN5v9poaU3yV!9bww4iBgP43m9_ zrCO7%Qj_!?$^q?YKGv3Oqu;>GgS^&5-0u;u4(WSj6GSInYgtPLIvM_f@f%z3ynu*+ zMD391uZ%>0#qGHDKqQxG8XD5%zz6iS2fN4G9D)U1B4%0d(n?> z4*r3qS<49}&2lH;Zu*3bo%0{yo$g`(!1SNu(^DrD{pWBqBBO(G;W_yiEY+TAPp+5R z^h@+8xdCo#(%rCc0gV0Uw4A(|H0Do2un3)8eb@@1s=a*DL*8I z5DZT?vZP;b^OVAq|6!>BKB4e{+}2=K_1_ki0Ecr{?hRrYGNGZM{$?2-Dmz(Z@a|O| zN?4MeQbb}tDJm%~QiTFN_yMT*xEf;_;IN35%yLY`|#Uk?4R$D^|#8oWDJ2x zo{)Pvw%+tPnAYAd7xm^kv^;xKp52e1lA#|bZDBD_zg zK?H@Uxrq6{4|8T8z?|g|%K8Tid0g<+U>?sv9@AzX7xjVH zDMwzjW6rr*!HT!*N{ctIrUeVN8?TtxQZ{6ZTP!bV;C$toU%my|mDqrdyk_UH3%otU z`+O`h-wG@eU+y^CGne62*@*@Hv4qvIJ8^ow-fFTEa~O)_1%&Ymu2peMjjak+*tME@ zK+IranAMmnJF*m}6rqh*60Jk~6OJZes1Yt%`cQ3$EW`MG%P{j0IRN84i0ibFX>x+Y zKaQUXO^WM@X42a>Y{9mQ;H~<$l#=UF*v?sYU+b5#MR`KI!U^J*slJin%{*`{V-ubc-Fu@b1q?)2#5SS|wf#W-y9EtOqUFce;{PcM(va>es; z`{JXbbFooj5oi!sV34aG+jJL$}s6^ti5|{)XURiT{OR7q&9>U5ftu3o9he@$naWHZwi$*d|rj-%C zp_40|D=wJfV0Lto?toHFssVMV)~Pjet;yCXqnB9s8ey(ychsO6Z9Sb3$VC`~EzIS% zSz)eo_T^FGUF5PvEe3*+xrLv_b#Ao~uvepiz2*|L$hDUkSL!b@tGeq+r0E5l;0VLGGG&B}f?qfQKH`YHq+uy{7$vTSv~+HZlq7Od9J2o1=jjnT@u zu^IR@k+Zs0{gxLYMZcwAtNbo3)LLf*=%0laUB)N6nWw}6Rmah_;RBj(-0#9TT&N+31+ z`tZPWGHs%48Dhec%xnxOe&RG)#@ulEM!NGYQs-FYE?|!1qOzfy)uGAZk=YSQU{rfN zJ-K`A_;Fa#j1Q+_W;vZtQ707hMR^4rY})jRQrR~+SZskHA|N}Z#lfKEJzDeH%)N}$TG65{s?h{?W z*Ov!^pV;8@9mb>d$@Hw?PM_l>LI2QevI`pyEa$PSZ?L)c6AQj3k{3Hj7fob{F20A4 zlj5Z<&)LzH51eRU9>J>6OI>{%QSq0^K1^J@0m)E4y3OPJ<9};%bR0&Uw!kK zEb{J|Tp8#ZL#FoaD$!hKI~^IG9HN0cksn{z^lF6M=)|l%Ci0n3pSpUWFJtAyE*EXN z@9JwZ3rOAQXa&CqqN~G=cj3C!&5a5J@4kVw@a;jP%S4i|%eTw${prE{V5MPt=k+T7 zc>3hn_~fjdC_il4N*n53nKpuF|kZHXhtH5Qxjz{Nw9mQ@r z7V=*)T7UIoZwUe15^5+Oi6cl`h#PIJ#v<`>&7wV1jYgxWmWn{|@mRcJ$swsm0}(%} zeyhPq!e2f-YR(9xUGc%zuUNdEtlI7$s5=@!d#AUXN zDQ{~RS9?8*!5r&R=;c(mpm@?n{zwS)&229}3_*11qp&Q#O)T|q!=?UhdKY582@9H= zdlhkuabUT9d#{=sQuRB|PY-E&Z?7fA@x0?atloP#3bBsik{%C3NEk&ZaSG&d7vwR7 zN4M?^msqtlbcxllVf}70_|eGVr{ol!#*e@qMDnyCWE`&Knj?vVu_Ia66#EHmcVUxm;pClC-R0PXcY0pJIp*m+LD>@k&*u zig;F&^rJ@3R$b7aVyW6`48^ca-T9tcHCua8e>a;EXUmYw)0hj&bu7)0%ULEG?=0}| zU`YM)S%zjx4Y~8vGd&HeP!iTG4G>%SppT*t`ezwdBbW36OG3rA;OmG$q|X?UJ_F2d zV4q?7XW4XSH8cgZmHs@-?bJWVQjIy$9@9OI%1-j=B2ZJlOo_KhUt{_ov1U>t2DU5U z$q!JVah|0-YhTKEUc8W-?(E7Nn#@bhAvXGKzegle0OrB(!`_P|0I1${VC2rQ4? zV*_~;DcmIW%s!H#n4QHjODIU34~*a3chbIXm{iC5#!nY}laTJXK07ALZDVl(piJfX zr5F%;c;;d&uja@No7@W6bQBCWZx(@Nb2v2xVzv1hb6)H!;ecaaxC=HWg~0eSE!Huf zK90&9_ZYE-<%k>SbHzR59T+cDvz&pm83`cM0?$nD+f%ouqM^L1sQsAAIs+YTSH zJ<&IQciP}wSosH+YacYOF&yX_EwgNrAy~!FPLe+tn;eHOCEqsY5t=%M_mp3ySIvE5 zyw>P)xsn0>p_6lRE}Nfh`StP*%jIRR?-%ODH(qYyMf&e$r(dL@+LudT{A0agc=ORW7Ug} z?O-exb{3at{rst?bMdK%dUgGS?AjV z=ZelNOKXmL6HY~iwR}{K2K}(cj>jW#mw=!Cs2^75AwPuqgXsP)fXil8b9gmxsn_dW zUA5ZUNQc1XTB16k+L)pm$G@B@_3%aKvVzKTiW4D{RX0~XXymV!b4w*xs}W04t>@|r z)RbesI>yxv2#BnPP$!PZxvP`AZs2N{EiT)fiU&P~%8)@xmRp(CR+EJVqOBGvx2*!I z+M2RfS+!Z$WUbW@)||CUQVaPPWs-Gcwp!wwV4blURunf%l5-0^@wCcq>(;gtT~D-w zXn<&tXqae(XpCq#(XB+c5#3HSNpuI%okVxZUYpG>StZqGb4zwh^%kiHfu0=Ql8f1@ z2gi3O6BqAKdrA2L5N}J9lH5tRU%_J>S8zD!^vccs5ajDB0n-d@#XXNrDwI^)P%FY3KBB%@Rmbv1D56I}X`OTXS@FE@DzGy^G;3#C($VR^^7O zV3|+Q0E()ufM^IqfIe}mVP#xRE8}Wf8J`utbc|TjPvBCp1Vb1pJJu zRrJ)i5J4&#!_{KK!(1mE&5x9 z{NkABvK`kH#LPu!rKUW2Bz`4_rk%wcCSOCBHU-h$#-c0{W>g3!=1MT^7^iO%)tDV5 zEghd4K>LQg#Cg6**|D_{uPlF%a=_$s87@D(g-p9oqZy9DtT@>4njySAEWdtBUhUiH zn01_eMJM6KN9cw~dI>2;L26+&bF)w7Gv0R9#3MGsU z&W@|j25p!MZEg`(1=<99BBA5$tyljt=^jm+Dt7G~n}o1ovI;RGXk>mt)(7TUqJ^9! zO|W6%EeTyQ9>$v$ThZ8H&)DP+)cS|j429;8vV&Jr#0?~w+IiKrf--dtOiuNUP#Gq0 z)#RSth6plpVCv+_k>T`siCKjM)UFee%kWRKt1ylYE(fo=v?tAWpMXKRXI3$-69#uY z3^24e(t~D}W%El>)-^J6a~ci5Cd{C1*V2q8lbf&UUCb?b$($Edk6V<&B$=-jt@8I> zOV&kPyT*?T!=0P1g`t?X^1QCCkB*Gw8PyCdR{zx1cdWt|e9_i*)BZf~4E37Y#;lCM zDw$9q$9mtazoG=bPWzmP_?Q3Ab~1b2{Kw|F=xmt(tnh8r zf4pvqDM*cmqI8BZ=k00%e=rE#vy0XwYglH86?> z0%h~ZmKu*oV`?BCPn4KI;?`1cx!0?$s4Aze>`LzjYgn=2X|&kNTGo>g$40uI4wL~2 z@L;+?hu-Lsc~*0Pp)i} zZ7Um_8;Neowo26qIOo|0cdKtAAyL^p?>~o% zd;lF;(i2dz51{@cA3$lM8Q~9z=v_qbX0}S$70aF`lnOC7Ir@=ZTO>q5u0_d@>O*TO zZ4K^*Eh|x|#G6r$WNkr%D_cF~#eXW+! z`qiX`L1g{V4E{tUmZX&ej+{@i9wyC9cPoV4qN-X4Fuzf3;%-E-(T%8yb|VDAW^T** z+>lf6IzK(+(!0;k47v5KLLE$)sR+le=&`g!Y`Ij~05}oeUExWSM4MF&YN2g`2loh= zm3wfrI&HMn;vSwwbf1XlMQe>^OU>Bn38({c69Kd$!*Kd+NtozxE<L!T{?NM(j^O>7(qE3>~%B z=aTg-+i*eu6r1*yqk!u7*z`{Q(=4@u+GPd7)G%4Rk}n$^zKq_1d}xQH%DA~!^zYD< zR_QxT|6eS%vPnw$l0GSyT#4=Kz*wvEFgL9R%*{%QgYA#jhH`XXv2g2 zile!(Yjs1ke=<%Pe##IH{GWk#$^U|uJ6L$pZC}#=nTdXCAyvnJVbhtCiHrKr=)A(M z0;fBG(|;Hl{s-B0{U_OV{fg=T2`^Y=ZD>mVO88?U^OXN$(=+&R2Hx%}3EtPQOs7&M zm46Gb>(>ksj7ktUau;Ngl`)I$(nE54Qh!K(^dwgzlyB%bDpb{CMB* zPSN-DO%9(*=lyQjgkXF$J!#8_325%8ekaO|zyfGf(~QbmfBcm=pJH7(Y2+-<1z} z=69&6yN5>yQ9@hXKk|7gc=$)yl=c#0EfIELJwZPph#|B;=km zdqku0MD5})1@^=KSnc8yyb6zFrSnEPY{P>=_v{|2hQslgv-pdKN|^qNg{EMX`UbCE z*G3J*LP4vSkxaPGyVBa|?UWg>M9@$JDaA>iamoBgt>>DLTbj6KEw{9D3jv{62nfXz z<(4?-8*LjA%$@viA$Fyr%C^U4^uUAGMNF1mSxqC^o$L|e?h<$ayKl83TaLSMwfb@9 zbkeQ0Hd|h!+9Zg)LPTy5ajmQ1fh4U)J0i)xMs99xX(PIh=z5|ZL<2-aL?c9FL=!}B zVC9k~*==^*P)iQnq%tRNYh@R1QWZCCNn7NSs-z;+ZW3@Q_J+H(1wLDSJgD z`C!zY8ix0ZD!F-P1*1XVSjIP-vu}8URB`)!g)C58cQ*U7`DJY=9%980=nXC4&v7=w zhS(_1^{2VC%dlv0+p3xn|KZy<+L{w}=Y+?bl_@kBlr(AhG%92B4qepUZ@v zTuOnv`Jm{)zP$qjQ{&^Pm@O2tg+@I5CeHOsWxns)>NS5VUf`@?zVFeJ;fYz@%J4;M z*wT_qQjJb?QrG&WTCyYa6X}VGzT@dSoD$*t>l>U(;W+J_l`rgnh%ZUU;YAV%#Ly$ ztC9b3&pCQ=QBI?i2dO(RuwV3;fS6{$&Z}LCUB&52bys0qIICYQairK-RP6;)QcLt) z!z^|g=Y%e?LN>ox1F()AxQ-)av07D{jfZ=9=$S|Q5E>e_9gMDeU^0EOWMX!t@_plD zCt>P3y%lmeEsKEZCzAW(7k zbPdoW!yOx+8YQo9bxRDFeb>_E7CO)nnBcT--*ataZ0;^#mia(6G`(09B*(`0lhwgE z?FUQ7DD)7%I((0d7&}lM1i7|j2D#+3S3Y_G%fEBUt23J)((rBViYWq zOgxOd?SJA*&++oSuX5XLX1oB3#vGiDtKG28Jvgf^`aFn@!nipsu5$e~`@C=OwNBx4 z&?Jh1B(4Qmq-N0^7KRn+y1IH4-Oq(k$a@V~@^tr}*Wq+`_GS-HbhThK778qO%Bck- zv0!AWL)vH{5z>PGXdtEqLWzW*P_wl_Bos%-nW4m-Lt$X(kA&4wEVk6quoesi{Shq~ z_6LJnARLXy=br<^(`YQB1!D17L=6YR5IqSvV?cx!lZtFDYr+QBO-DYa^u;(Yf*D*^3^l z&?u<^omMF;xy8r1N{*^(xYCHes;n(sY2$1ySJrW*owN0vb#N9$C!;J<$GFnTwHvw8 z#gzoNcJq?$+`5BXcX3M(_uRyln|Ucj+>glIWe2%(8&@`S%k5m*#LMsCte02xaiyOt zgIvkj(#&=o7~ai2C%87ol>k>JxuS7p%C-)|Pw~pr+2 zSw-cBY%@?l(9+V4*??MFy1KD+i#Vtc+^}i0x<-P4y&_;M1V|N!A$84A8=O$&O=nfzt;N9-%? zt1N%}^}_8p3%7qn$5pA>GtUAXg^sw=;#?zbf2bDBNBw-2Qdp_D6-=zbV|lT)6#l;r4F}x33g#|E_TR zkBm)D*(~zVaP7*$E~$pGyHM;RClOO!X+@nub;TBGgT%BdR2Q@y-Xb+hjNjcQRWmE! zBB_YLK7yd__7h!_mpSTC+t4}MB~>w37b*|B9jH!NQqm_?Fi#lu3`@sQoKqG+u}!%X z!PqP6w;;Y}I;UI4OrJ}z}6F3d;(h%hWsYQNLLrA-)H2p~}H;p!C z89AxQk6zTD(q`J7&z%}j^`|w`m_vv;i%Vz->f;6`v?4Qsxo{r@o<<~$jIBxf9JvVA zERJ)i2>5UwExKBMm=yy>tJ1>^H5wmAueylNj4FK&NovD;VsxquhP(bKK4j+!CfY8y zc@QS=428kFYeUbvj*P?90dyvv5cW>ySuqbl`dutlLXglUj3A-k&33Ssd*A4C%N~i9 zN@bExH}4@h4@%ntSqM6y7iy=4ds_*JMz%GDm~ zaZye5Z?IHluBVb^D=+BZWYa}?HA&6M2CYs17E7(jte9@@Td9AWO=nQ;&}y-0mZ$Ok zykunc5@Bs1-6SL3tRQVxe?*AkX66^?Wd0+}e0ru|?Wt6=l>?goH>_VPYAv$}FPp)l z%4YCS7(%SsTEOG5QhDQQ)dZS@iz?0y%Wl<=ugPGR8ywu1u{;3o1DW8JO~Q@ z4ms75>uF&afbiUvsn$$up>`I8=(a3SyLX$xvupPrnQCXD+PznX7HG?~W!CmvGCqp4 z4&uBYg2_#xrdd9SRsM*4-oNVM3zyhF=^PA_Ti7RM{hZt+O}yl3K$Xd7Xf!2Fz?dvW5WoEU+XKYaC7{o``4HC5hIE)7}rPeSsG*aaRQP(5B?(yz{}c=!Us ze6ODtOx6RFPs%}6DShSDSIKwvr{&%isSV9N8`#ha{W-)4cOX3HLs-Tyk{;#}>5DRU z&o2SJRsKU+|B{@`bPzx6i+?C1B<5G3xYJa|ugTLHzpuO;+WG5pDgZyGGeLxB$0F(9 zlo9yyk7ejyq4rcyNOZ41l~dtl7zXrT!h>W9-24Db;>6Z^221icMoIn#%CLzc?U!E$ zI-vYm)?bG5L?6DW{}@UFGuhwDGt?o55he`bW86rB438<(XV2 zKAlV$lg&@*H{zyyn&9Wp%y>UH;&mGFej(y@Lcw(`rVF8e_CYEC%_!x+LCJ>Mzsv1+ z>HjW2dO`mWxd;JhXJPLGFehlcX${9s}R4INXXB29PwQGZgInXX+0 zkDgMdGn;+oWpMknf^Tj!ly3%Kp3>&2g3$LX)R-So=5v}=EsN@9us-k~QDQd=!Q)TD_ z;2Ti!8*`a0sjf^{vRiJ`UsR@Z$*qv}pD4yh;@im8W3g(MKft!UKyA4lHP#=HE&%U0 zFr+ugNH-}+H>*guX+OlKw!Ez9KT=ZLbJIQBWlX2PtiX(s%p_+}0bNWPT>mkw*%z2H zeqsjCo-$scx6sdN%J_Q)rWG+|aAV5AIR6O2FlChDa15bSQlmXCVL2JnhnTD@x(-dS zGh2F5|D`f>9y{hPXoi2oN|(vdf&L6D{adPZ&qZIh5j`3lk$y{!`ddYRRhdrSB&B*X zJuj4JO=A@EJ&^zgf+tc4v0KQ0B)dZ(+(Ks{V+Y+MP@8W|^Cjss5M> z(@kbixf?&*YHDw0Z~NO>av#+133c{+gVnzNc8GgRazDJDCspHxy;~J8%!3@x3Jy;S z4)0T;Hsy#dg}Uq?Ra6+l0PucBEuJsY&%(3FsX_rxhtc&1 zaat+;zN$Z`;>Yi7SpqWujM~dvhPeJ&wYR=`s9t|wO&!b}OdU!c&Kyo2V#y;=q|d3w zl=XQvb!+CFk@d+^>091-k!Prg)$sy z-xNR2WbS~79-OgWRC92ve_KVBcrPwA(Cg0ksHE>_()U#T`|9~z->v$2D%JTyv5vxf zpN670L(yl{R4S87^=5jL$Dm+;Wz^^;EMOJxh0(3fk5$p5eyn1T`mw721RqyphwFjI zKQ$izlpZ4;mj798|1{J8S%tOZzrbrH9~(bYXJ9I$iR_~O3l(R88FK>oSL9fOZ!QHK z|BE=LrT{h9vr$pO}LCmZV3 zKdxbOr3N#D$uxc@wZfP6Q(DnS^7k;ex&n;Yp42JyR^m@hWu}M_jM!w}z#y}bQ(!u_ z>?k^~GnKB&SIj@&>@1FV`}I+-BE}nw7$fcg1q#)fwM!SHxai9t$O@gDCC~D1zdmPq zl>5=y)e>Nrh*E>6Q^kj*dGF@&a6l7&-Oy(PdNfzLtQoG&6%Ut7Z62lwWJN`_;67g! zUK)f;U!o;M%V4jB?tNvMc6|~f7hH^-{c7Z=K`AyYLz^SC_=$;KTMRdCG3>B$=&wvq zKzEh(PQwAPVa&27#Sx^>j|7cbw0vLtX=TCnZwCTFbQnMo9prPs>|~#1Rr8=CIw=N< z%t+B~Yu~_7dNF{y16SP#G25ei}X zcCzDa10NTm%d3b57pdDUT(GgpeSMQd$?>rhBtR2-b%a-iQO)oszwi}MHa`hzbFsDM zWW;Rt=WY_miSEwQ^YJ+B6O<1|Lec5i$f@)oWzf1B8yM-k|Nh3sq8oA|Oy(LE zpsg8bv?f2l_2%8E#$Y8hSNOppd~yt4toZ_(f>C2UIMeq{rbh<_E7GYnwEr|>Y3ePa z$f{+rf)r(rh0%`T>-8-b8y{k{+IbQ3?igzFDwuh7PSfqqF|*T__RW1(PRUW3BmZQg zX|Ylu8&syC0+Z@rG0w^jizS;MUX%)2n$WZ0>O58yUX0A*o*jSDHZ6*VJlU`%Gn^h7 zobWBtd6F1IBkCk-Gz>o`(mFFmfo`+4DCWfKMQcot$*Ri$J6yFy5e(H;adC-@k)idN zk=_v1n=U8}$l;;%_%I<|es~j$zNn%kr0P0gO4jTXQzz5o)U`-~&NFv- z`3 zvR{t*-N>0|zdxO^7y6Fy{Gl1dFK|=88PalNOMB?(NNVp>2|5o#BbOU~7IyN^f#^I)A{pnow zqU7kjMafa~n`kT@15q^|k3`f&C=ge}i9o_?&a7%U9Pk%AE7Af1e;}wv!?BPW^2g)$ z!hliZ{%A-|#N!Dy77YZP#l2LGNBs#~ezH^}!9+w2M?+z>`3VElPy#VEq6nQCik1K} zK+V6*X+3xz^T)J+KO7=3^@tjaN1|#d5Cam51sz2b61rDLi1b82jYNWBt2si|cqkZG zqyBJA4JA;<8;gh3Xe<^~L(yo+QS?1mgV7+ABLF#4JHfI#LP+VVSF^gSYP3dg4Pj(7 zc{g|myc6D2iY@Q+hw(!O;G=Me28(NjTqDEUTX_A^IErAkIugP9I9p{~&1`F!yP4H7 zTMOe_D~eyWwVbtcM+awquAuDI7GYe8aTe!1!L?4VY_f3(Y2o}v?%0C9l9jDo+0OY6 z?%2uMF0S0fmED}};cPEwx1a+ebw5`RaHWZ>N4Rn;XSZ{92Um_E#)cCmvbG_T#VVs* zxre*PxqFH$_j0AejTyaJ$N-Q)Z@*lXx4{3~g`8D83)dm8d{~H5l?YdUk8%DSvpvV; zIs%;3w2~}m7OnnaE?HK<-h7=bX|Mrq2uae)s3fi0D6wX3bCydD+a$J5OXA(l@O&R6 zKM2>`;Qy#3S$g6BPKi}n(%A;7VHodDWba~C+8FTPs!ak-TJFm>Fv)U1#DKh;9+2Pg z#s}X-G|TAnkhnZ7E{}-IW8!i~Tpkyfw~EUX;_^0ed55^XOI)55m#4(#-Qx1JxV%SP z-YYKe6PNdk%Ll~egW~cbad}2uJ|ZsX#O0&n@-cDwxVU^mTs|o-pAwhf7ne_q%V!un z5VcvQ8ee0#WM|4wl-Q}eP{OALx8Q5Bgt{e-@t$s}lvxAlmf4orA~i_NeiKUc9J>jF zvz3BeTM(nu-GxHI689F#A~DZKlnR#KjB>=XJt*NTuOYq_8@eSAtE{7h-tKP6!m9Qn zs%Q1uZpq1N*3*O9ece(StMk*3`dhjsD{Js=kyc4;MJEa!SFY}sIP>lAmQ=RNvqf4d zvDJ_tp?pdlWrQq_z@IV~MgT$}MDE+$t3`*H6a+>+F7Q z{|*9E9EEvF&K^A>>;HtlSmpK#1o$Ym8PdS^%IE0JNB^np+o}H?(^yF!XeIBpXOOG@ z3)xePLceJg`dt(_l?dfu;Z zLr4h}W2#)Ueg!MC8|(2B9SZJ7mL*Wso5@`*)Au4!Kb}gV&SDNv5P->t+``jY1C7h}a}+2Q2jn;@{r%T$x3Zrf2%KzKRB`#j2r1=7NyO zOj~8j^%hf9>NFZBSt*gM6mr-1lfzx6AI28lDal?K?^3lSmmo}zsNVq8Z!lGpsX@FJ z#6d|w;5~RES^JVcj)KFpWes?m8;~aSiBv5Xzo(Yr)5+etT(Vvos?+bqcm$*ZToD5G zLE!pEqoymGq)Y`08C8bfhb{UOi2eCCmhxqMXX$kQ?X1_AT9sOzS$)1|l|1A_@6SFV z`@?gO{gCE^Omw>slGN`*O#cw#hFm}ij1A#M8#9g5nTkwPt^!3b&zJ!_A>Q)Em6h+lZIOLFH`)T25u@A@Sx&cKW8a_#xL-A|6kVYPX&?zX~?htD}^JDiw4ngy#E@b{|`eCz-P;9NOIa6 zOocL`CJAY~JsD=nh&&Y3f6ELv!6oQ${nI#19zqAjkG=%G{t`PRJq%OEVfJQOf3uuw z=xLA;Cg&}(F+xlq*T(2LRW^V%yg_~|dQc{am~L#vCuB3m476l9%rWnfbL~xZIQ&j| zIu*@ClQAZQ15d*5IJ!{A5a2>sGG=lZCY8@aL!XtW1q6&}9n;})B9joU^Luh{BGsAf zl!g-ea}>VQaHJi;&O@_dO8SDVe?i7KkZpiIBIhz|nj|+KK7UEhQTNxsEaM9;GhuPR ziTV7ooZ6V#h~Bi(r#rUxUl6|r=`WzE4zcgb`gi5j4Y}kE?9mJQ_vF;3%qCHO~8ippd<3zQ9!1=Q$a!EmdqB+^{c5HnSAjx-ClwU*KBah2%JEL6Uwskc^{dk`4A5=+Sp`9byx82e zkm<9E7+}vT`bU*iS1#Gb1ekLb0vHWIjL#S`J_AKL$v#UGyXO`Cvr4Kv)16r}aY27x zp=!5bQ9eh(Q0>&#%+@oRkQkVsH$!(qWC1`#WAcj%zQSsRR9XdD3BhB7L?XvtPik9c zTdp~|T^{o2Uq`W84G!KrAmX=;h;ZE{>3^o=glPBA%|yxV4AT6Cg74`pJ^C&_TA5kd ze!3eUeP21B8*=MEPjKTRV>)nn3l|6C-{7af3!G zlgleByhN*s))K8Jx`H`i#c$D6j#wd*6){AZ4OLHNdl!lsfrW)Ra2%^Rj#ZV^7YpOK zIpxH0>@ddh%d8-)9_l+WfXEC8)SVumJUG-hX$XGI;aqxf&XJp$WPRU6sOYrK49-iT z&47*bSc`$$2ON#@x{yV$nS4d@kIwnUq|s{h<2*$Ayl6{y$*ZX0(c&5&U8siSgF6%t zt6t5^t2D_%lQhYi(HXWwM$j5dR))97CFYb}C2kMAOr~{p_iFy@x-U!>eY7Pw3yemz=3_kmenlJ;dr38Pyc+!T&pRIpz(G zXg`r3q9w=r%uX_KbKhWEU~CwoA~6j%Em4tt#Z4*jlJmRKFK15yE0Avx8WA~0O zmploBWMXL5Qn8jVx|!M9r6Mi(Wt4rbg%ulXTRInG(w-%xDAr^kr2|{vB*f~UnoPTk z`d3pdw7jZ8%>ucL3Cj?r=f4|EzWrIN+YL*_oZZneI@$78?inNea?|BCLS9Uba`;Ch zvBkd4ORtNAOO+!p5S!KWRP=?n7=VZs3yR1(Rb!*+{H(sSZ=yS$9>v;}bj|LO_R0L9 zvq3G!Nxnj2(_#RWB|AXh;2<%b4c94@8J0{q7o*8uFfeXjvghZc8BhdEMTWPBuZNVE$@tO_kl+OoG6c+E#0a)vr28-Hqgc4jYpNa=wcx30f$t zhAU-MxpQz>J-Rds+?TYq zaK8@10+L!+SKm-~gRnIWhQbkPT;W%WBu5t(w%1A~nXgNN!l0$}K1YQ>?g0QP*#k%9*wS0ZNcuFL=UZO7#GKMubgY)L^jIVa zK-_tbE&$r}53n2=)j^V4Nb)ht%_)71Y{NXDNHqF16`@ zfX_7Z8Jduxt(YU}fM;Jbws)GP9-jRPKKoPF>+}sd^*>`NSJDM>{+vwEFueofd>`Zd z!0m zK@=~Px34Ep1#goP2i{j+A}qVml|hBnM(55?$>-O;gy}Msxh|>A%Jiqnu*RlomSJpq zI#~}&ACoV!5JMW4kw%n{$@=fhDR0sX4fdSKpaLaYpOt%^sjBnn-ma%ghGzY|kdg*- z?V;)R#7ujnUp=HIYtR^gl4WXz4?OX`(F8pNk6kAlvU? zQA?R&dieuGRsd%a()8J3VGBF~gkspO84YUXT%HpS$NBYJ`VYNPMD-3`2s~1?x%#Hg9d;K@W zbIJfK6BDJ&W<2Wj1(z@T+M}_X~{+3Yu&^Pt@`FS zu{bRZCjv#Mf}voDo3#%H!m$Mo5lZH8DlDJGUeR1d1>zCI8o^7}2rlCcA5VzvTy_{M zBGQ(!RWWoaq||C+X(C&)s-(hnDLctqkLr@$o|00c&4?Fh;b7(B$!Ndg{jL|-GqSq;-#Xxz4@>}W3N$0^WX>?ssRul1Lvtf5J{Y_Fj6 zoz$5Fy6k#^6ffvBYvcTkvD-`xAAjJg9Q<`$RjST8&IQFu*k$0#UUNz=vTZy>ARMHV&>UAoOO~ z;|~`H?!DHs&lyNpHyg}1Y!VhGhCPZ#7dBk*OkBO-D`|>{ugHn-^5?PUsq63r!bc4c zlnwNab`78(SZZ=S{w*(P$S(&2@7UILuw$j_B80_JWnuq8&+0HZGFlF{ee~^;PXcy9aE6ZD|DcN{FxKO92uJ!K9wFhZJPe!IkP8U z@d*+A=yfdoykcs7ST=SCOC7$B*%WniV^2`IKu2%#+ptln?y;#nXkw?2CIVk(eC&kJ zv~=YD_Oa<)Xht!F9^F@zsAHi(yIH;_ ze{=C5=rg>I_{8LkF!KXL>4Ce`gV*12dGyMvVV3xYD^6DAxcLh6H22I4dVN=8aerWr zV`w!VOoZ~z-qlzl5-DuFmJ)anJY&*@8zC5dFdcm?z9cdWQBBsD`U1^#THXb zjJ>~>Rhh!wS*yH)D;-(bZ@@KfT(>-IwJ9q)6#usDYFiicTX#KN0d()f6(aS@zHCVH zXJo14xFmH9(dmKv7J2`{1BZwnCVGVEtwe7ldOOiOh^C0%MRbJdDAAKd?;$!a$NV-s zi!iH&Bn9Q<2}vA7$n|)zuax3hy{h6_zNVp6z!D`_NR5758QW-A<7Dz;y#WFIY@5&& z$G#aw1rABFNz5%bZi5YyGlu&lSII1}1zFW{;caei&7$HP4Um$n?lezm{sOO5hHCZj+S~NrewAFfmLxswR9Q8|IF>4f*k#kHa)?>ZlBG(U=RpX+Gl$yQ z$x2G=A^;{z>7|qi0M$3G_aSo>28C7}^O7fY4m?@Srm0pXo5xkj|>Q_NF37XcAL4>7M1s8^b;J7K|F%n7RZ80y}$ z9c=s~?31jy#nLKS+N8A-?$4Ddv zW6!?d5O)b6fu)+;cj_;&o@Pd-U|(Xs zovgmKBhbQvFk?to%;SV1HWPXDu&>Zdtvey-v-%3tzbf7iWriL83`WquMgW$X&`$m9 z3uONd%>HKmoB8Zt#Oxcl_5@mF%04W~btqIbCnURUcyazdwQorJKEqp>lm3$R#&bh) zA(?ahAL`x&JdWc!7wzh0YI=5T0}up=Aqg%ZL1I=60B#^a4he{hNP^VH0W|<-2#6p6 zVE~HqI+i6%w!B-WyeJ91JC@`nvSY`NW7$rW#j(QyEy_2^`)-z-JSQ(UTTb4~jdSz- z&Nfi$9191HA2Q!= zY)>BBb4|48Wo*x|am{RxY`ntIA2VfQR;C}ZWM_Y;MECz1+ACKyHitGhMMt-1vLE@jt|kF1qDG(}fW6b6b;p(CR3N0h%r#V&L!|=m@IZw%bG>hORRi3_P<9#(X1aaZII_=;wdfN*wP1FKy*Ng zG2(35vJ4><*`!BEuX&lAGo#a!4^0$yoBCMRyi?d+Rg^zYb0~b%ESR=sDoC!u|QPl-Su>?IAb;0IkXcr!&=yMv2nKj8>flbTx%+1K6a_oPP22$~T2suvzQ z55eQ3!umfF35FfTfdD6}SjacO$JH>LuAC(l)lj@6?0_9K_sg26mfO9wclIfIL2ZZ0 z738i{BLH=sD=yv5(12g5;&L@@mwjAun?ULECVi7^FQ8`SR83MG@Y#ob8i%izqXvFg z(MHo=FRyNFSVLhGg#ilJQn-%7W(qe_xS4sKI)~4eMtex1_bvdpWEbup6#=`Yx^d&E zd1w;}iwkF7+!b>Bd)ScO`|uCN6mxLS-YxD0Qltzj#HaBVw4@W^Ogs~E7r84*)$ zL9r4$Ah8S84Gxm>hN^9Z#NCkCozxPVbO{Y1jULR9ut^7D3u(q+w;`MB=^@B{Bxz6B zB@}(VfVR76ZPo|3PLRpvbyh2#G)^X+Bw2GZDBoIl*`##&v6qdz%(~EU^6q?VoplTE z-IEu#ycUqyrld~@+#tXO+FKB^9b9u$4nzxMRxs8nwV*ye$0AERhUi+b_~b9id+3gZ zYO@w;;^8g~P*bWeydc__07_ZGqn3et;Y3_)<+o3e&yDo7Kmsla3vHsrPl&4zh#fH>VtKqkCkYOYk_(zu zqJE5?m>ru*qndmIzBK6aiGGf!GkW2!8($_dEwOEUEW7{w)Xc-H%3Ysy^-hkHlJn$5 zRUf`ec;&B46>Ln_EZs{LL{g|*Q=MxMuB2NRO4NoCo6zJ)&F7{sA!Blua7(Hd$X0*} zswsA6Ns&8N(*B|wBTKoSfE8VRrJNh+o%8Op`+9a1d0s$d^Fo8>d}?BBYIdAnMpvJB z&-+)_Jkv3hRb9aV=my!9iA+|MR@ubBB3T_96Vf_wru=ObfX{ArLnI_Rf(3ZucAlsJ z5`-fhR}Rrj0*fcGT&HrgQ?)D(T~kMgw8Bf!bI0=0`1wGJ%_FXXC?z<-LMoST46U|@m_KFCq0 z$wJNY)CetoCvT?*7hO@@Q`6}SW0SL4T7@i2pX|)!)N%B)1B=~={{&o3rAK-m#;spr zpIYJ;Y~2FLseR?^+wC}KDs@I?`UxB;aeKS4ho%zyCI7=|SMq}3rVu2~>o1L*x;bGyU=rrm(8y%Evee=4i15!wS;;b_+_xqT>olh$8qQFt&2CloKoyr;m6eUU%HSR=i|3C#20?f3W97KDOsVt=Tqm> zCD*+xsdS`R9=9~RSJZG=o3m-0T-Fz42nB4;650&jIzCNNlS7^v_RZfz$&jI7Ph}2v zn&u@>DJbBmwwtyMS+t>`x3ka++Ew~dgCz*2&cd6XuF|$IZC-W9?Y!Q3Z_Q~g>R4;* z&3;xfbJt25A-;}Fo{cAeS)SPz+1%1exU;h}hBi52-Y0IL)ukGbMLY0R972&ioR-5O zgtmhtb1c&7D2_TU6pV)>YBU_{P&=cMxEe+Ty;!t8f{1?c4z(lP5r#sYQ8n6*mNns6 zFsO#xV{kthYKQ#sj&_Jf!m;Xw8riYLw!CYp{rt(57HnJUraP4_89%&2BwK@9p%1*_R74 z?$9$~oD9%{Fju1CVAxSC0SPe2AdJMLWTO_*i|;QK>1>a2bGV?DS_G}^VmMEuk@hCR zwDLPOpTEjqV{h~~`8W7C)iHaUKU~{n-%-!%cl!6*2mGh(_xm5Pzm3_SVD`5&`#YKT z9J7Cs)jh|!&J;~|d3_a?%*m>l%5xok68U8;*~UanShTQ%o?&T5GfR>#>YuGXV~ z*xtbPHQdq6og2wTAHh^Qw{q7u?%s~B`#ce@ba16>HREhM_w7RQucw<=_2~N{B|);^ zgIww3YCnNf9_FrN+;*H-pWrnoxk8wfu6ww0FIVqFnXr;XcY*#h+@IpgFy|v^yv8z| zjiOh>+A)+8vvCp>PjEiPm1(YIIh*C|0(U;ll{b^aK;;n=yz)`T>mFl#)$4dYBv(Dj z`0AMc6qEHQnZlJ13KxOOGXlr*bzFazp&+}#%^N(t;q#0)egP6r@WvP5=gW+1Dz|+N zQhyIFzrlFJHyQVT3*z5~zwa=v{vp#VRj&LAT>d%y{QyBRHQj5gBXP8%I&v!Xy}csm z_Ap6Wo2zAhX-jS$TO|c^t@7%%>-OZLF{Z9Ng0^@uxs!Jd<=jVE=f26@ovd@uOzuI+ z|BxhgUX++$eFw{_taIJFSS}{mk=*_~L&}}%m*|%I750cKcdBQ<4wt{npvWI!`UC2V z@B``N-=%ac-1KfHzlXh#y_db86`~&~MlThkPZy&fE=E66jDEBj{f%PuH;d8VDn>6C zqaQ0qKVFP}q8R;TG5V=u^wY)YXNu9!7NfsijDD^d{i9;^rDF7ti_t$VM*plB{a!Kp z{bKYliqR{@Xr9UUoz`9Qz)7X*6zTxTTf3!I4hK_qc1w4m(sM1ca5V?9cx`v1N6}=lCfSV$9R70%`dK@H0HJkf$b@i^>Z_kbYsJ-5XvWwe z$x#H|l==yP(<`xBSwlsH#`}=vyr!<4<*caNUR8`AnU;n>V#stBpnoi%UnQ(|h1b(n(flPB!W=&gYZvjQa%=JWnLu`GlLH&lQOZO(uP< zfqoxTjA@kLtBR_%L0zvG(&5)%XY1J;j5j1J@`(zTtGH&oF?~W+&hiOHHg;s}hiV0Qm8{JtYFVO=T_6Zcu4?29Oqf{K4{L#31$uFcN>4%W z#TbU|@&_S|D^D}ygY1-)Tm6dhv?-lFCP_N9PyG;N=+r*Uj1RGVrU7OC=$YwpBxrn? zB`b!ser)@&&3J|-*9_SbYZ&1L{su#xjH*NvI(aLIv4KP;Q1eOjEW{Aejw^Om`xn&y zc$S*!z81)>eI<}vJ*+lM!y5eA0y%Yq;9|hlVfg|OGO7y(;LfLIp5iq`DCS}%} zWxmFe%~$h@W*Hl2e4PpPlgrdi2efZMrK;`sneh#F6^;5bfh=^%AFv@?vsB#<^uC4Z ziA@rYsK@b>9Fc@fuXrO(M%>kJ$(Cc4kmJ$iPwLr}&==ATiIRYTnRP7mNilcFA{5`b(D8tYr z{}Y6FDnDT;rrw&_O2DN5z~+*z{jCx?#QR5f!1yPYv?I*pl|&osx3ir672}`T)wvWR zYF5$Ld=!h^bQ#%m^7Qz0iccJm+S@yVW z{1+SCmCx)R-GxT6JDNwDS^o|hNElDZbICoKJ;MLlre|dcgPs-9zhMOPKY$Smdkn;MR?!TaB-gt31`IYOmt-_%PX-;(@5qK88+O^7$`7}wwgvVgn zo+HY0i9-yDUWJT_!?*w$Kg8$}2_MvW86i4{b>ZsqntU~R5C*jl6X76B9EB0{vOJ{2 zP}hg_A+_eOV4(j98t02cum3k_U|**11@xkJojuO)a%Ap2 zX#5?uBcC}2EkU&mRBgKtt+vV5_xLqjf&MSq_!k-9VDfn8_zRUyf+YKiZ2Uw{9;a7( zoIzgWr}A7raRM6ls(dA%av4992OXs!jeo_L>n(oZd?-`JQS)9!Ovv{t_^o;`CG;UW zD13dA#`~2kbEAXC2N3eI!ul$FP!Zq64=Tnbg}j)Z$tTXR#QnJND&*2E1*7vr{Pk@h&`GM-oF@U4DPp)cxvnfvlE zl#`?R#3+ODO8~CWf7^lZ3ufzHP>e4t=A6I}*jE%W8!{~ijjt;C#25;m{WvVv7rZU1 z}hRLv1e!U!Q|=8=^zFuH^w*cP9-^AOk~0<)jJfDCTnV` zG#RxW+OnqO`Zmjh{l4^g>S2-{E0_Ph{l_q|)~^*@2+Y6T%HLIdCZDja7XN{!7B^V;Ngmx!Gg zV`_VdsePvR=;1pL?H}0RwtO?ouIw|GC9;*FI(?xc2rAZfcXe{2nyK zMmQRdKH->yt4^-Dx#C5|7ljmGWO8012gvKhT49dONF`g6eNVuSUzc^sQIo5vB)jZY za(%<M{H-!pu*)ub{)UN<01^kq3_fV|UD@zs zp8t3cuKThkYc|}Yx8q%1YB%DDU6O|_ges4sDK_pJ(H1*n%Wq?s`xNpvr=S;BRA1SJ z#VVv-*I6aoW$eC^pWDx2Mc6|?6n0pLyAKE(ZWDW93+!V(8INhh4FO><;NGl>mV%3` z#ZoYlo@tw>6J;$8vty(USE5Y<|Gv#OLy_(Cide&PcC4#d#51t}#K4KdtdK}2pdbTz z`n6NrvedK0ptHsv48`-Qu?f1rV<8%5#@VqQ#Wus(be+L=9-ah}lhYkH`><^#g;4mi zZi#~DMK;p;GK&Z>G55$AJoC)(C@nGCjSEd>NiDsjsfn}ck(IR&77AJ&eDtvUCoYUl zPm9}})T*&yc@tdYuEMvKgb5IwN z=&Jjs$rPoJg~CWLumk}iQ!7Zry@i-)j~j-;Od(A#kgb^~MHjifGv(J7c34T0J$*4f zJPS>{y{Cds*UwlVustgzWue#=R22#ckfN*47uX_crhK6){$ciyP*%#_`(Fgv1{ za$9Z2At%-glJDiT)GOMMVz)An3Qa;mx}!L=D@x{=Nb#1W;5+iopM@%_R1K_P zDl9uw-MIHFZ2fM~>me*nq_JZKm0M*^{YJT?-&X@X;x_HDX=({653eb$l-k0BH= zXGCRIqGq0z@dWIhw?y9j{3u43JeB@R4-Kc6JT#mxTb5171(B$;?=b8c#j?ujgEXC1 zqmfupjYMNHH5!e_)o3snRAccd#yUfY_=+AM;S6l=8JieEeIPa55snKeST)uGMLNTs z=yEdJsfB{U2$n$~mXY>w9MNcFY9tm7p>|D&8VR>YO^=iDP+X0NIqH|ov5;dwk_=;M{zMz zclwXjv-;!pC;UnOdzpeTwl+kr^>}@(a)`?^S8QC>5t~hOaoLAn9&FVFSX;+s(hlHj zxJtI;%33b3<8m{XH;{MA7OrmL%2uwla(NqN@8I?>Zr{P}JGrul zE8Se#%k>^E@8kCUTuE^4AOhRUhf%FyfXgSjOqv4vJzT$!SDfbZAeYZ@`4E@yCyd)6 zgt=8nSwKF)OTWjv#N(b9sWxlU#m~%hO!Wa(R}^7r1=Ugu<2I$l04Ya>iv; z9LRFz0#`1Q>r40BAn|cXe1hrkVKUdBgX_=3-xuNUD~#K|!MOJO2*0Ype=aeb;>|fE zdnLr|euz2Ymb(G2+#BJlW;4WULJ(_=K&-JHV(wiK+j=0ko4IT5$T^s8PXbHt%FEVz2N>|u@wHtisLzB6>CAY+6U$4ZO;-w3< z7kztbwcSz;jE3Xg(g}(21S$^L>w6?c)*Z*Xr9BdJ_V%JL&kZQUcgtio<{3b-zIO|% z0Qefn3unc>s8di`P1LIDdnJ`s-_g#$X zovm)_mQG8op}AX1I-RU>5OoRGIMB;z6DM7Qz(&fk_6#B;uiJsx#q0GRc&O$Lb?5nB5`mF}eq3#5CTURFhh(r(a_Um9-c>0hgI;u&HtID##0FjYQ5OO#lbcNAqf`SbAGDyWNN>h_p>h+-Q`W;o zGA;`tIiw~k84x!<&gL$l1kd;co7KaKyC9= z+g@PCmnlcSDoZl9+DjB8Oc}z&@#y22V zpQ%sP8-KvicHV4r8~YYBUKFJuHL;pOrN(!xHh)*NnM|i0R+|aU`3Ef7kZC|1W_(q< zA^C?)ysICQO*q`lS0UcRH8$9gA8jyx#PWeE6zTpqQ5!r#KCuSc_}56>g;X*?%9n zMUQ7fHJ|>)FN}}M=%iC5^+(uf*oSlC8B1#IM@1FNlH8W>-^N6i4)mNV=SA%SxcDtI z3$(zhzK|Ik@iA<~z0`C(UpsJeTS)K1;DgC%lW# z$%9RF(It&G8PCZyn06#~NU5F1=Sj05u^X~|0fogrd@pxE?|zwj7iQC0=_?2@&Auud zU%{??8QuKq#@C?XSXH8%!RmcE`?B#>SvXaNROl6yj(>yP5m(?qeHo`HDi;{vk%iyI zBviHsDEZc5pdrnd2;KjVAS80 z2YtyzB7vzsN_`em|4csM+mCb!{NgXHJfl9;7bv)WoD&a!03QA-RQ-b+tEhSrwOMX# zQq?CQ{T1x6N*hB#j%NHdKHPtoF(bab%t7=nyQx{)nCR15jK859iGHYxK)$Q6SPY8& zBNqGdV#WSR-002pX6{HF!r4d&;Z~j3vGA*l75o!{TuybL4R-ZahW_w0JzB%mtpMHOGc) z4pBmv$ZuEXM)tz}cZ#xs!m0#0GIw4Qncl4oHgAOGmE-6>$Qpb&_N&Jlu^*(&4k5YEnNPZM`8LqQO8GDA*3p^`=m0c=SOuP#y<^l0wfyMg-Su4C4JM3a9To*o?tSSNl`%3 zxBKDFDw4h(QI?gykvO2O$d|ALaQ>~!$q>3q3Vr0)Mao7k+fm}rCY3e$Hzihy1^d|c zTX@EjJ}NL=OeO}3ZUZemf(8Vx^5lO5MbA&oZ(!=AaX|!W?6$&(mgEv}7-?V|V$$1xc$Yo}EIK{da zd-hUelzr4FXkMWx0>qLqbUHmVJ3WCm#_cyl>3AW#MMWRru*Vw~&1>br`~}}; zX9`1P*AHK-vjii#dC_7e(9{l# z#NO$}^Oq2Hr-ir;AGSH@I#Y64ig8mTV>{=h7x*varz8W~O0@+ti!F>H_fH90_En(!&JE5}>)Zzu3Ud_LjidMBv0- z2^F8Za>{}eE!fI$UbG8Jo|EMN1^ zr$b9WI6HR1IX*d@8mGyUb)oQRCM_=9bfW-)E^ZYr%V&+dNCXy3PYD^gbQK7}g}X=x zuGj;5;ijW_#|AA+jW5v!;=bD&RWzW2(A8rj0a&pD=V!AsfuVF!o;))d5G4a8Xcmi; z7eBY;C-~;o7H{}~pDy2t#XFy;kjTLfH6H0~SEI2=P>qJ7aW&i-3nKbgRE@=B zVKv;|8FrS8Z8h47rpdu*P;C!~qMCTy9kC$lK89jyBpeK@9UVc~=5+#b*y~{|j&hw4 z?Em7ys2b{s#9=206vF7TI2?;aY+}fv1SkSK#g4cO_j#J`choxUP67>c`6K?_rNCk8 zUfTb0kDZ}wKh-0=`*|vv#|9~Wy&A%LL=$5Ts~NX7a@K@6yYhO@nmOCZ*(TgQvKG#^ zaMp?lyR1zQGVTbY`#(8|;u5w4edEYGxpNo!{_8f~|H-{5E|K@6tVHYPS|6A1;PMeJ zALX)(vlHAlpx?{TtP(u{p5yX)PYjy#CN2+jcbPcVl=JAxH9Ovw*sr)MafrSJlU4^eoL!iOn*9fhx_@C_8c zk-|4qm}B(w7V+~|@$;zoc})DgP5eAAex49NZx=uB5I;|fpLdF%cZr{Oi=X$1pZAHM z_cIoc=v=C+$+KjAsZGDfVGuv9^d-EuAy6s_PZtFXHBoA{`c1u+b2XpR1?zd|< za^cOR!u#n`K!r%uQr4-g1Xus ziL+IEkk4N)sjH9KR3>?jX$oV0RIZg*q4l1^Y8U|rulCQk*V_X-{tpm8gI$BegY*Fz zP7mxU8CiC6KBFXLmQkA}4>D4pmQkY?6KxE#8y_K-qHK}5TtenDk@=Wxe1gc>OUZoF zBx5(pe1^y<7MbS@WU8g-iOlC^bVvte^inckGRf#BnJ*I=RkbPVXPD`gE|7DeA&!Pk z`a006W#53XPX2ueS1I3=jc*`N?wavUAnwe$hE?NR^3_Y^i|<7_>F9SzK*0E}jOfIe z?~fp6F=^(Sr7v8lY)4M%YV{@Acu5wvW@P>H$MV&rhs?md2@gy7SPR^@487)R{`wcc zFuo_FX`N=l>>a-nG)^QdG8ICQAQJC^#Cy>;;vhLU6p8mkV#;LT+tH9|6C|F6#8Kop z3Ete;U`^6b40b;otue;&4)OcV?9-4vi%cYueP*yOxr(x{Vxx7&LwEyxWZ_WfwR@d(3P$eKqpkoRKezn!@1u9usoYsNc>Ie)2g0!lu~1{*co!3QfSB=aH0QhKYrr0U4^d67$~t{Km>xr} zzDP+2AscbMp>WO1(6FzNRKSCFKL3E-^^F2>Zx{Op0r##!;NHMv=Y`Ra@%t>fF0)Rs z`@Tu>gD6E=pIMLgOwU^2*U9GO2DEETG_wnpk3inMwNT>|^1K?~As1_W zmrONQqIpvcYP?Fuk9SKygbMCqFU!UcWtx@kQjWiDyeuc~N`yZL{5j#z1p{!{je+MnOGMtC6v#EiYfmmq=fUCa53e_kg`6X zS^w;X3)hT)hKmkdd(rzQMBw3n0!c6jhc)A;kcKgvVaRip_c54@BeqweEouHU2s8G# z!0SD$KcX0~%2%n2uV&P&Pmv^;tJz_0{0x_IL-;JT`ak8lOC-kpUou%I|A#!} zgeBiOFsx>&7F>kWJjMmELd|k19j@kb_$Em;x<&0wX~pvkTw*N|TG95nfZ3XYm;YnpzB!~~l383m4=Ova_L*9LM`RCv0y!X2d*!jYyF&uikAK!)0GDR-9z?Q`68o}L~d zyOV{`G0Pw;P0+u|Us2mEz$Kf|u|M~#sMhQc3k~U4Qm2XWvn)`o15;!`?#t4d-j)EYYBoR;r&_{z*i~~48_afvJqJ@qM-v>zsFuLGo{LOA&UZ3FIQ@~x|*wNxw@XK z8_*Gz+QQYXT;0aiHm-)a8sSPzk1MW96I{&VJKH%id>1IR-LPY z&`)7)u1aEcuv=I~K5AVJa%0n)0EO!)Y^HD{g_|kdLSZX~+bIlE7^W~vVLPjkG|A<( zA-t2s5weNd(W8^B6O6wDF`iT>q4>KH>B;6stbgu7peMT*p`vsj`o?vjvnN)8tQ%+1 zH?F(r8#kV;MBlg-=8mazc}<9vg<#jV5SE>_d-5%1j8-7gwIGSl{<>&M6xz9Cp>~#d zl|QoLhh4A}O=)!V%}`w!QBaT(66hrts?Ywqs9Y2t==36eEfg@Kok5{K!AX6>hKdsk zDo*IgL3b#^Ya7#^fV(PP2z3cW8c=CyBV+;22UKY;q6MISWi=ceHV8e44aUYR`95ZB zGSwYSGyW!2=FMn9H1nr`6p7@5(!3?2kr0daEq!@;8xWF#nHR8 z87uUWUO*M^x|zlaUl%B@Elu_>T+~&X$2Ly2cm>W$VsaWL0K%)oBW0|MZ185oMH{FC=Juu3FzMH0P?gVx0_bwbcRq656R5m?= z3462Ro78!8^Vc$nEP16SypP@Ny{zRz!c>s*4~(Ya!5&IwY0#Rvy6Vhi3`)|oU9QrR zQ8jNZYmNki%WG)0F1!CPIj&jiT%sFxte_jLQEZ!I8?mK!% zU^8|MzQNar-q?b+yfn{Qwk5H*@6gHP`%kQ0yH>0M0k}!8wlx5G1BpUsn%znTSMrL* zoV1B$Z11fRSYVVbxn()?TBE4X8$4p8(b?YVUwElk!ySlm9u9WGNhcU{&Xk^_BEhg{ z-WnK*#3O2~GZNCGzZ#eR#Y;rgK(QP za##juCMQ>1T=k->GPRO33&2TR#aTUPGPl8TY7OUWxqUsl_SH9Y2U%!3TDfBz*V{M` za%U7h`YLgB2yE{}^Gw%n?&#slK7w&RfJn}cJJ56Rom?5<$|*A6gu*n1XDJ+`@Bs?X zQFxxh2@0nue2~Iv3TG(1z}zw2At}zycw$q6DL9R(p%eo3u0m?mct)lx*ys+n7>}9tc&V7edY02cgYK%n4ICRoenI z?i3hTcN)jYV#Se9IMB6Pi*e!#CbZThT#Uf96q&%ZRO3D@Q7_$RoJOvG@=AWxW89CH zWrDk(LKC%qpOo?%!v{>0xke~9ip83wQDY1-vRVWAOl6`7*VWgYStZofmPEgU6&JUf#BQ7L=Gvg zdlkLRii)3PD55s2-Xp4h7lEFtWGtu}AEKOFr4KO#*~N$7n_QnytY`H6A0;C;P1S5q zGsygLCc5C`>^j@eJ^^7uex4bhVEN33+{SChr`TL(Q?pd9qBR6NV0?zISv3kjKP#yB zK}uq++~PxF?dL>VznNw{FC@`xP%`y-mfSpdHPe#Zag(byS3(fnQ>8urTd5<&l6^mwa2()$zZhzZs{kNI%U1;&v%FWP(KNL+kna{Ms z|7IqTLzPERe${%{BZ(?Sboomn-`$jNTVk!!A}sve))4xE*^xhB#$S+yV}8Sr`6m+F zndy3!&Tp#Gnru(TGw~oAY*9exH#gi7?2mWx#RW#C&O+LbPQ#AIQmngkd^X!R0sE9O za`1$>D8=(#q<2}*Bg+%>?AxE%d-Bl0nG;8k59~iKRh1PHd6xBY!=I}mKSrr^wm{8is%$Sj;5A+o;7aCrhMR+pz7TCRcHv*NH&(k$_KF z-1}NQwS~kpc5wza7p5L@77x?Qp4%cTc&NHXAIem__oOevz6LUg_HDkoL6Dxl<2CGz z%xghw`7GRQ`jWfdH@~KmgwlsNeN&Uvgi?uidiu;UB5wH?9yn?w9BYSdaC=ZFajW52 z9KDeQBkPv04z|Lv7`ob3{F>cmul29?H`><{qpz0WL{yXAr#iVzs$uXaH#2<;ZG*gV^QIOGTPfT|VH<@(3d5|1>$+S~sj5}TiDx?U;N@!MyDPA-^C3DiV`Bft zG**LqHq8ck6t%|OvkkH{jfz)e=O}f|UF&z}tq0)wf^%}i- z6Bzy)?A)#-&@pcUIh6`WF9#fT0k1=~$6^1*AgGifs8S%PR!>}KHQIo2;%a_KP1xn^ zux1QgoipP$+OerLvKdDPkoTK4VtGjv`I;ev3&aXF~Fo-D-{n zUAR721()YD@WTRWr=m#b#uRh;vzEbft^H`IE)2GlUwI1Tsb*&afatnS+aW`mC&fMLawZ?szC@3eeWK$al|nsUuCZ{qgl+T zW@BSM!zzNw~EIOUflBS)nA%JlH&{ zttDlt*Z`z&r()GeJebrdL((R)*jPe?-8PI+BaFFNH4=&@wN@3gNX0C8KI%yFR(HOi z%K~f|o)V7TFg=*TXeyjsUN~345AU<^n@`N7r>sd*Azl7;5v>)##mgEBLu6tJp;rNB zyR1;#EtlvL5)5SJm*M&P`sQI{?YZ^FlwE~xxxDH5a>+S)`PW5eR{#{B{}N4ET|Bz} zCOW`fRvMRwPSvm4xgQR0ibhg>J6F8AmkGRlw2PK(ByX2>+2L}!DfB_Q2A^TM2WAf5 zh3_nWaamFBtrX?n4M`Q{-j?9*z1j+<7NP}OQ)}I?^VGtI!drRpmPR8MYP;nUT{M%9 zn6|ejw|w$fQ8Bu{ot&jfji;9jzrs2X63*gunaSjhUIeCp6)jr8<-oEq1qGPro0+Zi z92o4m^@l3Ea^J>!iRC@zui*c$>!vwF#k$!MigWX^)KEO!KF|FGoRXqpy)e(zP%Pfz zE~5lXZ?qG2quhS4y$V)Q4|!#@ac0L&6&#%upI*thT8&N`)dpnjD*-*gcwvE+H3B1q z{kzSX(;c{XzA_#39`^zj&(r6& zMA@^;Ya1>=tZhZ52w@y6y;%vokj?h5tceRHmZ`cfE3S^MsA9eFluJ(g2Y-pWm$L5^I0c8y z{gx_&HM>rAF6}FOdyz!fd=j&-u|`wD9d@zK9rNle;vCu2bSFK6fDZf3_$>fBs0gXO zx|rWOuNTVk{deEFzjxroYS&+i?O$vdsO?=GmQ;1@+NRO2b66UIZ85Qv*ItcMh6O2O>~v<^T2@WAA` z^u*4ae;5MXK4D$=pvMVH!i@>hsw|^5gGufJo&|!?muH~X)ED%+64PVwRUCh~P-2xp z#zyq@{le{r<@TT^H8OIfWQvRa>09}GnRnfC)0Dh@<-Nkvcdon@mPXwLM1LTb65=3O z%qF2OYALfeot&`dMxgNiTLV_wPRH)R(CiFq>g+^3nq#v-6Ol*?y~}nF+(O0uAm-Em#)(4tM}jV-ns&Hhk@)E3~p0@q)>nJ zGA*Z-qQn!qD+_J1=E;fMS*aG8drN-BXJ2crpBq0Gr*HgN(1tu3=?JOuNF=7lA_(pt zjC82s&R|H5wRg5dtUa!_M?w(mh{U|}XjI;~v{_Ja;drRiOKLl^zrtTzSMP7|uko+9 zhiljScl-CE*hAk=IywRsjudnhH+nHI=;*L&&T3E!qSSHQD$ZAPdm}2}2t;+g8L`xr z&0K5cwjg(exUzw>2xn2wW1O{fXOMia@8GUo+}+KU9&YR9icN23=$TzV&h-=eaflDt zNtN2JdvmaHx7V!8RaG;8?Z(^&R$IFr!nMBmBSE%y&AwbG=5*|r69*6UQP@x69TXm- z@Gyl(C_GBxofICU@Fd%^Rrj#Xvb_pz9atktRT{b_KRUj4bxR)D-ZYWlYo|c5Zb54Z z?jXEq_`gXwh2v}sZijSxnNv7b)!z83B2-RPX%yk^&LQ00xN$Czu)Bien^6;*{Ma>P zyu`%Xh9=e*UNI)FULxIvsnYyhDJk*mcSv%KXi>efwrrMkzw%kn%z=1aQ6f+%*2BoLa!}JyODVkbk ze268T87Co2*F)<*%zXFEH~s$z8*JD(+JF$%jpSprkqNY3maIyy!J-JwP{mq&$X>r( zNKH0T?k3j1M#kF+6z~alfNhNJtX<6l67xwm#Mt>eZ0qx6$zOX7{$9DxI;H0s!X$j2 z8DC;~d|w(e`w<)=2zC69*`gPqMUaRMauS9$QXt3RUq##pxYNWS#rTE^PBDhExt;Pi z8Nw^9Z{0(^*}oq0ykh(TBl5yOG(-`%S)dZX$db)StC?L*Y(RQsL;W3*di9jt-%ORf z#7raWKW10)`g<(7aW1hDI`z+SKhKL63Okamh=LqM$W#hQ!(~gsB>D?Wi_=WGl(oBG zKk(W~)lAap(yvr7!D)@O(!u-uvm&vnCaz6S#me8m)OO+&5ogd3m zYDrp!*dv!#Zc6(csi`UW(4od>U0IDKd6~mueQLV`RiZ%2?V}l|BY^*4pVSrbiTj7m zMjXw|`-IzPCPib`EF!QoA60AGx={()aN36AM}pR&^tCmclWB~!nNFmYq`ttT%AkE>{8|DaZ>7v?>cj+71x}=UqqUT}S6# z$E15+L-5v;=A)(3IXr2^mVC+^&JpHgiX*BvJf3>p>kvUOv?4MgEE-->(J&T`tf*)N zi$+&eG>S!ID=HeB4;w1%stC6bugQobxD4eR&_jjohfX>R$QiR^?1<%wNKQ>xppVJp z2);O-9!X5jPK>ZI@0sBu(Yp^HDuUNml#h_+NXKnJ_7>1;w=9C%OOUnpNm}bu<5~ue z6KT)1+19<&XOGODH@_y0uv(`_1}2ZEkw&qN0zA?OAEqp<=7qjw4>XPm_R$!;fxQzW zRIYG4+j(;@aDf-pv?Sf;AfK2$4=vC7CejaCZ+^a zrursE(iio!$gxeKN8s%E*l=2f&)ukUer%#{F>>X4J0X)(5SSqTI_m4-@J26=MJ1k@ z$pCbo+1@A|tfwDt4Lp<%Koy&20@>Lqv?B|Y^lvus5Y!hqKRKNa%)n_na4%BJ1}108 zKjh44IxsYOar^e|frn8cXbkEYf%;nmGpTdwKq@dkIe9LSnhBK88Egj}`NuL32PP*1 z4^PfQb4#4&*@y8>?@MR+>_m2SEHfkY`?fFL`}0Rr%S~rTcx%tjlBaIly-eYf_>#My zdtO6O((*1OZb2*-39GU8_6{}H*%4OTL+wFy^A=NM9ia}yWI)@YcnD$SgKB#u+K%|5 z5OhFVI2i9xqoK~2v!o}~jxYhv2Rqbu#5E1YI%3X}iXkB!N3BU++u+|=yV1UhutqnR z;fzMngaa?6ZGk8CRDGG-u9HwxD z!Zd{$3eQqFO5qrV4^ViH!f^`EQ#eWC6on5`I8EUU3%BW9ayuOe%)lGT$H1}6Uej4xO1MDjZ;Zyzf;ON z;ly&+rVDUbxd#E;Y`)i{q0YVeAzQ|q@jZ6UI6c?8r3&qqlE@=6)6u7w{S_aasf;sN zyD>DRUL{MUks<9;WgDcYMb_%pw(5Gg%p_~J4C|Si7l$2)9G9xGJM20U7~M#<57}OX z>W6IkgkP$8{V#rDoJY*SOO>yKEE7X&rmk7?OyI#QVw<|oqWnQ)3YyK02eH|9@;78m zLx0*c-as`X6lOQ#?HM1QvmP9>19kh59SPO^5U5`q;+0Ks=M97UkP3bKroozKX|%?8 zGunLlrNk;mUGt~_Q`AwF^a%z%{*D5ND$d?PkeE({#3V*lhx87HP@=UPM{AAuAjG8; zc~<>ShMA1_vSdBNP!ikfeGILo%Gg%OZMwvgjhROL%dAN>LB40$po=a8qb}pO7!8Gk zY-|6q)eZ7miLH~?OR`gP;F7!_nkSr(^-4d4=ImoHlMAxuOmn6#d(C)-<%Rd3=iw+? z!RaVkH}?hNR2e^Fn+_U(%{G!JGfmaLix2x_qPAE1F;F`Qf7e-`Y(Utr{G1v8%<`8A z`14=bDHumD8`oJru@Pd|41=MMFj4VbrY^Bro_WRi8B4azC0ZD|6RIF+RcOjps2)f8 zzp~_();s&RFva+P7!)BUXq~49Zv8vnIwle>w;sPtnSRbN;cCX4+X`>#KiM4hQEOrw zxgr}<19OS(vW2i(i|pLG}%zgsm$zUefdT$SdH}YwDuyJm*(fACyV)9s;=MH02GLme|v;{Fh&2wB- z1gmUvA?*{PDB5;%;@kx6j>;f!R+pTM2%I;$3Vbn`UjNEh1R9hjU75I#ph zNF3=_-#$z7xNW%(EbDiTXu3+1mfZK9er+U3qFJZsbpmm}LZJv@zWX)1Lv#7vwQkyp zsr4Sk!DO)&b2ypJg`n@`8+SEqxIB6VBY^e_G`Y6b=rytlW20B)IK}*O?W($Z<{)W? zz_4-Lh+(5@;eFL?IW)Qax%inatXdScIGgg`Br;EVU_pc`s|clh6@rh>Lafh zo~t-dUm$p9FU21R62358`mW+e;f2bLSjekX7!{Q8IMOyMldRR3)P~fA#xk~kCZn0L z|H@p3&t>ee2-TJ&=-84@fuI8wP(b`?2iy^?uHRf<$9;B;d`#`1xG*+7Ie}*=YX;VB zTi(NUX|ZR1T~u~w$9BwX8w{ykxAZXc`=oKn(%yNwE#KHWoGWIa#Ra^J`QD<-mKXOv z0i+_by2ULMT&1E9C9NqqJ6=eO`~I@r#fnZ$p`D}yr<{m7Pxhfmcya>jSaL=`^K0gR zy!`!{9>c<6JFE#B0#?Dw;Pks?CcA_kn{H!V)49#Txr=iT=U&dqOSV!;D*)QO(EP8G ztNk^#upcjCSh2$Vce>2^&zQ^Yf|<1bN)W$_adYN5@1U8tK1uuhpqPHJ(+>)ZD{|ij z+tnaStb!=93*zji04JyUZCp+ zIT@kV!F;rBiQSvagC@C>Gh{A?NGnIC@ zKAq0Ox;B!Y_E7S1>vGf5#S8gtuue};4LkY@DQ=-RWLDrJv>NlGn#vwY;SyZPzisK7 z=H=GK>w~3FFQlzmlmdm$l3w{GIS0CN1vqW30JP|KhJx|xh2FCo55{7id80KFiN~~1 zIM@+#mW(Ym7V2!*Lcv&PL<>ctvA9N6sNqmNz3gjRzHkdA*t$#wn+mvCgeVwi`9g~}%kSURpe7Xcl zo6MvQkYuaW8D`sNrft~@iINnguaG?~M`F=-3Ogw5qHqU=yC~dE;T{V2vU**2AfJv` zkz1K+;#SoVhK--NRkg^)QtOa^rL8)qb7q5P*6%~@9Y?978Jk^EQ}F#s2+1!;Y?}mP z+d#l&2gCc zFV|X(L-@JGiiV-0!IFvwv7$k&Xb>wJ#EJ&7qBB_0{l=NHiiW5nH&z7oSyc^}RW*Wo zI*LtEj|n{;5@cglZ@{YFfK@@@P~Hd?sBbdfSW;GoTa3X(1#$-Mco_4TgmDY@BSQNrx+;jJ zC9&0l0GSQ-1-+anz000^&QHQ}H#uG6U{@%mTBo1E$P!zAvvAi9g+Ko5at1P6xMO|` zQDy%OF$#9A;Q899BuShF(*SjD)74WZ>!TMwR%g><6I69)St6zB@Vzy;8MwEa%~lBE z_{pge2q}wu#N5u%)sdC7(UMV~>1>a8L_32~(dcYiY^8+z$BHxb(>EbN_DBoKjkX0d zso`^k)Ov6wb@h$)2GUw$z>$s?#IfBwA1++qt4aU>0`F6z&L4p>O`n zTgW~5zLiutKjBuKY5UK>CM+6?c67!gC7sf{l6I7oC;Q#W@eyH~W3nl3mnIDM$}`be zFc^%6;&H3Xx>rKB)DJF-$8V2F7EuO5;ds0~9*)F2u#fl6PSZRY%UR$cr zpjtissT+amz2@|3UKxACC@V)ctJov+Ob4|O>E$iD(*ShqaU zCC_mm|8?QQnT z!$D_Ehriyx#=phiLHI^g;6UD?&SfWhX_egwgT*T7*jR%nO?4HXG36#M2e`bJ z%j>wjiOU=4bh(+^wxXL@xs5Y8bw)^=BhFbDXS+Dtqwj^&K?j%b=KNl6Kds-(YKRRf zYZA&Sa$Is$e?R3gVq$i zQkAT6Z;#}YHI3h`lNG@5^)gDQc-JW&mmlcl#)oeX7d3`mdLLSC6 z8#?hkd?jccK>-RXV`z$IL$_zg@I1q%V<_x7ZX8G5jw`KBWc%h5nwnFt87Br=ev}yl zN!uJLC!eIFC_LnTD1MiK^18cKHtv4xW#eAt4U=C;4NNs}D3y^w|h;Jcb za|_1Fc;$l7yU=WFA={fETaH=zT&4LgVMe>g5QtSc5k>Ez?u;94Xh_WkjYoVLU!sDv z1yCrr&opPb&YGpC=xB-IM)@g*$#9DMARF}LGnJzr;}W|vH(G@!>#L*Hh~Apd)Qr{` zA10tyd^Qwhh2ZR$sYUU;4PHxFq~L1_U1!@_2=3+TuFd6F!Q8r%Pt{%#Z>ebxUlG0& zL`}75wIi)nDF3!-wF_G9NUI(0mC{;e(%M`~%VW{nfwWcwEw4puhoH3sY3+b}rL zAD?F{)3~bbgFuVH(v1OG?xvHkxPhlN}4a~0VHc63fDTIdLDTHA`{Qzdi?+Jd*%N^fTz^Jbh z7Lip(O+N4}Dfr2V>#P{7@rGSmZ8YXv^@IZ7j5YYpz?HxyZsQuc7CDc_+2u((gb=ZW z+toN~FNpb{_AH9*l5HcyZ#Ci7Y%zrgkuE7>uxk|Lx8KO=s- zZoY-{pYlel1)I1Ly9Jt}6?m{wC*V%x7K%=k19ugU`0-n-zHm$xW*+r7Jk@q9ldl94 zgANSN^Jc<8>a21u{cxpqU4+{3ou6N3Iz2NxJwfMoC)8@utUP=}S-fo(6THC0Ej-#1 zP#zAFLy@71?F_{|BWR;=erzI5lB4!psAnuI1ZpL$E{$k9Q-vqVI*M^NR&(R1Y>u`s z0ReK;)-X$9oGgNkqU}9#&yijPRydR%q|+l=VL?+#7BleX z@0=YP9~(Y}3~-?>D5wSM1KH8Z+3}IUXzD^bFfkb@yvi&YX5Gr;-&og?Nf@)Xu`Ja~ z`V=-%ox`jZCWErMCEy4Qr2|=dhzhtgZ$cWrsa?0#1mCO@EmrQ5o1@HY35jKX z7f;`~0-2t4LJ?%R#A_GnY_%g8390SDNEDIn5Ij5>LS9YSRXV-YSbHR>hCAA0YAo0h zTnbf5jkJd&YDZ@zUc1QfR@>V2&_3p#p6Ywi(Cuv7oc}l+Pp1bd*@IDHY6b@2& zhQj+POi?&Y;RuCk3eQqFO5p<(j#D^6;S_}rQkZ31SL?dODg;|bQV4Uf89nUCjc8$` zxVt4EGIPA>8&y-02V>iS1~%N*Bf*x~Pu@~DB8G?~uosTY&P`})?qOQCAQMLAObt%-Gbw?2h|I3-;Km$Nld+-Ui(>o#hl{>G8U#3u9JZ*K$5Y{hR=cqW&pM4e6Rwmy z=@tOV9aJl*o>64wN5D()O_-YPVVeN1$1UL0&`LhHP7aFSXMFbX-H(jV@vF(vkBuBz zyXzeTzv4FO^ThZ(q@bCWJv|U3@)lWRbE*Kh#CKu(Umy=s-i#NqPEh&uHfd+Qy+bf? z1>+8t-@zGIH{ z9USXBIM(kIHrQVjUGF#V zJ~aM!@&Gd+{U2m4)e;y6#o4{U$i2}Pl5AxH;D3NQxny>~e-!Tb-+-gZJ8-iHg}=cu zfSwm~qVfOmjt{O@_P|ZPApI>d{+6s_nxBjBV49yx@35xE-xZH^`Q8+x&*sO=agd$b z_t@0l5+A&WbNhl=)Z$9M?%NRG;fALdq*@3j30yUPNW9N#u{H4&d@+uu0;z^fLl6k~ zVjRo+VraHqfg`?V>L&1eaJ@(wB-OH4J%a!K^XZF`9eg&;ZhDKm(dNw9&&q-G=Pz9! zICFmJX7b9wg`u0*#)gE&r-hqnPNlDSD(HT}CUYx&avvAcg)KpjDfJFl#-N-FU}hXg zu|>o_bn)uY6@JMc)1MH=!>%iNy73anRVlNS#o%lO2h=lA@e1QLq}!9P+wtf;N+3>l zjJ;fgfD_M6#zrqMzK(XJ3yh1|!ZKV5Jh`HO4Y=%t(knC_>_tT9f3T}K7Fl%Cw)4e@i z_}%#2T=vf7{06uDGk}bcUN+@oGZIzWhpvO`3-?z?x( z{(K{4`zj5vNbYa#tUR0CSLjw+vwrOBmKGnFu)*7k8jDX0x6hp2_=e4j%N+5Z?)KeX zoujzD9O~{4$&qL<=qz~wL;9L3MR z90>>6xe$|c!qJ{?c9@89}y4ghrMX`MG!zHfRGw98xr^#AE2a#sz<1J6pX$!K-EqVA2e?F6{+3}!TaJF zDkiCTUhgF~3^$P|V{4_loK1jqDc)8=s5r<<s8z8)qD1r-*b{m*`9V%c7I>mm7oMAE#Ns5g`B|=j_ zX~wiNq#5{nw~d{WOa6puW2F?RZ3)tO$0Ba4S9DI4n%Jg?M{aasfV3bh{*QKLgF1c z4@9ph8-VB!r4#_7w=%B2CGSes8oM*czOp5Tz=KD(|G@Vax5+#uk*Tj}5VqLWn5TPr z@pe&hTacs8ZE4!`=C2`RX%=PR13CDZl7+5xZq)+ZdP{ZAmEvgOtLel_M>_ns?_^gB zifNUrF-f|4`=#Qh3wyROX%4Y>YWFMLRp!bo%anERq06G*pN2MjGmBYzbGZ*;Fp;nq zl~-9EhHwpeQk();7Ysu1uL>B?HI=?fF!V!6n1$&qJE-i0oDVYUfMqXL6v)b=Af~fo z2bHjTfU15S5SdzJ)ZB{pnzs}p*z0mWI2P;0hNi}5q^-nLp;K_#BW{j@ED;aBi*gB2 zfUMYl0W>!!EQl1DoG_tL6ybz%63|k}ZP7RdKg8RTaXL*>5<;X%Bq!aLjWg`2BJ*;< zo|Fkz9R$FXjPjlr0Bp~uR5+WV0nfcrl}JXCwHKj=KdCXEi(secJT)8ffQJFrR|0&M zQC3?TCMR;_i$v9Bn?US>10438f-DIxwxvL(azzEzUKcO~KB3D9-cPw#lWsCXjF7qQ zm<|aYDKEez2LT!f2|6Tr@;aXnUEA(MQ(R2Tc3HLtQ*N_1qnlk@Jl9sk-VF`igXagv z#%^A`boFNP(zT0cod~aXad8DL$h9LEpBp$oa`xunrHf-%uUs3vdI=LZk2TD3K)E9L zFU!Q5wO_k9c6n%UBsns4)_!Lp%dI2n8R3;Dz4=)e)wkiI*h{i`m*d;mHZA~Vtn?N- zBm{9o>%1R=j{6cgGdn;)&$8=>gCbLSvHjmZSI96+<~-B9ZNA92dHQXkNcg}Gw{mC8 zd0-oR9p53$5sTp9O$+%8dwh=ax)A{NOD-;3r_K1~qN_FS)7;9{vSal1tf7Og7$7R5F|WcrC``xAz5x*BY(4nkC1S@R_}cDy7W@XW z)!<1^%G^9U!n<}B4bv8M^OO0!7dxg$F`+aoN1z6KjXyJ)2Z7$<3+=j+&ZL(izZcf7 zvmjbG^`nEW6n~W>QCd(twRi=vpkrxv182tOZY@kg0%v>C#q{lU1&fxYeyai6f(~Rb z%r=+z`=D>tzX=}B>*O+dac5{*RUNF)@KBjIq+Rl0G>(O4)d zM`9sJ1d@o#Jz;j32*w~fBocF#?k_T{n{aO!ref1)L5_sN5iesNZ9a!jQ)+#6HFa7& zx)n6kH~J3xj{CyCZr`Y6BNnifgQ!Ol<`Z-MiFU+XcVU*lng+%{Hc|NimHnU>bhc8t zjmqs*?x6Bf0Q+=xQg?{T5h_QiCr0HsB|TJ5P`Q`Ni1bNMQW^w^8q!ZIo}uy>m2XgW zoK~dtagoZ6x*%wRsMsCNIk$&+?1yr0Qe_Y1++vl(e(J5DTdK0#9RqKjbO*&+hhsQ* zCP;*XBe{NPXFo4qxODL{(r1xgL3$PGHKflWy^i#Gq%RRa!|%6i%HR;0PcE{H~^l2XrvwZW}7a6 z>dQ!ebC#h6RUtD}sQmLD3o0W6+CJ7WcEUU=@fIy$HqHk&Hw&;2=S>X z>Z`2LSIkCV0T@m4RYnhsUuX1)^d2$3O028m*xDJ*1~ zJh&~blamOR;6|{7ptweiKf>#T34!YLj5ut3L_DWq0jFeKL4~j2#~W7gp}B%E`#&yB zR^pRYj6Z|PMuyJgWC=`GGAFCTL-%c%?0-Upi`s|l@j}0J@A~ zuDXEy^5WdWF1(?+S3T<6ME?=e5#Qr9Hn`T8Itp)c=hgGG?%(4$n_L%70dp@-_z+!g z=NF7P_>L7Od(HC!vid^$HU6_m?3UPkor}wic|ob|Yja%YpTs1{Q5aE z|I*@X8cu>;$aa3~%B3r3hprUI0yLgr7vN`-L1}X}+Hv%sw`p+rLJiASV36AVJ}SV9g3 zgQ0?_ailwxs4UZdqldB79qx8vw3y9T<7@G?DPdovCW5j+wB85UvJw{noJ89kA?`7K z1VkUGlf^m+3|CsIdeDptmk%Q(e+Re;hyf}dr(%$bAyr_p07gK$ zzZVAv&zwa%gfxlt9MWN=qew46q_#~^)D~dY1?>zbMnX4V5%d2^$`o+tt&@zeXA>Zl z$4jePxp?WO`$41GikF7(ZU-xD=K-XLjl*yTp>f~&$T-4H=>g}x)q4TgJ>+vG9(o*v z1{DI>pGnXNr6|Tlqdh+iHfmY1E9(CwvYMyS33i$?eso%A%)bo)^iQv|d&WqE$Vj8y zzfPKz!FAHCo?RzZ($G3NK+hTdt4W8Db28R_a7rbp=+yA6Gxy2-vU`x)YELm=6RBV zc}R!INWI8NgES8db=$a|IaV5x+bp(I=LP_?=#yhmV$-VR>XFecR%eyw@H#n77b(pV1$@Ej7EP=~uzGY_VLB>VYlV_F9)~ zvJczttk)hl*tRh4cws4c8ufTw@yR~br~B-X0#2f$f(A5=$_{pO6AlMEt#XWO@Cm6+iFowxsK|uAMgYfMP0EDr0K;W6u)U@4 z%1n(avMXsw*u(A)*XdZ#%kU14z`bP~KP_M1zH+0nH80p)l%wQtwa?UKhBb)PB4(?~+iWUmN zu(+Q|dfB&`nocwMh{5=NX2eeJ=)U6s#qmXRs%0V< z-5VxS&i*pAujkCvmgipxE?p|qaHA^cHjh%xpDmb4(H$FkoUu!uM0aLx8G9dN(j|L) zj_>T)RJ3%|gv!nLVjg?)$Lx}_v+0?$k27KG;jwIL-y84YEnZo!>+gvNF`0MX<35y# z^~ljgC?tn^5@ALn5sCFAMnEEE=pT*FTd1qHzx}^0mb0ReZjhni{Q^ zG4XX;gVyS6^R;V18IpE!eLj&1h|IbgW965* za{F0O-H#d10?W@~k4Vn;kuk;?<&Qn}z$af_P1!*axR!Aw?Ih`BOzzm)huM$UpfKaA z{*y9~8QrPI=6dRdn^8 zeDGoR;RADs@30|mttBgj4vx44-nmCP;u1LbEE=C(1p$F8VLz9uT1{4wWVJAC`*ByQ`}>x)nj3!>)o!$x5*Pq z@>4X2acd5Rovd%0IRGCwlb)Zu%~+UaQ^UwVO}kWfUU*Wg(FNm~8c%l?|Db;G5);AX zh4kwymQO^*iXVL*dGO`!7UlaoBl@_WV)LTq6B}vlXmYGCZ`Iduy{iNEr zs}S!{t`qAU8=8n09i5JxcH7^VKyxNjZ!gbZg4RlgD5}8E3|c1hd7=I`W(KZ<4Jc)J%

=VKvD_j_= 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 z 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�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

8a+^k&lv zJI>ziUkcJ1dxiXgPfuNOoUNF|9^Bt<2zB?aN}R9~fR8&ay`}zJI$1k2a?l@x_2u>? z<3;6=T3a%U?z~?|Rx!NShvIWZSrfc&8Ch&qEll`QpK zU8D`UJ~cWK8aqwKW$)0CJ~(>u>ln^}H9YR9t7V#8R z`oZ2TW=hd@*!wd5w173@mhRSp1t&wOc-U0wsXVs@*j?A^GP7P($J(2qo*&;QOkFgp z&*L>J&uZtO{0LwD^0`mxZRkW+;$Gw>u@2Ea literal 0 HcmV?d00001 diff --git a/samples/client/petstore/flash/flash/lib/ext/flexunit-cilistener-4.1.0_RC2-28-3.5.0.12683.swc b/samples/client/petstore/flash/flash/lib/ext/flexunit-cilistener-4.1.0_RC2-28-3.5.0.12683.swc new file mode 100644 index 0000000000000000000000000000000000000000..b69064ac765f0f18a653b41d75eeced098798172 GIT binary patch literal 11827 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 literal 0 HcmV?d00001 diff --git a/samples/client/petstore/flash/flash/lib/ext/flexunit-core-flex-4.0.0.2-sdk3.5.0.12683.swc b/samples/client/petstore/flash/flash/lib/ext/flexunit-core-flex-4.0.0.2-sdk3.5.0.12683.swc new file mode 100644 index 0000000000000000000000000000000000000000..a90af750bb5d351e5f4b937975b86b9c0e69dd25 GIT binary patch literal 165338 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

;oB7G##fs?TY%1uw5tp` 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�~c8v?UGd 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 M!Xh9Y)XD@T0fItD@c;k- literal 0 HcmV?d00001 diff --git a/samples/client/petstore/flash/flash/src/io/swagger/client/api/PetApi.as b/samples/client/petstore/flash/flash/src/io/swagger/client/api/PetApi.as new file mode 100644 index 00000000000..b35cd5efdc9 --- /dev/null +++ b/samples/client/petstore/flash/flash/src/io/swagger/client/api/PetApi.as @@ -0,0 +1,336 @@ +package io.swagger.client.api { + +import io.swagger.common.ApiInvoker; +import io.swagger.exception.ApiErrorCodes; +import io.swagger.exception.ApiError; +import io.swagger.common.ApiUserCredentials; +import io.swagger.event.Response; +import io.swagger.common.SwaggerApi; +import io.swagger.client.model.Pet; +import flash.filesystem.File; + +import mx.rpc.AsyncToken; +import mx.utils.UIDUtil; +import flash.utils.Dictionary; +import flash.events.EventDispatcher; + +public class PetApi extends SwaggerApi { + /** + * Constructor for the PetApi api client + * @param apiCredentials Wrapper object for tokens and hostName required towards authentication + * @param eventDispatcher Optional event dispatcher that when provided is used by the SDK to dispatch any Response + */ + public function PetApi(apiCredentials: ApiUserCredentials, eventDispatcher: EventDispatcher = null) { + super(apiCredentials, eventDispatcher); + } + + public static const event_update_pet: String = "update_pet"; + public static const event_add_pet: String = "add_pet"; + public static const event_find_pets_by_status: String = "find_pets_by_status"; + public static const event_find_pets_by_tags: String = "find_pets_by_tags"; + public static const event_get_pet_by_id: String = "get_pet_by_id"; + public static const event_update_pet_with_form: String = "update_pet_with_form"; + public static const event_delete_pet: String = "delete_pet"; + public static const event_upload_file: String = "upload_file"; + public static const event_get_pet_by_id_with_byte_array: String = "get_pet_by_id_with_byte_array"; + public static const event_add_pet_using_byte_array: String = "add_pet_using_byte_array"; + + + /* + * Returns void + */ + public function update_pet (body: Pet): String { + // create path and map variables + var path: String = "/pet".replace(/{format}/g,"xml"); + + // query params + var queryParams: Dictionary = new Dictionary(); + var headerParams: Dictionary = new Dictionary(); + + + + + + + + var token:AsyncToken = getApiInvoker().invokeAPI(path, "PUT", queryParams, body, headerParams); + + var requestId: String = getUniqueId(); + + token.requestId = requestId; + token.completionEventType = "update_pet"; + + token.returnType = null ; + return requestId; + + } + + /* + * Returns void + */ + public function add_pet (body: Pet): String { + // create path and map variables + var path: String = "/pet".replace(/{format}/g,"xml"); + + // query params + var queryParams: Dictionary = new Dictionary(); + var headerParams: Dictionary = new Dictionary(); + + + + + + + + var token:AsyncToken = getApiInvoker().invokeAPI(path, "POST", queryParams, body, headerParams); + + var requestId: String = getUniqueId(); + + token.requestId = requestId; + token.completionEventType = "add_pet"; + + token.returnType = null ; + return requestId; + + } + + /* + * Returns Array + */ + public function find_pets_by_status (status: Array): String { + // create path and map variables + var path: String = "/pet/findByStatus".replace(/{format}/g,"xml"); + + // query params + var queryParams: Dictionary = new Dictionary(); + var headerParams: Dictionary = new Dictionary(); + + + + if("null" != String(status)) + queryParams["status"] = toPathValue(status); + + + + + var token:AsyncToken = getApiInvoker().invokeAPI(path, "GET", queryParams, null, headerParams); + + var requestId: String = getUniqueId(); + + token.requestId = requestId; + token.completionEventType = "find_pets_by_status"; + + token.returnType = Array; + return requestId; + + } + + /* + * Returns Array + */ + public function find_pets_by_tags (tags: Array): String { + // create path and map variables + var path: String = "/pet/findByTags".replace(/{format}/g,"xml"); + + // query params + var queryParams: Dictionary = new Dictionary(); + var headerParams: Dictionary = new Dictionary(); + + + + if("null" != String(tags)) + queryParams["tags"] = toPathValue(tags); + + + + + var token:AsyncToken = getApiInvoker().invokeAPI(path, "GET", queryParams, null, headerParams); + + var requestId: String = getUniqueId(); + + token.requestId = requestId; + token.completionEventType = "find_pets_by_tags"; + + token.returnType = Array; + return requestId; + + } + + /* + * Returns Pet + */ + public function get_pet_by_id (petId: Number): String { + // create path and map variables + var path: String = "/pet/{petId}".replace(/{format}/g,"xml").replace("{" + "petId" + "}", getApiInvoker().escapeString(petId)); + + // query params + var queryParams: Dictionary = new Dictionary(); + var headerParams: Dictionary = new Dictionary(); + + + + + + + + var token:AsyncToken = getApiInvoker().invokeAPI(path, "GET", queryParams, null, headerParams); + + var requestId: String = getUniqueId(); + + token.requestId = requestId; + token.completionEventType = "get_pet_by_id"; + + token.returnType = Pet; + return requestId; + + } + + /* + * Returns void + */ + public function update_pet_with_form (petId: String, name: String, status: String): String { + // create path and map variables + var path: String = "/pet/{petId}".replace(/{format}/g,"xml").replace("{" + "petId" + "}", getApiInvoker().escapeString(petId)); + + // query params + var queryParams: Dictionary = new Dictionary(); + var headerParams: Dictionary = new Dictionary(); + + + + + + + + var token:AsyncToken = getApiInvoker().invokeAPI(path, "POST", queryParams, null, headerParams); + + var requestId: String = getUniqueId(); + + token.requestId = requestId; + token.completionEventType = "update_pet_with_form"; + + token.returnType = null ; + return requestId; + + } + + /* + * Returns void + */ + public function delete_pet (petId: Number, apiKey: String): String { + // create path and map variables + var path: String = "/pet/{petId}".replace(/{format}/g,"xml").replace("{" + "petId" + "}", getApiInvoker().escapeString(petId)); + + // query params + var queryParams: Dictionary = new Dictionary(); + var headerParams: Dictionary = new Dictionary(); + + + + + + headerParams["apiKey"] = toPathValue(apiKey); + + + var token:AsyncToken = getApiInvoker().invokeAPI(path, "DELETE", queryParams, null, headerParams); + + var requestId: String = getUniqueId(); + + token.requestId = requestId; + token.completionEventType = "delete_pet"; + + token.returnType = null ; + return requestId; + + } + + /* + * Returns void + */ + public function upload_file (petId: Number, additionalMetadata: String, file: File): String { + // create path and map variables + var path: String = "/pet/{petId}/uploadImage".replace(/{format}/g,"xml").replace("{" + "petId" + "}", getApiInvoker().escapeString(petId)); + + // query params + var queryParams: Dictionary = new Dictionary(); + var headerParams: Dictionary = new Dictionary(); + + + + + + + + var token:AsyncToken = getApiInvoker().invokeAPI(path, "POST", queryParams, null, headerParams); + + var requestId: String = getUniqueId(); + + token.requestId = requestId; + token.completionEventType = "upload_file"; + + token.returnType = null ; + return requestId; + + } + + /* + * Returns String + */ + public function get_pet_by_id_with_byte_array (petId: Number): String { + // create path and map variables + var path: String = "/pet/{petId}?testing_byte_array=true".replace(/{format}/g,"xml").replace("{" + "petId" + "}", getApiInvoker().escapeString(petId)); + + // query params + var queryParams: Dictionary = new Dictionary(); + var headerParams: Dictionary = new Dictionary(); + + + + + + + + var token:AsyncToken = getApiInvoker().invokeAPI(path, "GET", queryParams, null, headerParams); + + var requestId: String = getUniqueId(); + + token.requestId = requestId; + token.completionEventType = "get_pet_by_id_with_byte_array"; + + token.returnType = String; + return requestId; + + } + + /* + * Returns void + */ + public function add_pet_using_byte_array (body: String): String { + // create path and map variables + var path: String = "/pet?testing_byte_array=true".replace(/{format}/g,"xml"); + + // query params + var queryParams: Dictionary = new Dictionary(); + var headerParams: Dictionary = new Dictionary(); + + + + + + + + var token:AsyncToken = getApiInvoker().invokeAPI(path, "POST", queryParams, body, headerParams); + + var requestId: String = getUniqueId(); + + token.requestId = requestId; + token.completionEventType = "add_pet_using_byte_array"; + + token.returnType = null ; + return requestId; + + } + +} + +} diff --git a/samples/client/petstore/flash/flash/src/io/swagger/client/api/StoreApi.as b/samples/client/petstore/flash/flash/src/io/swagger/client/api/StoreApi.as new file mode 100644 index 00000000000..061878ad257 --- /dev/null +++ b/samples/client/petstore/flash/flash/src/io/swagger/client/api/StoreApi.as @@ -0,0 +1,150 @@ +package io.swagger.client.api { + +import io.swagger.common.ApiInvoker; +import io.swagger.exception.ApiErrorCodes; +import io.swagger.exception.ApiError; +import io.swagger.common.ApiUserCredentials; +import io.swagger.event.Response; +import io.swagger.common.SwaggerApi; +import io.swagger.client.model.Order; + +import mx.rpc.AsyncToken; +import mx.utils.UIDUtil; +import flash.utils.Dictionary; +import flash.events.EventDispatcher; + +public class StoreApi extends SwaggerApi { + /** + * Constructor for the StoreApi api client + * @param apiCredentials Wrapper object for tokens and hostName required towards authentication + * @param eventDispatcher Optional event dispatcher that when provided is used by the SDK to dispatch any Response + */ + public function StoreApi(apiCredentials: ApiUserCredentials, eventDispatcher: EventDispatcher = null) { + super(apiCredentials, eventDispatcher); + } + + public static const event_get_inventory: String = "get_inventory"; + public static const event_place_order: String = "place_order"; + public static const event_get_order_by_id: String = "get_order_by_id"; + public static const event_delete_order: String = "delete_order"; + + + /* + * Returns Dictionary + */ + public function get_inventory (): String { + // create path and map variables + var path: String = "/store/inventory".replace(/{format}/g,"xml"); + + // query params + var queryParams: Dictionary = new Dictionary(); + var headerParams: Dictionary = new Dictionary(); + + + + + + + + var token:AsyncToken = getApiInvoker().invokeAPI(path, "GET", queryParams, null, headerParams); + + var requestId: String = getUniqueId(); + + token.requestId = requestId; + token.completionEventType = "get_inventory"; + + token.returnType = Dictionary; + return requestId; + + } + + /* + * Returns Order + */ + public function place_order (body: Order): String { + // create path and map variables + var path: String = "/store/order".replace(/{format}/g,"xml"); + + // query params + var queryParams: Dictionary = new Dictionary(); + var headerParams: Dictionary = new Dictionary(); + + + + + + + + var token:AsyncToken = getApiInvoker().invokeAPI(path, "POST", queryParams, body, headerParams); + + var requestId: String = getUniqueId(); + + token.requestId = requestId; + token.completionEventType = "place_order"; + + token.returnType = Order; + return requestId; + + } + + /* + * Returns Order + */ + public function get_order_by_id (orderId: String): String { + // create path and map variables + var path: String = "/store/order/{orderId}".replace(/{format}/g,"xml").replace("{" + "orderId" + "}", getApiInvoker().escapeString(orderId)); + + // query params + var queryParams: Dictionary = new Dictionary(); + var headerParams: Dictionary = new Dictionary(); + + + + + + + + var token:AsyncToken = getApiInvoker().invokeAPI(path, "GET", queryParams, null, headerParams); + + var requestId: String = getUniqueId(); + + token.requestId = requestId; + token.completionEventType = "get_order_by_id"; + + token.returnType = Order; + return requestId; + + } + + /* + * Returns void + */ + public function delete_order (orderId: String): String { + // create path and map variables + var path: String = "/store/order/{orderId}".replace(/{format}/g,"xml").replace("{" + "orderId" + "}", getApiInvoker().escapeString(orderId)); + + // query params + var queryParams: Dictionary = new Dictionary(); + var headerParams: Dictionary = new Dictionary(); + + + + + + + + var token:AsyncToken = getApiInvoker().invokeAPI(path, "DELETE", queryParams, null, headerParams); + + var requestId: String = getUniqueId(); + + token.requestId = requestId; + token.completionEventType = "delete_order"; + + token.returnType = null ; + return requestId; + + } + +} + +} diff --git a/samples/client/petstore/flash/flash/src/io/swagger/client/api/UserApi.as b/samples/client/petstore/flash/flash/src/io/swagger/client/api/UserApi.as new file mode 100644 index 00000000000..06b0d079799 --- /dev/null +++ b/samples/client/petstore/flash/flash/src/io/swagger/client/api/UserApi.as @@ -0,0 +1,274 @@ +package io.swagger.client.api { + +import io.swagger.common.ApiInvoker; +import io.swagger.exception.ApiErrorCodes; +import io.swagger.exception.ApiError; +import io.swagger.common.ApiUserCredentials; +import io.swagger.event.Response; +import io.swagger.common.SwaggerApi; +import io.swagger.client.model.User; + +import mx.rpc.AsyncToken; +import mx.utils.UIDUtil; +import flash.utils.Dictionary; +import flash.events.EventDispatcher; + +public class UserApi extends SwaggerApi { + /** + * Constructor for the UserApi api client + * @param apiCredentials Wrapper object for tokens and hostName required towards authentication + * @param eventDispatcher Optional event dispatcher that when provided is used by the SDK to dispatch any Response + */ + public function UserApi(apiCredentials: ApiUserCredentials, eventDispatcher: EventDispatcher = null) { + super(apiCredentials, eventDispatcher); + } + + public static const event_create_user: String = "create_user"; + public static const event_create_users_with_array_input: String = "create_users_with_array_input"; + public static const event_create_users_with_list_input: String = "create_users_with_list_input"; + public static const event_login_user: String = "login_user"; + public static const event_logout_user: String = "logout_user"; + public static const event_get_user_by_name: String = "get_user_by_name"; + public static const event_update_user: String = "update_user"; + public static const event_delete_user: String = "delete_user"; + + + /* + * Returns void + */ + public function create_user (body: User): String { + // create path and map variables + var path: String = "/user".replace(/{format}/g,"xml"); + + // query params + var queryParams: Dictionary = new Dictionary(); + var headerParams: Dictionary = new Dictionary(); + + + + + + + + var token:AsyncToken = getApiInvoker().invokeAPI(path, "POST", queryParams, body, headerParams); + + var requestId: String = getUniqueId(); + + token.requestId = requestId; + token.completionEventType = "create_user"; + + token.returnType = null ; + return requestId; + + } + + /* + * Returns void + */ + public function create_users_with_array_input (body: Array): String { + // create path and map variables + var path: String = "/user/createWithArray".replace(/{format}/g,"xml"); + + // query params + var queryParams: Dictionary = new Dictionary(); + var headerParams: Dictionary = new Dictionary(); + + + + + + + + var token:AsyncToken = getApiInvoker().invokeAPI(path, "POST", queryParams, body, headerParams); + + var requestId: String = getUniqueId(); + + token.requestId = requestId; + token.completionEventType = "create_users_with_array_input"; + + token.returnType = null ; + return requestId; + + } + + /* + * Returns void + */ + public function create_users_with_list_input (body: Array): String { + // create path and map variables + var path: String = "/user/createWithList".replace(/{format}/g,"xml"); + + // query params + var queryParams: Dictionary = new Dictionary(); + var headerParams: Dictionary = new Dictionary(); + + + + + + + + var token:AsyncToken = getApiInvoker().invokeAPI(path, "POST", queryParams, body, headerParams); + + var requestId: String = getUniqueId(); + + token.requestId = requestId; + token.completionEventType = "create_users_with_list_input"; + + token.returnType = null ; + return requestId; + + } + + /* + * Returns String + */ + public function login_user (username: String, password: String): String { + // create path and map variables + var path: String = "/user/login".replace(/{format}/g,"xml"); + + // query params + var queryParams: Dictionary = new Dictionary(); + var headerParams: Dictionary = new Dictionary(); + + + + if("null" != String(username)) + queryParams["username"] = toPathValue(username); + if("null" != String(password)) + queryParams["password"] = toPathValue(password); + + + + + var token:AsyncToken = getApiInvoker().invokeAPI(path, "GET", queryParams, null, headerParams); + + var requestId: String = getUniqueId(); + + token.requestId = requestId; + token.completionEventType = "login_user"; + + token.returnType = String; + return requestId; + + } + + /* + * Returns void + */ + public function logout_user (): String { + // create path and map variables + var path: String = "/user/logout".replace(/{format}/g,"xml"); + + // query params + var queryParams: Dictionary = new Dictionary(); + var headerParams: Dictionary = new Dictionary(); + + + + + + + + var token:AsyncToken = getApiInvoker().invokeAPI(path, "GET", queryParams, null, headerParams); + + var requestId: String = getUniqueId(); + + token.requestId = requestId; + token.completionEventType = "logout_user"; + + token.returnType = null ; + return requestId; + + } + + /* + * Returns User + */ + public function get_user_by_name (username: String): String { + // create path and map variables + var path: String = "/user/{username}".replace(/{format}/g,"xml").replace("{" + "username" + "}", getApiInvoker().escapeString(username)); + + // query params + var queryParams: Dictionary = new Dictionary(); + var headerParams: Dictionary = new Dictionary(); + + + + + + + + var token:AsyncToken = getApiInvoker().invokeAPI(path, "GET", queryParams, null, headerParams); + + var requestId: String = getUniqueId(); + + token.requestId = requestId; + token.completionEventType = "get_user_by_name"; + + token.returnType = User; + return requestId; + + } + + /* + * Returns void + */ + public function update_user (username: String, body: User): String { + // create path and map variables + var path: String = "/user/{username}".replace(/{format}/g,"xml").replace("{" + "username" + "}", getApiInvoker().escapeString(username)); + + // query params + var queryParams: Dictionary = new Dictionary(); + var headerParams: Dictionary = new Dictionary(); + + + + + + + + var token:AsyncToken = getApiInvoker().invokeAPI(path, "PUT", queryParams, body, headerParams); + + var requestId: String = getUniqueId(); + + token.requestId = requestId; + token.completionEventType = "update_user"; + + token.returnType = null ; + return requestId; + + } + + /* + * Returns void + */ + public function delete_user (username: String): String { + // create path and map variables + var path: String = "/user/{username}".replace(/{format}/g,"xml").replace("{" + "username" + "}", getApiInvoker().escapeString(username)); + + // query params + var queryParams: Dictionary = new Dictionary(); + var headerParams: Dictionary = new Dictionary(); + + + + + + + + var token:AsyncToken = getApiInvoker().invokeAPI(path, "DELETE", queryParams, null, headerParams); + + var requestId: String = getUniqueId(); + + token.requestId = requestId; + token.completionEventType = "delete_user"; + + token.returnType = null ; + return requestId; + + } + +} + +} diff --git a/samples/client/petstore/flash/flash/src/io/swagger/client/model/Category.as b/samples/client/petstore/flash/flash/src/io/swagger/client/model/Category.as new file mode 100644 index 00000000000..6aa73414387 --- /dev/null +++ b/samples/client/petstore/flash/flash/src/io/swagger/client/model/Category.as @@ -0,0 +1,32 @@ +package io.swagger.client.model { + + + [XmlRootNode(name="Category")] + public class Category { + + + + [XmlElement(name="id")] + + public var id: Number = 0; + + + + [XmlElement(name="name")] + + public var name: String = null; + + + public function toString(): String { + var str: String = "Category: "; + + str += " (id: " + id + ")"; + + str += " (name: " + name + ")"; + + return str; + } + +} + +} diff --git a/samples/client/petstore/flash/flash/src/io/swagger/client/model/CategoryList.as b/samples/client/petstore/flash/flash/src/io/swagger/client/model/CategoryList.as new file mode 100644 index 00000000000..342cd70c001 --- /dev/null +++ b/samples/client/petstore/flash/flash/src/io/swagger/client/model/CategoryList.as @@ -0,0 +1,18 @@ +package io.swagger.client.model { + +import io.swagger.common.ListWrapper; + + public class CategoryList implements ListWrapper { + // This declaration below of _Category_obj_class is to force flash compiler to include this class + private var _category_obj_class: io.swagger.client.model.Category = null; + [XmlElements(name="category", type="io.swagger.client.model.Category")] + public var category: Array = new Array(); + + public function getList(): Array{ + return category; + } + +} + + +} diff --git a/samples/client/petstore/flash/flash/src/io/swagger/client/model/Order.as b/samples/client/petstore/flash/flash/src/io/swagger/client/model/Order.as new file mode 100644 index 00000000000..d6e4e6dc4d7 --- /dev/null +++ b/samples/client/petstore/flash/flash/src/io/swagger/client/model/Order.as @@ -0,0 +1,65 @@ +package io.swagger.client.model { + + + [XmlRootNode(name="Order")] + public class Order { + + + + [XmlElement(name="id")] + + public var id: Number = 0; + + + + [XmlElement(name="petId")] + + public var petId: Number = 0; + + + + [XmlElement(name="quantity")] + + public var quantity: Number = 0; + + + + [XmlElement(name="shipDate")] + + public var shipDate: Date = null; + + /* Order Status */ + + + [XmlElement(name="status")] + + public var status: String = null; + + + + [XmlElement(name="complete")] + + public var complete: Boolean = false; + + + public function toString(): String { + var str: String = "Order: "; + + str += " (id: " + id + ")"; + + str += " (petId: " + petId + ")"; + + str += " (quantity: " + quantity + ")"; + + str += " (shipDate: " + shipDate + ")"; + + str += " (status: " + status + ")"; + + str += " (complete: " + complete + ")"; + + return str; + } + +} + +} diff --git a/samples/client/petstore/flash/flash/src/io/swagger/client/model/OrderList.as b/samples/client/petstore/flash/flash/src/io/swagger/client/model/OrderList.as new file mode 100644 index 00000000000..bba3d8a4724 --- /dev/null +++ b/samples/client/petstore/flash/flash/src/io/swagger/client/model/OrderList.as @@ -0,0 +1,18 @@ +package io.swagger.client.model { + +import io.swagger.common.ListWrapper; + + public class OrderList implements ListWrapper { + // This declaration below of _Order_obj_class is to force flash compiler to include this class + private var _order_obj_class: io.swagger.client.model.Order = null; + [XmlElements(name="order", type="io.swagger.client.model.Order")] + public var order: Array = new Array(); + + public function getList(): Array{ + return order; + } + +} + + +} diff --git a/samples/client/petstore/flash/flash/src/io/swagger/client/model/Pet.as b/samples/client/petstore/flash/flash/src/io/swagger/client/model/Pet.as new file mode 100644 index 00000000000..a4a7d04830f --- /dev/null +++ b/samples/client/petstore/flash/flash/src/io/swagger/client/model/Pet.as @@ -0,0 +1,75 @@ +package io.swagger.client.model { + +import io.swagger.client.model.Category; +import io.swagger.client.model.Tag; + + [XmlRootNode(name="Pet")] + public class Pet { + + + + [XmlElement(name="id")] + + public var id: Number = 0; + + + + [XmlElement(name="category")] + + public var category: Category = NaN; + + + + [XmlElement(name="name")] + + public var name: String = null; + + + + // This declaration below of _photoUrls_obj_class is to force flash compiler to include this class + private var _photoUrls_obj_class: Array = null; + [XmlElementWrapper(name="photoUrls")] + [XmlElements(name="photoUrls", type="Array")] + + + public var photoUrls: Array = new Array(); + + + + // This declaration below of _tags_obj_class is to force flash compiler to include this class + private var _tags_obj_class: Array = null; + [XmlElementWrapper(name="tags")] + [XmlElements(name="tags", type="Array")] + + + public var tags: Array = new Array(); + + /* pet status in the store */ + + + [XmlElement(name="status")] + + public var status: String = null; + + + public function toString(): String { + var str: String = "Pet: "; + + str += " (id: " + id + ")"; + + str += " (category: " + category + ")"; + + str += " (name: " + name + ")"; + + str += " (photoUrls: " + photoUrls + ")"; + + str += " (tags: " + tags + ")"; + + str += " (status: " + status + ")"; + + return str; + } + +} + +} diff --git a/samples/client/petstore/flash/flash/src/io/swagger/client/model/PetList.as b/samples/client/petstore/flash/flash/src/io/swagger/client/model/PetList.as new file mode 100644 index 00000000000..ada0846c5ea --- /dev/null +++ b/samples/client/petstore/flash/flash/src/io/swagger/client/model/PetList.as @@ -0,0 +1,20 @@ +package io.swagger.client.model { + +import io.swagger.common.ListWrapper; +import io.swagger.client.model.Category; +import io.swagger.client.model.Tag; + + public class PetList implements ListWrapper { + // This declaration below of _Pet_obj_class is to force flash compiler to include this class + private var _pet_obj_class: io.swagger.client.model.Pet = null; + [XmlElements(name="pet", type="io.swagger.client.model.Pet")] + public var pet: Array = new Array(); + + public function getList(): Array{ + return pet; + } + +} + + +} diff --git a/samples/client/petstore/flash/flash/src/io/swagger/client/model/Tag.as b/samples/client/petstore/flash/flash/src/io/swagger/client/model/Tag.as new file mode 100644 index 00000000000..7387e2e2745 --- /dev/null +++ b/samples/client/petstore/flash/flash/src/io/swagger/client/model/Tag.as @@ -0,0 +1,32 @@ +package io.swagger.client.model { + + + [XmlRootNode(name="Tag")] + public class Tag { + + + + [XmlElement(name="id")] + + public var id: Number = 0; + + + + [XmlElement(name="name")] + + public var name: String = null; + + + public function toString(): String { + var str: String = "Tag: "; + + str += " (id: " + id + ")"; + + str += " (name: " + name + ")"; + + return str; + } + +} + +} diff --git a/samples/client/petstore/flash/flash/src/io/swagger/client/model/TagList.as b/samples/client/petstore/flash/flash/src/io/swagger/client/model/TagList.as new file mode 100644 index 00000000000..25ebadb27fb --- /dev/null +++ b/samples/client/petstore/flash/flash/src/io/swagger/client/model/TagList.as @@ -0,0 +1,18 @@ +package io.swagger.client.model { + +import io.swagger.common.ListWrapper; + + public class TagList implements ListWrapper { + // This declaration below of _Tag_obj_class is to force flash compiler to include this class + private var _tag_obj_class: io.swagger.client.model.Tag = null; + [XmlElements(name="tag", type="io.swagger.client.model.Tag")] + public var tag: Array = new Array(); + + public function getList(): Array{ + return tag; + } + +} + + +} diff --git a/samples/client/petstore/flash/flash/src/io/swagger/client/model/User.as b/samples/client/petstore/flash/flash/src/io/swagger/client/model/User.as new file mode 100644 index 00000000000..2b6474de90c --- /dev/null +++ b/samples/client/petstore/flash/flash/src/io/swagger/client/model/User.as @@ -0,0 +1,81 @@ +package io.swagger.client.model { + + + [XmlRootNode(name="User")] + public class User { + + + + [XmlElement(name="id")] + + public var id: Number = 0; + + + + [XmlElement(name="username")] + + public var username: String = null; + + + + [XmlElement(name="firstName")] + + public var firstName: String = null; + + + + [XmlElement(name="lastName")] + + public var lastName: String = null; + + + + [XmlElement(name="email")] + + public var email: String = null; + + + + [XmlElement(name="password")] + + public var password: String = null; + + + + [XmlElement(name="phone")] + + public var phone: String = null; + + /* User Status */ + + + [XmlElement(name="userStatus")] + + public var userStatus: Number = 0; + + + public function toString(): String { + var str: String = "User: "; + + str += " (id: " + id + ")"; + + str += " (username: " + username + ")"; + + str += " (firstName: " + firstName + ")"; + + str += " (lastName: " + lastName + ")"; + + str += " (email: " + email + ")"; + + str += " (password: " + password + ")"; + + str += " (phone: " + phone + ")"; + + str += " (userStatus: " + userStatus + ")"; + + return str; + } + +} + +} diff --git a/samples/client/petstore/flash/flash/src/io/swagger/client/model/UserList.as b/samples/client/petstore/flash/flash/src/io/swagger/client/model/UserList.as new file mode 100644 index 00000000000..e8a1fdb27f6 --- /dev/null +++ b/samples/client/petstore/flash/flash/src/io/swagger/client/model/UserList.as @@ -0,0 +1,18 @@ +package io.swagger.client.model { + +import io.swagger.common.ListWrapper; + + public class UserList implements ListWrapper { + // This declaration below of _User_obj_class is to force flash compiler to include this class + private var _user_obj_class: io.swagger.client.model.User = null; + [XmlElements(name="user", type="io.swagger.client.model.User")] + public var user: Array = new Array(); + + public function getList(): Array{ + return user; + } + +} + + +} diff --git a/samples/client/petstore/flash/flash/src/io/swagger/common/ApiInvoker.as b/samples/client/petstore/flash/flash/src/io/swagger/common/ApiInvoker.as new file mode 100644 index 00000000000..6d8466390a6 --- /dev/null +++ b/samples/client/petstore/flash/flash/src/io/swagger/common/ApiInvoker.as @@ -0,0 +1,276 @@ +package io.swagger.common { +import io.swagger.event.ApiClientEvent; +import io.swagger.event.Response; + +import flash.events.EventDispatcher; +import flash.utils.*; +import mx.rpc.AsyncToken; +import mx.rpc.events.ResultEvent; +import mx.rpc.events.FaultEvent; +import mx.utils.ObjectUtil; +import mx.rpc.http.HTTPService; +import mx.messaging.messages.HTTPRequestMessage; +import mx.messaging.ChannelSet; +import mx.messaging.channels.DirectHTTPChannel; +import asaxb.xml.bind.ASAXBContext; +import asaxb.xml.bind.Unmarshaller; + +public class ApiInvoker extends EventDispatcher { + + private static const DELETE_DATA_DUMMY:String = "dummyDataRequiredForDeleteOverride"; + private static const X_HTTP_OVERRIDE_KEY:String = "X-HTTP-Method-Override"; + private static const CONTENT_TYPE_HEADER_KEY:String = "Content-Type"; + + public function ApiInvoker(apiUsageCredentials:ApiUserCredentials, eventNotifier:EventDispatcher, useProxy:Boolean = true) { + _apiUsageCredentials = apiUsageCredentials; + _useProxyServer = useProxy; + if (_apiUsageCredentials.hostName != null) { + _proxyHostName = _apiUsageCredentials.hostName; + } + _apiPath = _apiUsageCredentials.apiPath; + _proxyPath = _apiUsageCredentials.proxyPath; + _apiProxyServerUrl = _apiUsageCredentials.apiProxyServerUrl; + _apiEventNotifier = eventNotifier; + } + public var _apiEventNotifier:EventDispatcher; + internal var _apiProxyServerUrl:String = ""; + internal var _useProxyServer:Boolean = true; + private var _apiUsageCredentials:ApiUserCredentials; + private var _baseUrl:String = ""; + private var _proxyHostName:String = ""; + private var _apiPath:String = ""; + private var _proxyPath:String = ""; + + public function invokeAPI(resourceURL:String, method:String, queryParams:Dictionary, postObject:Object, headerParams:Dictionary):AsyncToken { + //make the communication + if (_useProxyServer) { + resourceURL = _apiProxyServerUrl + resourceURL; + } + else { + resourceURL = "http://" + _proxyHostName + _apiPath + resourceURL; + } + + var counter:int = 0; + var symbol:String = "&"; + var paramValue:Object; + for (var paramName:String in queryParams) { + paramValue = queryParams[paramName]; + //var key:String = paramName; + // do stuff + symbol = "&"; + if (counter == 0) { + symbol = "?"; + } + resourceURL = resourceURL + symbol + paramName + "=" + paramValue.toString(); + counter++; + + } +// trace(resourceURL); + //create a httpservice and invoke the rest url waiting for response + var requestHeader:Object = new Object(); + if (headerParams != null) { + for (var key:String in headerParams) { + requestHeader[key] = headerParams[key]; + } + } + + resourceURL = ApiUrlHelper.appendTokenInfo(resourceURL, requestHeader, _apiUsageCredentials); + + var bodyData:String = marshal(postObject).toString();//restRequest.postData; + + return doRestCall(resourceURL, onApiRequestResult, onApiRequestFault, method, bodyData, requestHeader, "application/xml"); + + + } + + public function marshal(source:Object):Object { +// trace("marshal got - " + source) + if (source is String) { + return source; + } else if (source is Array && source.length > 0) { + var writer:XMLWriter = new XMLWriter(); + var sourceArray:Array = source as Array; + var arrayEnclosure:String = getArrayEnclosure(sourceArray); + writer.xml.setName(arrayEnclosure); + + for (var i:int = 0; i < sourceArray.length; i++) { + var o:Object = sourceArray[i]; + writer.xml.appendChild(marshal(o)); + } + return writer.xml; + } else + return marshalObject(source); + } + + public function marshalObject(source:Object):XML { + var writer:XMLWriter = new XMLWriter(); + var objDescriptor:XML = describeType(source); + var property:XML; + var propertyType:String; + var propertyValue:Object; + + var qualifiedClassName:String = objDescriptor.@name; + qualifiedClassName = qualifiedClassName.replace("::", "."); + var className:String = qualifiedClassName.substring(qualifiedClassName.lastIndexOf(".") + 1); + className = className.toLowerCase() + className.substring(1); + writer.xml.setName(className); + + for each(property in objDescriptor.elements("variable")) { + propertyValue = source[property.@name]; + if (propertyValue != null) { + if (ObjectUtil.isSimple(propertyValue)) { + writer.addProperty(property.@name, propertyValue.toString()); + } + else { + writer.addProperty(property.@name, marshal(propertyValue).toXMLString()); + } + } + } + for each(property in objDescriptor.elements("accessor")) { + if (property.@access == "readonly") { + continue; + } + propertyValue = source[property.@name]; + if (source[property.@name] != null) { + if (ObjectUtil.isSimple(propertyValue)) { + writer.addProperty(property.@name, propertyValue.toString()); + } + else { + writer.addProperty(property.@name, marshal(propertyValue).toXMLString()); + } + } + } + return writer.xml; + } + + public function escapeString(str:String):String { + return str; + } + + private function doRestCall(url:String, resultFunction:Function, faultFunction:Function = null, + restMethod:String = "GET", + bodyData:Object = null, headers:Object = null, contentType:String = "application/xml"):AsyncToken { + var httpService:HTTPService = new HTTPService(); + + if (headers == null) { + headers = new Object(); + } + httpService.method = restMethod; + + if (restMethod.toUpperCase() != HTTPRequestMessage.GET_METHOD) { + //httpService.method = HTTPRequestMessage.POST_METHOD; - not required as we're using the proxy + if (bodyData == null) { + bodyData = new Object(); + } + + if (restMethod == HTTPRequestMessage.DELETE_METHOD) { + headers[X_HTTP_OVERRIDE_KEY] = HTTPRequestMessage.DELETE_METHOD; + bodyData = DELETE_DATA_DUMMY; + } + else if (restMethod == HTTPRequestMessage.PUT_METHOD) { + headers[X_HTTP_OVERRIDE_KEY] = HTTPRequestMessage.PUT_METHOD; + } + else { + headers[CONTENT_TYPE_HEADER_KEY] = contentType; + } + } + else { + //if the request type is GET and content type is xml then the Flex HTTPService converts it to a POST ... yeah + contentType = null; + } + + httpService.url = url; + httpService.contentType = contentType; + httpService.resultFormat = "e4x"; + httpService.headers = headers; + httpService.addEventListener(ResultEvent.RESULT, resultFunction); + if (faultFunction != null) { + httpService.addEventListener(FaultEvent.FAULT, faultFunction); + } + if (_useProxyServer) { + httpService.useProxy = true; + + var channelSet:ChannelSet = new ChannelSet(); + var httpChannel:DirectHTTPChannel = new DirectHTTPChannel(""); + httpChannel.uri = ApiUrlHelper.getProxyUrl(_proxyHostName, _proxyPath); + channelSet.addChannel(httpChannel); + httpService.channelSet = channelSet; + } + + return httpService.send(bodyData); + } + + private function onApiRequestResult(event:ResultEvent):void { + + // I put this in comments. Here, it's trying to parse XML and it fails if it's not XML. + // Therefore, it's better to have the raw result that we can parse as we want. + // TODO: Create different parser (JSON, XML, etc.) + /* + var completionListener:Function = event.token.completionListener; + var result:Object = event.result; + var resultType:Class = event.token.returnType; + var resultObject:Object; + if (resultType != null) { + var context:ASAXBContext = ASAXBContext.newInstance(resultType); + var unmarshaller:Unmarshaller = context.createUnmarshaller(); + var resultXML:XML = new XML(event.result); + try { + resultObject = unmarshaller.unmarshal(resultXML); + } + catch (error:TypeError) { + var errorResponse:Response = new Response(false, null, "Could not unmarshall response"); + if (_apiEventNotifier != null) { //dispatch event via assigned dispatcher + var failureEvent:ApiClientEvent = new ApiClientEvent(event.token.completionEventType); + failureEvent.response = errorResponse; + _apiEventNotifier.dispatchEvent(failureEvent); + } + } + + if (resultObject is ListWrapper) { + resultObject = ListWrapper(resultObject).getList(); + } + } + + var response:Response = new Response(true, resultObject); + */ + + var response:Response = new Response(true, event.result); + response.requestId = event.token.requestId; + var successEventType:String = event.token.completionEventType != null ? event.token.completionEventType : ApiClientEvent.SUCCESS_EVENT; + + if (_apiEventNotifier != null) { //dispatch event via assigned dispatcher + var successEvent:ApiClientEvent = new ApiClientEvent(successEventType); + successEvent.response = response; + _apiEventNotifier.dispatchEvent(successEvent); + } + } + + private function onApiRequestFault(event:FaultEvent):void { + var completionListener:Function = event.token.completionListener; + if (completionListener != null) { + completionListener.call(null, new Response(false, null, event.fault.faultString)); + } + + var failureEventType:String = event.token.completionEventType != null ? event.token.completionEventType : ApiClientEvent.FAILURE_EVENT; + + if (_apiEventNotifier != null) { //dispatch event via assigned dispatcher + var failureEvent:ApiClientEvent = new ApiClientEvent(failureEventType); + failureEvent.response = new Response(false, null, event.fault.faultString); + _apiEventNotifier.dispatchEvent(failureEvent); + } + } + + private function getArrayEnclosure(arr:Array):String { + if (arr != null && arr.length > 0) { + var className:String = flash.utils.getQualifiedClassName(arr[0]) + if (className.indexOf("::") > 0) + className = className.substr(className.indexOf("::") + 2, className.length) + + return className.substring(0, 1).toLowerCase() + className.substring(1, className.length) + "s"; + } else + return ""; + } + + +} +} diff --git a/samples/client/petstore/flash/flash/src/io/swagger/common/ApiUrlHelper.as b/samples/client/petstore/flash/flash/src/io/swagger/common/ApiUrlHelper.as new file mode 100644 index 00000000000..8779610cd48 --- /dev/null +++ b/samples/client/petstore/flash/flash/src/io/swagger/common/ApiUrlHelper.as @@ -0,0 +1,41 @@ +package io.swagger.common { +import io.swagger.common.ApiUserCredentials; + +/** + * @private + * Internal class for the Rest client + */ +internal class ApiUrlHelper { + + private static const API_URL_KEY:String = "api_key"; + private static const AUTH_TOKEN_URL_KEY:String = "auth_token"; + + private static const HTTP_URL_PREFIX:String = "http://"; + + internal static function appendTokenInfo(restUrl:String, requestHeader: Object, credentials: ApiUserCredentials): String { + //checks for the presence api credentials on client initialization and not repeated here + if(restUrl.indexOf("?") == -1){ + restUrl += ( "?" + API_URL_KEY + "=" + credentials.apiToken ); + } + else{ + restUrl += ( "&" + API_URL_KEY + "=" + credentials.apiToken ); + } + requestHeader.api_key = credentials.apiToken; + + if(credentials.authToken != null && credentials.authToken != ""){ + restUrl += ( "&" + AUTH_TOKEN_URL_KEY + "=" + credentials.authToken ); + requestHeader.auth_token = credentials.authToken; + } + + return restUrl; + } + + internal static function getProxyUrl(hostName: String, proxyPath: String): String{ + if (hostName..charAt(hostName.length) == "/") //remove trailing slash + { + hostName = hostName.substring(0, hostName.length - 1); + } + return HTTP_URL_PREFIX + hostName + proxyPath; + } +} +} diff --git a/samples/client/petstore/flash/flash/src/io/swagger/common/ApiUserCredentials.as b/samples/client/petstore/flash/flash/src/io/swagger/common/ApiUserCredentials.as new file mode 100644 index 00000000000..118d917a247 --- /dev/null +++ b/samples/client/petstore/flash/flash/src/io/swagger/common/ApiUserCredentials.as @@ -0,0 +1,63 @@ +package io.swagger.common { + +/** + * Api account credentials. + * + */ +public class ApiUserCredentials { + /** + * An apitoken that is passed along with the requests + */ + public var apiToken:String; + /** + * A valid auth_token which could be necessary for certain operations + */ + public var authToken:String; + /** + * The userId which could be required for certain operations + */ + public var userId:Number; + /** + * The host name for the Rest API eg. api.companyName.com + */ + public var hostName:String; + + /** + * The base path to the api resources - used along with the hostname + * eg. /v4 + */ + public var apiPath: String; + + /** + * The base path to the blazeds proxy + * eg. /v4/messagebroker/restproxy + */ + public var proxyPath: String; + + /** + * If a proxy server has been set up for the services specify the URL here. This value is used when the Api is invoked with + * the value useProxy as true + */ + public var apiProxyServerUrl: String; + + /** + * Constructor of ApiUserCredentials + * @param apiToken An apitoken that is passed along with the requests + * @param authToken A valid auth_token which could necessary for certain operations + * @param hostName The host name for the Rest API eg. api.companyName.com + * @param userId The userId which is required for certain operations - currently, get user lists + */ + public function ApiUserCredentials(hostName: String, apiPath: String, apiToken: String, + authToken: String = null, userId: Number = -1, apiProxyServerUrl: String="", + proxyPath: String = null) { + this.hostName = hostName; + this.apiToken = apiToken; + this.authToken = authToken; + this.userId = userId; + this.apiPath = apiPath; + this.apiProxyServerUrl = apiProxyServerUrl; + this.proxyPath = proxyPath; + } + +} +} \ No newline at end of file diff --git a/samples/client/petstore/flash/flash/src/io/swagger/common/ListWrapper.as b/samples/client/petstore/flash/flash/src/io/swagger/common/ListWrapper.as new file mode 100644 index 00000000000..b22890ad1d1 --- /dev/null +++ b/samples/client/petstore/flash/flash/src/io/swagger/common/ListWrapper.as @@ -0,0 +1,9 @@ +package io.swagger.common +{ + public interface ListWrapper + { + + function getList(): Array; + + } +} \ No newline at end of file diff --git a/samples/client/petstore/flash/flash/src/io/swagger/common/SwaggerApi.as b/samples/client/petstore/flash/flash/src/io/swagger/common/SwaggerApi.as new file mode 100644 index 00000000000..059de642a74 --- /dev/null +++ b/samples/client/petstore/flash/flash/src/io/swagger/common/SwaggerApi.as @@ -0,0 +1,75 @@ +package io.swagger.common +{ + import io.swagger.common.ApiUserCredentials; + + import flash.events.EventDispatcher; + import flash.events.IEventDispatcher; + + import mx.utils.UIDUtil; + + public class SwaggerApi extends EventDispatcher + { + + protected var _apiUsageCredentials:ApiUserCredentials; + protected var _apiEventNotifier:EventDispatcher; + protected var _apiInvoker: ApiInvoker; + + protected var _useProxyServer: Boolean = false; + + + /** + * Constructor for the api client + * @param apiCredentials Wrapper object for tokens and hostName required towards authentication + * @param eventDispatcher Optional event dispatcher that when provided is used by the SDK to dispatch any Response + */ + public function SwaggerApi(apiCredentials: ApiUserCredentials, eventDispatcher: EventDispatcher = null) { + super(); + _apiUsageCredentials = apiCredentials; + _apiEventNotifier = eventDispatcher; + } + + public function useProxyServer(value:Boolean, proxyServerUrl: String = null):void { + _useProxyServer = value; + } + + protected function getApiInvoker():ApiInvoker { + if(_apiInvoker == null){ + if(_apiEventNotifier == null){ + _apiEventNotifier = this; + } + _apiInvoker = new ApiInvoker(_apiUsageCredentials, _apiEventNotifier, _useProxyServer); + } + return _apiInvoker; + } + + protected function getUniqueId():String { + return UIDUtil.createUID(); + } + + /** + * Method for returning the path value + * For a string value an empty value is returned if the value is null + * @param value + * @return + */ + protected static function toPathValue(value: Object): String { + if(value is Array){ + return arrayToPathValue(value as Array); + } + return value == null ? "" : value.toString(); + } + + /** + * Method for returning a path value + * For a list of objects a comma separated string is returned + * @param objects + * @return + */ + protected static function arrayToPathValue(objects: Array): String { + var out: String = ""; + + return objects.join(","); + } + + } +} \ No newline at end of file diff --git a/samples/client/petstore/flash/flash/src/io/swagger/common/XMLWriter.as b/samples/client/petstore/flash/flash/src/io/swagger/common/XMLWriter.as new file mode 100644 index 00000000000..0b08066775b --- /dev/null +++ b/samples/client/petstore/flash/flash/src/io/swagger/common/XMLWriter.as @@ -0,0 +1,28 @@ +package io.swagger.common +{ + public class XMLWriter + { + public var xml:XML; + + public function XMLWriter() + { + xml=; + } + + public function reset():void { + xml=new XML(); + } + + public function addProperty(propertyName:String, propertyValue:String):XML { + var xmlProperty:XML= + xmlProperty.setName(propertyName); + xmlProperty.appendChild(propertyValue); + xml.appendChild(xmlProperty); + return xmlProperty; + } + + public function addAttribute(propertyName:String, attribute:String, attributeValue:String):void { + xml.elements(propertyName)[0].@[attribute]=attributeValue; + } + } +} \ No newline at end of file diff --git a/samples/client/petstore/flash/flash/src/io/swagger/event/ApiClientEvent.as b/samples/client/petstore/flash/flash/src/io/swagger/event/ApiClientEvent.as new file mode 100644 index 00000000000..d64cd304d49 --- /dev/null +++ b/samples/client/petstore/flash/flash/src/io/swagger/event/ApiClientEvent.as @@ -0,0 +1,36 @@ +package io.swagger.event { +import io.swagger.event.Response; + +import flash.events.Event; + +/** + * Event dispatched by the SDK to communicate success events and failure events. + * If a custom dispatcher has been assigned by the consumer on the generated client then the dispatcher dispatches + * the ApiClientEvent to indicate success or failure of the invocation using the Response + */ +public class ApiClientEvent extends Event{ + + /** + * Event type to indicate a unsuccessful invocation + */ + public static const FAILURE_EVENT:String = "unsuccesfulInvocation"; + + /** + * Event type to indicate a successful invocation + */ + public static const SUCCESS_EVENT:String = "successfulInvocation"; + + /** + * The Response object which contains response info + */ + public var response: Response; + /** + * Any additional info + */ + public var message:String; + + public function ApiClientEvent(type:String,bubbles:Boolean = false,cancelable:Boolean = false) { + super(type, bubbles, cancelable); + } +} +} \ No newline at end of file diff --git a/samples/client/petstore/flash/flash/src/io/swagger/event/Response.as b/samples/client/petstore/flash/flash/src/io/swagger/event/Response.as new file mode 100644 index 00000000000..a43b7980a38 --- /dev/null +++ b/samples/client/petstore/flash/flash/src/io/swagger/event/Response.as @@ -0,0 +1,56 @@ +package io.swagger.event { + +/** + * Response contains info on the result of an API invocation. + * A completion listener will expect this Response object. + */ +public class Response { + + /** + * Indicates whether the invoked operation failed or succeeded + */ + public var isSuccess:Boolean; + + /** + * The payload of the succesful operation eg. a Word in a WordRequest + */ + public var payload:Object; + + /** + * Error message in case of failure + */ + public var errorMessage:String; + + /** + * A request Id that was passed in by the user as a param when invoking the operation + */ + public var requestId:String; + private static const API_ERROR_MSG:String = "Api error response: "; + + public function Response(isSuccessful: Boolean, payload: Object = null, errorMessage: String = null, requestId: String = null) { + this.isSuccess = isSuccessful; + this.payload = payload; + this.errorMessage = getFriendlyMessage(errorMessage); + } + + private static function getFriendlyMessage(errorMessage: String): String{ + var result: String = errorMessage; + if(errorMessage == null) + return null; + var errorCode: String; + var errorCodeArray: Array = errorMessage.match(/(?<=HTTP\/1.1 )[0-9][0-9][0-9]/); + if(errorCodeArray != null && errorCodeArray.length == 1){ + errorCode = String(errorCodeArray[0]); + } + var msgArray: Array = errorMessage.match(/(?<=HTTP\/1.1 [0-9][0-9][0-9] )[^]*/); + if(msgArray != null && msgArray.length == 1){ + result = API_ERROR_MSG + String(msgArray[0]); + } + return result; + } + + public function toString(): String { + return "Response (requestId:" + requestId + "; isSuccess:" + isSuccess + "; errorMessage:" + errorMessage + "; payload:" + payload + ")"; + } +} +} \ No newline at end of file diff --git a/samples/client/petstore/flash/flash/src/io/swagger/exception/ApiError.as b/samples/client/petstore/flash/flash/src/io/swagger/exception/ApiError.as new file mode 100644 index 00000000000..c8ac95a5c59 --- /dev/null +++ b/samples/client/petstore/flash/flash/src/io/swagger/exception/ApiError.as @@ -0,0 +1,10 @@ +package io.swagger.exception +{ + public class ApiError extends Error + { + public function ApiError(id:*=0, message:*="") + { + super(message,id); + } + } +} \ No newline at end of file diff --git a/samples/client/petstore/flash/flash/src/io/swagger/exception/ApiErrorCodes.as b/samples/client/petstore/flash/flash/src/io/swagger/exception/ApiErrorCodes.as new file mode 100644 index 00000000000..e5ea46480aa --- /dev/null +++ b/samples/client/petstore/flash/flash/src/io/swagger/exception/ApiErrorCodes.as @@ -0,0 +1,34 @@ +package io.swagger.exception +{ + public class ApiErrorCodes + { + /** + * System exception. + */ + public static const SYSTEM_EXCEPTION: Number = 0; + + /** + * With Arguments as current key. + */ + public static const API_KEY_NOT_VALID: Number = 1000; + /** + * With arguments as current token value + */ + public static const AUTH_TOKEN_NOT_VALID: Number = 1001; + /** + * With arguments as input JSON and output class anme + */ + public static const ERROR_CONVERTING_JSON_TO_JAVA: Number = 1002; + /** + * With arguments as JAVA class name + */ + public static const ERROR_CONVERTING_JAVA_TO_JSON: Number = 1003; + + public static const ERROR_FROM_WEBSERVICE_CALL: Number = 1004; + /** + * With arguments as current API server name + */ + public static const API_SERVER_NOT_VALID: Number = 1005; + + } +} \ No newline at end of file From eb9cff7c482ef889556145e69a100f3d1703b554 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Fri, 5 Feb 2016 17:12:40 -0800 Subject: [PATCH 073/189] added x-swagger-router-controller, operationId for node.js versions --- .../languages/NodeJSServerCodegen.java | 33 +++++++++++++++---- .../main/resources/nodejs/service.mustache | 16 ++++----- 2 files changed, 34 insertions(+), 15 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/NodeJSServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/NodeJSServerCodegen.java index cd2f8980c15..b1e90ac8fdb 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/NodeJSServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/NodeJSServerCodegen.java @@ -8,11 +8,11 @@ import com.fasterxml.jackson.databind.module.SimpleModule; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Lists; import com.google.common.collect.Multimap; - import io.swagger.codegen.*; -import io.swagger.models.Swagger; -import io.swagger.models.Info; +import io.swagger.models.*; import io.swagger.util.Yaml; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.File; import java.io.IOException; @@ -20,9 +20,6 @@ import java.math.BigDecimal; import java.util.*; import java.util.Map.Entry; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - public class NodeJSServerCodegen extends DefaultCodegen implements CodegenConfig { private static final Logger LOGGER = LoggerFactory.getLogger(NodeJSServerCodegen.class); @@ -191,6 +188,7 @@ public class NodeJSServerCodegen extends DefaultCodegen implements CodegenConfig List operations = (List) objectMap.get("operation"); for (CodegenOperation operation : operations) { operation.httpMethod = operation.httpMethod.toLowerCase(); + List params = operation.allParams; if (params != null && params.size() == 0) { operation.allParams = null; @@ -253,7 +251,6 @@ public class NodeJSServerCodegen extends DefaultCodegen implements CodegenConfig @Override public void preprocessSwagger(Swagger swagger) { - String host = swagger.getHost(); String port = "8080"; if (host != null) { @@ -273,6 +270,28 @@ public class NodeJSServerCodegen extends DefaultCodegen implements CodegenConfig this.additionalProperties.put("projectName", projectName); } } + + // need vendor extensions for x-swagger-router-controller + Map paths = swagger.getPaths(); + if(paths != null) { + for(String pathname : paths.keySet()) { + Path path = paths.get(pathname); + Map operationMap = path.getOperationMap(); + if(operationMap != null) { + for(HttpMethod method : operationMap.keySet()) { + Operation operation = operationMap.get(method); + String tag = "default"; + if(operation.getTags() != null && operation.getTags().size() > 0) { + tag = toApiName(operation.getTags().get(0)); + } + if(operation.getOperationId() == null) { + operation.setOperationId(getOrGenerateOperationId(operation, pathname, method.toString())); + } + operation.getVendorExtensions().put("x-swagger-router-controller", toApiName(tag)); + } + } + } + } } @Override diff --git a/modules/swagger-codegen/src/main/resources/nodejs/service.mustache b/modules/swagger-codegen/src/main/resources/nodejs/service.mustache index 5073d249275..c018e9ae294 100644 --- a/modules/swagger-codegen/src/main/resources/nodejs/service.mustache +++ b/modules/swagger-codegen/src/main/resources/nodejs/service.mustache @@ -5,15 +5,14 @@ exports.{{nickname}} = function(args, res, next) { /** * parameters expected in the args: - {{#allParams}}* {{paramName}} ({{dataType}}) - {{/allParams}}**/ - -var examples = {}; - {{#examples}} - examples['{{contentType}}'] = {{{example}}}; - {{/examples}} - + {{#allParams}}* {{paramName}} ({{dataType}}) + {{/allParams}}**/ + {{^returnType}}// no response value expected for this operation + {{/returnType}} {{#returnType}} + var examples = {}; + {{#examples}}examples['{{contentType}}'] = {{{example}}}; + {{/examples}} if(Object.keys(examples).length > 0) { res.setHeader('Content-Type', 'application/json'); res.end(JSON.stringify(examples[Object.keys(examples)[0]] || {}, null, 2)); @@ -24,5 +23,6 @@ var examples = {}; {{/returnType}} {{^returnType}}res.end();{{/returnType}} } + {{/operation}} {{/operations}} From 897c8547288115351d57535b3f8930ed8554e0bb Mon Sep 17 00:00:00 2001 From: delenius Date: Fri, 5 Feb 2016 21:27:11 -0800 Subject: [PATCH 074/189] Use prototypes for model methods Fixes #2044. --- .../main/resources/Javascript/model.mustache | 61 +++++++++---------- 1 file changed, 30 insertions(+), 31 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/Javascript/model.mustache b/modules/swagger-codegen/src/main/resources/Javascript/model.mustache index ee30a99bb02..49b79bbac07 100644 --- a/modules/swagger-codegen/src/main/resources/Javascript/model.mustache +++ b/modules/swagger-codegen/src/main/resources/Javascript/model.mustache @@ -23,7 +23,6 @@ * {{description}} **/{{/description}} var {{classname}} = function {{classname}}({{#mandatory}}{{this}}{{^-last}}, {{/-last}}{{/mandatory}}) { {{#parent}}/* extends {{{parent}}}*/{{/parent}} - var self = this; {{#vars}} /**{{#description}} * {{{description}}}{{/description}} @@ -32,43 +31,43 @@ * minimum: {{minimum}}{{/minimum}}{{#maximum}} * maximum: {{maximum}}{{/maximum}} **/ - self['{{baseName}}'] = {{#required}}{{name}}{{/required}}{{^required}}{{{defaultValue}}}{{/required}}; + this['{{baseName}}'] = {{#required}}{{name}}{{/required}}{{^required}}{{{defaultValue}}}{{/required}}; {{/vars}} + }; - self.constructFromObject = function(data) { - if (!data) { - return this; - } - {{#vars}} - self['{{baseName}}']{{{defaultValueWithParam}}} - {{/vars}} + {{classname}}.prototype.constructFromObject = function(data) { + if (!data) { return this; } - {{#vars}} - /**{{#description}} - * get {{{description}}}{{/description}}{{#minimum}} - * minimum: {{minimum}}{{/minimum}}{{#maximum}} - * maximum: {{maximum}}{{/maximum}} - * @return {{=<% %>=}}{<% datatypeWithEnum %>}<%={{ }}=%> - **/ - self.{{getter}} = function() { - return self['{{baseName}}']; - } - - /**{{#description}} - * set {{{description}}}{{/description}} - * @param {{=<% %>=}}{<% datatypeWithEnum %>}<%={{ }}=%> {{name}} - **/ - self.{{setter}} = function({{name}}) { - self['{{baseName}}'] = {{name}}; - } + this['{{baseName}}']{{{defaultValueWithParam}}} {{/vars}} + return this; + } - self.toJson = function() { - return JSON.stringify(self); - } - }; + {{#vars}} + /**{{#description}} + * get {{{description}}}{{/description}}{{#minimum}} + * minimum: {{minimum}}{{/minimum}}{{#maximum}} + * maximum: {{maximum}}{{/maximum}} + * @return {{=<% %>=}}{<% datatypeWithEnum %>}<%={{ }}=%> + **/ + {{classname}}.prototype.{{getter}} = function() { + return this['{{baseName}}']; + } + + /**{{#description}} + * set {{{description}}}{{/description}} + * @param {{=<% %>=}}{<% datatypeWithEnum %>}<%={{ }}=%> {{name}} + **/ + {{classname}}.prototype.{{setter}} = function({{name}}) { + this['{{baseName}}'] = {{name}}; + } + {{/vars}} + + {{classname}}.prototype.toJson = function() { + return JSON.stringify(this); + } if (module) { module.{{classname}} = {{classname}}; From d52ebdf684ac3b9b34ded20462ad09a4dcf0a834 Mon Sep 17 00:00:00 2001 From: xhh Date: Sat, 6 Feb 2016 16:24:59 +0800 Subject: [PATCH 075/189] JavaScript client: Add authentications support Closes #1952 --- .../resources/Javascript/ApiClient.mustache | 51 ++++- .../main/resources/Javascript/api.mustache | 3 +- .../resources/Javascript/package.mustache | 1 + .../client/petstore/javascript/package.json | 1 + .../petstore/javascript/src/ApiClient.js | 48 +++- .../petstore/javascript/src/api/PetApi.js | 30 ++- .../petstore/javascript/src/api/StoreApi.js | 12 +- .../petstore/javascript/src/api/UserApi.js | 24 +- .../petstore/javascript/test/ApiClientTest.js | 215 +++++++++++++++++- .../petstore/javascript/test/run_tests.html | 1 + 10 files changed, 357 insertions(+), 29 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache index b301da5c301..adf47051793 100644 --- a/modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache +++ b/modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache @@ -20,7 +20,13 @@ * The base path to put in front of every API call's (relative) path. */ this.basePath = '{{basePath}}'.replace(/\/+$/, ''); - +{{=< >=}} + this.authentications = {<#authMethods><#isBasic> + '': {type: 'basic'}<#isApiKey> + '': {type: 'apiKey', in: <#isKeyInHeader>'header'<^isKeyInHeader>'query', name: ''}<#isOAuth> + '': {type: 'oauth2'}<#hasMore>, + }; +<={{ }}=> /** * The default HTTP headers to be included for all API calls. */ @@ -158,6 +164,42 @@ } }; + ApiClient.prototype.applyAuthToRequest = function applyAuthToRequest(request, authNames) { + var _this = this; + authNames.forEach(function(authName) { + var auth = _this.authentications[authName]; + switch (auth.type) { + case 'basic': + if (auth.username || auth.password) { + request.auth(auth.username || '', auth.password || ''); + } + break; + case 'apiKey': + if (auth.apiKey) { + var data = {}; + if (auth.apiKeyPrefix) { + data[auth.name] = auth.apiKeyPrefix + ' ' + auth.apiKey; + } else { + data[auth.name] = auth.apiKey; + } + if (auth.in === 'header') { + request.set(data); + } else { + request.query(data); + } + } + break; + case 'oauth2': + if (auth.accessToken) { + request.set({'Authorization': 'Bearer ' + auth.accessToken}); + } + break; + default: + throw new Error('Unknown authentication type: ' + auth.type); + } + }); + }; + ApiClient.prototype.deserialize = function deserialize(response, returnType) { if (response == null || returnType == null) { return null; @@ -172,12 +214,15 @@ }; ApiClient.prototype.callApi = function callApi(path, httpMethod, pathParams, - queryParams, headerParams, formParams, bodyParam, contentTypes, accepts, - returnType, callback) { + queryParams, headerParams, formParams, bodyParam, authNames, contentTypes, + accepts, returnType, callback) { var _this = this; var url = this.buildUrl(path, pathParams); var request = superagent(httpMethod, url); + // apply authentications + this.applyAuthToRequest(request, authNames); + // set query parameters request.query(this.normalizeParams(queryParams)); diff --git a/modules/swagger-codegen/src/main/resources/Javascript/api.mustache b/modules/swagger-codegen/src/main/resources/Javascript/api.mustache index 57c3192400f..82d660012db 100644 --- a/modules/swagger-codegen/src/main/resources/Javascript/api.mustache +++ b/modules/swagger-codegen/src/main/resources/Javascript/api.mustache @@ -51,6 +51,7 @@ '': <#collectionFormat>this.buildCollectionParam(, '')<^collectionFormat><#hasMore>, }; + var authNames = [<#authMethods>''<#hasMore>, ]; var contentTypes = [<#consumes>''<#hasMore>, ]; var accepts = [<#produces>''<#hasMore>, ]; var returnType = <#returnType><&returnType><^returnType>null; @@ -58,7 +59,7 @@ return this.apiClient.callApi( '<&path>', '', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType, callback + authNames, contentTypes, accepts, returnType, callback ); <={{ }}=> } diff --git a/modules/swagger-codegen/src/main/resources/Javascript/package.mustache b/modules/swagger-codegen/src/main/resources/Javascript/package.mustache index 8710d9d2be6..55c33e3f280 100644 --- a/modules/swagger-codegen/src/main/resources/Javascript/package.mustache +++ b/modules/swagger-codegen/src/main/resources/Javascript/package.mustache @@ -12,6 +12,7 @@ }, "devDependencies": { "mocha": "~2.3.4", + "sinon": "1.17.3", "expect.js": "~0.3.1" } } diff --git a/samples/client/petstore/javascript/package.json b/samples/client/petstore/javascript/package.json index 1fdf78cf217..72a48ac71de 100644 --- a/samples/client/petstore/javascript/package.json +++ b/samples/client/petstore/javascript/package.json @@ -12,6 +12,7 @@ }, "devDependencies": { "mocha": "~2.3.4", + "sinon": "1.17.3", "expect.js": "~0.3.1" } } diff --git a/samples/client/petstore/javascript/src/ApiClient.js b/samples/client/petstore/javascript/src/ApiClient.js index 9968b2dfc88..b7f20a503cb 100644 --- a/samples/client/petstore/javascript/src/ApiClient.js +++ b/samples/client/petstore/javascript/src/ApiClient.js @@ -21,6 +21,11 @@ */ this.basePath = 'http://petstore.swagger.io/v2'.replace(/\/+$/, ''); + this.authentications = { + 'petstore_auth': {type: 'oauth2'}, + 'api_key': {type: 'apiKey', in: 'header', name: 'api_key'} + }; + /** * The default HTTP headers to be included for all API calls. */ @@ -158,6 +163,42 @@ } }; + ApiClient.prototype.applyAuthToRequest = function applyAuthToRequest(request, authNames) { + var _this = this; + authNames.forEach(function(authName) { + var auth = _this.authentications[authName]; + switch (auth.type) { + case 'basic': + if (auth.username || auth.password) { + request.auth(auth.username || '', auth.password || ''); + } + break; + case 'apiKey': + if (auth.apiKey) { + var data = {}; + if (auth.apiKeyPrefix) { + data[auth.name] = auth.apiKeyPrefix + ' ' + auth.apiKey; + } else { + data[auth.name] = auth.apiKey; + } + if (auth.in === 'header') { + request.set(data); + } else { + request.query(data); + } + } + break; + case 'oauth2': + if (auth.accessToken) { + request.set({'Authorization': 'Bearer ' + auth.accessToken}); + } + break; + default: + throw new Error('Unknown authentication type: ' + auth.type); + } + }); + }; + ApiClient.prototype.deserialize = function deserialize(response, returnType) { if (response == null || returnType == null) { return null; @@ -172,12 +213,15 @@ }; ApiClient.prototype.callApi = function callApi(path, httpMethod, pathParams, - queryParams, headerParams, formParams, bodyParam, contentTypes, accepts, - returnType, callback) { + queryParams, headerParams, formParams, bodyParam, authNames, contentTypes, + accepts, returnType, callback) { var _this = this; var url = this.buildUrl(path, pathParams); var request = superagent(httpMethod, url); + // apply authentications + this.applyAuthToRequest(request, authNames); + // set query parameters request.query(this.normalizeParams(queryParams)); diff --git a/samples/client/petstore/javascript/src/api/PetApi.js b/samples/client/petstore/javascript/src/api/PetApi.js index 91e330eab92..5843f850b4d 100644 --- a/samples/client/petstore/javascript/src/api/PetApi.js +++ b/samples/client/petstore/javascript/src/api/PetApi.js @@ -41,6 +41,7 @@ var formParams = { }; + var authNames = ['petstore_auth']; var contentTypes = ['application/json', 'application/xml']; var accepts = ['application/json', 'application/xml']; var returnType = null; @@ -48,7 +49,7 @@ return this.apiClient.callApi( '/pet', 'PUT', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType, callback + authNames, contentTypes, accepts, returnType, callback ); } @@ -73,6 +74,7 @@ var formParams = { }; + var authNames = ['petstore_auth']; var contentTypes = ['application/json', 'application/xml']; var accepts = ['application/json', 'application/xml']; var returnType = null; @@ -80,7 +82,7 @@ return this.apiClient.callApi( '/pet', 'POST', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType, callback + authNames, contentTypes, accepts, returnType, callback ); } @@ -107,6 +109,7 @@ var formParams = { }; + var authNames = ['petstore_auth']; var contentTypes = []; var accepts = ['application/json', 'application/xml']; var returnType = [Pet]; @@ -114,7 +117,7 @@ return this.apiClient.callApi( '/pet/findByStatus', 'GET', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType, callback + authNames, contentTypes, accepts, returnType, callback ); } @@ -141,6 +144,7 @@ var formParams = { }; + var authNames = ['petstore_auth']; var contentTypes = []; var accepts = ['application/json', 'application/xml']; var returnType = [Pet]; @@ -148,7 +152,7 @@ return this.apiClient.callApi( '/pet/findByTags', 'GET', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType, callback + authNames, contentTypes, accepts, returnType, callback ); } @@ -180,6 +184,7 @@ var formParams = { }; + var authNames = ['api_key']; var contentTypes = []; var accepts = ['application/json', 'application/xml']; var returnType = Pet; @@ -187,7 +192,7 @@ return this.apiClient.callApi( '/pet/{petId}', 'GET', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType, callback + authNames, contentTypes, accepts, returnType, callback ); } @@ -222,6 +227,7 @@ 'status': status }; + var authNames = ['petstore_auth']; var contentTypes = ['application/x-www-form-urlencoded']; var accepts = ['application/json', 'application/xml']; var returnType = null; @@ -229,7 +235,7 @@ return this.apiClient.callApi( '/pet/{petId}', 'POST', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType, callback + authNames, contentTypes, accepts, returnType, callback ); } @@ -262,6 +268,7 @@ var formParams = { }; + var authNames = ['petstore_auth']; var contentTypes = []; var accepts = ['application/json', 'application/xml']; var returnType = null; @@ -269,7 +276,7 @@ return this.apiClient.callApi( '/pet/{petId}', 'DELETE', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType, callback + authNames, contentTypes, accepts, returnType, callback ); } @@ -304,6 +311,7 @@ 'file': file }; + var authNames = ['petstore_auth']; var contentTypes = ['multipart/form-data']; var accepts = ['application/json', 'application/xml']; var returnType = null; @@ -311,7 +319,7 @@ return this.apiClient.callApi( '/pet/{petId}/uploadImage', 'POST', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType, callback + authNames, contentTypes, accepts, returnType, callback ); } @@ -343,6 +351,7 @@ var formParams = { }; + var authNames = ['api_key']; var contentTypes = []; var accepts = ['application/json', 'application/xml']; var returnType = 'String'; @@ -350,7 +359,7 @@ return this.apiClient.callApi( '/pet/{petId}?testing_byte_array=true', 'GET', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType, callback + authNames, contentTypes, accepts, returnType, callback ); } @@ -375,6 +384,7 @@ var formParams = { }; + var authNames = ['petstore_auth']; var contentTypes = ['application/json', 'application/xml']; var accepts = ['application/json', 'application/xml']; var returnType = null; @@ -382,7 +392,7 @@ return this.apiClient.callApi( '/pet?testing_byte_array=true', 'POST', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType, callback + authNames, contentTypes, accepts, returnType, callback ); } diff --git a/samples/client/petstore/javascript/src/api/StoreApi.js b/samples/client/petstore/javascript/src/api/StoreApi.js index 632d5b83631..15fc97eac25 100644 --- a/samples/client/petstore/javascript/src/api/StoreApi.js +++ b/samples/client/petstore/javascript/src/api/StoreApi.js @@ -41,6 +41,7 @@ var formParams = { }; + var authNames = ['api_key']; var contentTypes = []; var accepts = ['application/json', 'application/xml']; var returnType = {'String': 'Integer'}; @@ -48,7 +49,7 @@ return this.apiClient.callApi( '/store/inventory', 'GET', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType, callback + authNames, contentTypes, accepts, returnType, callback ); } @@ -74,6 +75,7 @@ var formParams = { }; + var authNames = []; var contentTypes = []; var accepts = ['application/json', 'application/xml']; var returnType = Order; @@ -81,7 +83,7 @@ return this.apiClient.callApi( '/store/order', 'POST', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType, callback + authNames, contentTypes, accepts, returnType, callback ); } @@ -113,6 +115,7 @@ var formParams = { }; + var authNames = []; var contentTypes = []; var accepts = ['application/json', 'application/xml']; var returnType = Order; @@ -120,7 +123,7 @@ return this.apiClient.callApi( '/store/order/{orderId}', 'GET', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType, callback + authNames, contentTypes, accepts, returnType, callback ); } @@ -151,6 +154,7 @@ var formParams = { }; + var authNames = []; var contentTypes = []; var accepts = ['application/json', 'application/xml']; var returnType = null; @@ -158,7 +162,7 @@ return this.apiClient.callApi( '/store/order/{orderId}', 'DELETE', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType, callback + authNames, contentTypes, accepts, returnType, callback ); } diff --git a/samples/client/petstore/javascript/src/api/UserApi.js b/samples/client/petstore/javascript/src/api/UserApi.js index 2ab1f1f3abb..cc9cd928f11 100644 --- a/samples/client/petstore/javascript/src/api/UserApi.js +++ b/samples/client/petstore/javascript/src/api/UserApi.js @@ -41,6 +41,7 @@ var formParams = { }; + var authNames = []; var contentTypes = []; var accepts = ['application/json', 'application/xml']; var returnType = null; @@ -48,7 +49,7 @@ return this.apiClient.callApi( '/user', 'POST', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType, callback + authNames, contentTypes, accepts, returnType, callback ); } @@ -73,6 +74,7 @@ var formParams = { }; + var authNames = []; var contentTypes = []; var accepts = ['application/json', 'application/xml']; var returnType = null; @@ -80,7 +82,7 @@ return this.apiClient.callApi( '/user/createWithArray', 'POST', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType, callback + authNames, contentTypes, accepts, returnType, callback ); } @@ -105,6 +107,7 @@ var formParams = { }; + var authNames = []; var contentTypes = []; var accepts = ['application/json', 'application/xml']; var returnType = null; @@ -112,7 +115,7 @@ return this.apiClient.callApi( '/user/createWithList', 'POST', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType, callback + authNames, contentTypes, accepts, returnType, callback ); } @@ -141,6 +144,7 @@ var formParams = { }; + var authNames = []; var contentTypes = []; var accepts = ['application/json', 'application/xml']; var returnType = 'String'; @@ -148,7 +152,7 @@ return this.apiClient.callApi( '/user/login', 'GET', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType, callback + authNames, contentTypes, accepts, returnType, callback ); } @@ -172,6 +176,7 @@ var formParams = { }; + var authNames = []; var contentTypes = []; var accepts = ['application/json', 'application/xml']; var returnType = null; @@ -179,7 +184,7 @@ return this.apiClient.callApi( '/user/logout', 'GET', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType, callback + authNames, contentTypes, accepts, returnType, callback ); } @@ -211,6 +216,7 @@ var formParams = { }; + var authNames = []; var contentTypes = []; var accepts = ['application/json', 'application/xml']; var returnType = User; @@ -218,7 +224,7 @@ return this.apiClient.callApi( '/user/{username}', 'GET', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType, callback + authNames, contentTypes, accepts, returnType, callback ); } @@ -250,6 +256,7 @@ var formParams = { }; + var authNames = []; var contentTypes = []; var accepts = ['application/json', 'application/xml']; var returnType = null; @@ -257,7 +264,7 @@ return this.apiClient.callApi( '/user/{username}', 'PUT', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType, callback + authNames, contentTypes, accepts, returnType, callback ); } @@ -288,6 +295,7 @@ var formParams = { }; + var authNames = []; var contentTypes = []; var accepts = ['application/json', 'application/xml']; var returnType = null; @@ -295,7 +303,7 @@ return this.apiClient.callApi( '/user/{username}', 'DELETE', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType, callback + authNames, contentTypes, accepts, returnType, callback ); } diff --git a/samples/client/petstore/javascript/test/ApiClientTest.js b/samples/client/petstore/javascript/test/ApiClientTest.js index a7714e6a593..58444eaef2f 100644 --- a/samples/client/petstore/javascript/test/ApiClientTest.js +++ b/samples/client/petstore/javascript/test/ApiClientTest.js @@ -1,6 +1,7 @@ if (typeof module === 'object' && module.exports) { var expect = require('expect.js'); var SwaggerPetstore = require('../src/index'); + var sinon = require('sinon'); } var apiClient = SwaggerPetstore.ApiClient.default; @@ -10,6 +11,10 @@ describe('ApiClient', function() { it('should have correct default values with the default API client', function() { expect(apiClient).to.be.ok(); expect(apiClient.basePath).to.be('http://petstore.swagger.io/v2'); + expect(apiClient.authentications).to.eql({ + 'petstore_auth': {type: 'oauth2'}, + 'api_key': {type: 'apiKey', in: 'header', name: 'api_key'} + }); }); it('should have correct default values with new API client and can customize it', function() { @@ -99,6 +104,212 @@ describe('ApiClient', function() { }); }); + describe('#applyAuthToRequest', function() { + var req, newClient; + + beforeEach(function() { + req = { + auth: function() {}, + set: function() {}, + query: function() {} + }; + sinon.stub(req, 'auth'); + sinon.stub(req, 'set'); + sinon.stub(req, 'query'); + newClient = new SwaggerPetstore.ApiClient(); + }); + + describe('basic', function() { + var authName = 'testBasicAuth'; + var authNames = [authName]; + var auth; + + beforeEach(function() { + newClient.authentications[authName] = {type: 'basic'}; + auth = newClient.authentications[authName]; + }); + + it('sets auth header with username and password set', function() { + auth.username = 'user'; + auth.password = 'pass'; + newClient.applyAuthToRequest(req, authNames); + sinon.assert.calledOnce(req.auth); + // 'dXNlcjpwYXNz' is base64-encoded string of 'user:pass' + sinon.assert.calledWithMatch(req.auth, 'user', 'pass'); + sinon.assert.notCalled(req.set); + sinon.assert.notCalled(req.query); + }); + + it('sets header with only username set', function() { + auth.username = 'user'; + newClient.applyAuthToRequest(req, authNames); + sinon.assert.calledOnce(req.auth); + // 'dXNlcjo=' is base64-encoded string of 'user:' + sinon.assert.calledWithMatch(req.auth, 'user', ''); + sinon.assert.notCalled(req.set); + sinon.assert.notCalled(req.query); + }); + + it('sets header with only password set', function() { + auth.password = 'pass'; + newClient.applyAuthToRequest(req, authNames); + sinon.assert.calledOnce(req.auth); + // 'OnBhc3M=' is base64-encoded string of ':pass' + sinon.assert.calledWithMatch(req.auth, '', 'pass'); + sinon.assert.notCalled(req.set); + sinon.assert.notCalled(req.query); + }); + + it('does not set header when username and password are not set', function() { + newClient.applyAuthToRequest(req, authNames); + sinon.assert.notCalled(req.auth); + sinon.assert.notCalled(req.set); + sinon.assert.notCalled(req.query); + }); + }); + + describe('apiKey', function() { + var authName = 'testApiKey'; + var authNames = [authName]; + var auth; + + beforeEach(function() { + newClient.authentications[authName] = {type: 'apiKey', name: 'api_key'}; + auth = newClient.authentications[authName]; + }); + + it('sets api key in header', function() { + auth.in = 'header'; + auth.apiKey = 'my-api-key'; + newClient.applyAuthToRequest(req, authNames); + sinon.assert.calledOnce(req.set); + sinon.assert.calledWithMatch(req.set, {'api_key': 'my-api-key'}); + sinon.assert.notCalled(req.auth); + sinon.assert.notCalled(req.query); + }); + + it('sets api key in query', function() { + auth.in = 'query'; + auth.apiKey = 'my-api-key'; + newClient.applyAuthToRequest(req, authNames); + sinon.assert.calledOnce(req.query); + sinon.assert.calledWithMatch(req.query, {'api_key': 'my-api-key'}); + sinon.assert.notCalled(req.auth); + sinon.assert.notCalled(req.set); + }); + + it('sets api key in header with prefix', function() { + auth.in = 'header'; + auth.apiKey = 'my-api-key'; + auth.apiKeyPrefix = 'Key'; + newClient.applyAuthToRequest(req, authNames); + sinon.assert.calledOnce(req.set); + sinon.assert.calledWithMatch(req.set, {'api_key': 'Key my-api-key'}); + sinon.assert.notCalled(req.auth); + sinon.assert.notCalled(req.query); + }); + + it('works when api key is not set', function() { + auth.in = 'query'; + auth.apiKey = null; + newClient.applyAuthToRequest(req, authNames); + sinon.assert.notCalled(req.query); + sinon.assert.notCalled(req.auth); + sinon.assert.notCalled(req.set); + }); + }); + + describe('oauth2', function() { + var authName = 'testOAuth2'; + var authNames = [authName]; + var auth; + + beforeEach(function() { + newClient.authentications[authName] = {type: 'oauth2'}; + auth = newClient.authentications[authName]; + }); + + it('sets access token in header', function() { + auth.accessToken = 'my-access-token'; + newClient.applyAuthToRequest(req, authNames); + sinon.assert.calledOnce(req.set); + sinon.assert.calledWithMatch(req.set, {'Authorization': 'Bearer my-access-token'}); + sinon.assert.notCalled(req.auth); + sinon.assert.notCalled(req.query); + }); + + it('works when access token is not set', function() { + auth.accessToken = null; + newClient.applyAuthToRequest(req, authNames); + sinon.assert.notCalled(req.query); + sinon.assert.notCalled(req.auth); + sinon.assert.notCalled(req.set); + }); + }); + + describe('apiKey and oauth2', function() { + var apiKeyAuthName = 'testApiKey'; + var oauth2Name = 'testOAuth2'; + var authNames = [apiKeyAuthName, oauth2Name]; + var apiKeyAuth, oauth2; + + beforeEach(function() { + newClient.authentications[apiKeyAuthName] = {type: 'apiKey', name: 'api_key', in: 'query'}; + newClient.authentications[oauth2Name] = {type: 'oauth2'}; + apiKeyAuth = newClient.authentications[apiKeyAuthName]; + oauth2 = newClient.authentications[oauth2Name]; + }); + + it('works when setting both api key and access token', function() { + apiKeyAuth.apiKey = 'my-api-key'; + oauth2.accessToken = 'my-access-token'; + newClient.applyAuthToRequest(req, authNames); + sinon.assert.calledOnce(req.query); + sinon.assert.calledWithMatch(req.query, {'api_key': 'my-api-key'}); + sinon.assert.calledOnce(req.set); + sinon.assert.calledWithMatch(req.set, {'Authorization': 'Bearer my-access-token'}); + sinon.assert.notCalled(req.auth); + }); + + it('works when setting only api key', function() { + apiKeyAuth.apiKey = 'my-api-key'; + oauth2.accessToken = null; + newClient.applyAuthToRequest(req, authNames); + sinon.assert.calledOnce(req.query); + sinon.assert.calledWithMatch(req.query, {'api_key': 'my-api-key'}); + sinon.assert.notCalled(req.set); + sinon.assert.notCalled(req.auth); + }); + + it('works when neither api key nor access token is set', function() { + apiKeyAuth.apiKey = null; + oauth2.accessToken = null; + newClient.applyAuthToRequest(req, authNames); + sinon.assert.notCalled(req.query); + sinon.assert.notCalled(req.auth); + sinon.assert.notCalled(req.set); + }); + }); + + describe('unknown type', function() { + var authName = 'unknown'; + var authNames = [authName]; + + beforeEach(function() { + newClient.authentications[authName] = {type: 'UNKNOWN'}; + }); + + it('throws error for unknown auth type', function() { + expect(function() { + newClient.applyAuthToRequest(req, authNames); + }).to.throwError(); + sinon.assert.notCalled(req.set); + sinon.assert.notCalled(req.auth); + sinon.assert.notCalled(req.query); + }); + }); + }); + describe('#defaultHeaders', function() { it('should initialize default headers to be an empty object', function() { expect(apiClient.defaultHeaders).to.eql({}); @@ -143,10 +354,12 @@ function makeDumbRequest(apiClient, opts) { var headerParams = opts.headerParams || {}; var formParams = opts.formParams || {}; var bodyParam = opts.bodyParam; + var authNames = []; var contentTypes = opts.contentTypes || []; var accepts = opts.accepts || []; var callback = opts.callback; return apiClient.callApi(path, httpMethod, pathParams, queryParams, - headerParams, formParams, bodyParam, contentTypes, accepts, callback + headerParams, formParams, bodyParam, authNames, contentTypes, accepts, + callback ); } diff --git a/samples/client/petstore/javascript/test/run_tests.html b/samples/client/petstore/javascript/test/run_tests.html index 2916234bcf3..2f3e3f1e33a 100644 --- a/samples/client/petstore/javascript/test/run_tests.html +++ b/samples/client/petstore/javascript/test/run_tests.html @@ -9,6 +9,7 @@ + - + + From 9f78b3cf9cad6e542beb7df4eedf8971a020945d Mon Sep 17 00:00:00 2001 From: wing328 Date: Sun, 7 Feb 2016 16:16:06 +0800 Subject: [PATCH 078/189] fix local java test using fully qualified name --- .../default/src/test/java/io/swagger/PetstoreProfiling.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/client/petstore/java/default/src/test/java/io/swagger/PetstoreProfiling.java b/samples/client/petstore/java/default/src/test/java/io/swagger/PetstoreProfiling.java index ab2ba5d71bf..0c5ef6f1eda 100644 --- a/samples/client/petstore/java/default/src/test/java/io/swagger/PetstoreProfiling.java +++ b/samples/client/petstore/java/default/src/test/java/io/swagger/PetstoreProfiling.java @@ -85,7 +85,7 @@ public class PetstoreProfiling { private void writeResultsToFile(List> results) { try { - File file = new File(outputFile); + java.io.File file = new java.io.File(outputFile); PrintWriter writer = new PrintWriter(file); String command = "mvn compile test-compile exec:java -Dexec.classpathScope=test -Dexec.mainClass=\"io.swagger.PetstoreProfiling\""; writer.println("# To run the profiling:"); From ab39eff8a1e79f4c6c18e808491566e229a55fa4 Mon Sep 17 00:00:00 2001 From: Matan Goldman Date: Sun, 7 Feb 2016 13:11:28 +0200 Subject: [PATCH 079/189] Add additionalProperties handling in python code genrator by adding dictionary handling in model's to_dict() method --- .../src/main/resources/python/model.mustache | 9 +++++++-- .../petstore/python/swagger_client/models/category.py | 9 +++++++-- .../petstore/python/swagger_client/models/order.py | 9 +++++++-- .../client/petstore/python/swagger_client/models/pet.py | 9 +++++++-- .../client/petstore/python/swagger_client/models/tag.py | 9 +++++++-- .../client/petstore/python/swagger_client/models/user.py | 9 +++++++-- 6 files changed, 42 insertions(+), 12 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/python/model.mustache b/modules/swagger-codegen/src/main/resources/python/model.mustache index 105eefec095..3669a4750b9 100644 --- a/modules/swagger-codegen/src/main/resources/python/model.mustache +++ b/modules/swagger-codegen/src/main/resources/python/model.mustache @@ -95,6 +95,11 @@ class {{classname}}(object): lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value )) + elif isinstance(value, dict): + result[attr] = dict(map( + lambda (k, v): (k, v.to_dict()) if hasattr(v, "to_dict") else (k, v), + value.iteritems() + )) elif hasattr(value, "to_dict"): result[attr] = value.to_dict() else: @@ -114,14 +119,14 @@ class {{classname}}(object): """ return self.to_str() - def __eq__(self, other): + def __eq__(self, other): """ Returns true if both objects are equal """ return self.__dict__ == other.__dict__ def __ne__(self, other): - """ + """ Returns true if both objects are not equal """ return not self == other diff --git a/samples/client/petstore/python/swagger_client/models/category.py b/samples/client/petstore/python/swagger_client/models/category.py index d5156eee4ff..28257570fec 100644 --- a/samples/client/petstore/python/swagger_client/models/category.py +++ b/samples/client/petstore/python/swagger_client/models/category.py @@ -106,6 +106,11 @@ class Category(object): lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value )) + elif isinstance(value, dict): + result[attr] = dict(map( + lambda (k, v): (k, v.to_dict()) if hasattr(v, "to_dict") else (k, v), + value.iteritems() + )) elif hasattr(value, "to_dict"): result[attr] = value.to_dict() else: @@ -125,14 +130,14 @@ class Category(object): """ return self.to_str() - def __eq__(self, other): + def __eq__(self, other): """ Returns true if both objects are equal """ return self.__dict__ == other.__dict__ def __ne__(self, other): - """ + """ Returns true if both objects are not equal """ return not self == other diff --git a/samples/client/petstore/python/swagger_client/models/order.py b/samples/client/petstore/python/swagger_client/models/order.py index 93126d98a86..2b5ab1020fe 100644 --- a/samples/client/petstore/python/swagger_client/models/order.py +++ b/samples/client/petstore/python/swagger_client/models/order.py @@ -212,6 +212,11 @@ class Order(object): lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value )) + elif isinstance(value, dict): + result[attr] = dict(map( + lambda (k, v): (k, v.to_dict()) if hasattr(v, "to_dict") else (k, v), + value.iteritems() + )) elif hasattr(value, "to_dict"): result[attr] = value.to_dict() else: @@ -231,14 +236,14 @@ class Order(object): """ return self.to_str() - def __eq__(self, other): + def __eq__(self, other): """ Returns true if both objects are equal """ return self.__dict__ == other.__dict__ def __ne__(self, other): - """ + """ Returns true if both objects are not equal """ return not self == other diff --git a/samples/client/petstore/python/swagger_client/models/pet.py b/samples/client/petstore/python/swagger_client/models/pet.py index d7c425e3e0e..e18c803b98d 100644 --- a/samples/client/petstore/python/swagger_client/models/pet.py +++ b/samples/client/petstore/python/swagger_client/models/pet.py @@ -212,6 +212,11 @@ class Pet(object): lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value )) + elif isinstance(value, dict): + result[attr] = dict(map( + lambda (k, v): (k, v.to_dict()) if hasattr(v, "to_dict") else (k, v), + value.iteritems() + )) elif hasattr(value, "to_dict"): result[attr] = value.to_dict() else: @@ -231,14 +236,14 @@ class Pet(object): """ return self.to_str() - def __eq__(self, other): + def __eq__(self, other): """ Returns true if both objects are equal """ return self.__dict__ == other.__dict__ def __ne__(self, other): - """ + """ Returns true if both objects are not equal """ return not self == other diff --git a/samples/client/petstore/python/swagger_client/models/tag.py b/samples/client/petstore/python/swagger_client/models/tag.py index 81d27fa5e63..9de614f24b3 100644 --- a/samples/client/petstore/python/swagger_client/models/tag.py +++ b/samples/client/petstore/python/swagger_client/models/tag.py @@ -106,6 +106,11 @@ class Tag(object): lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value )) + elif isinstance(value, dict): + result[attr] = dict(map( + lambda (k, v): (k, v.to_dict()) if hasattr(v, "to_dict") else (k, v), + value.iteritems() + )) elif hasattr(value, "to_dict"): result[attr] = value.to_dict() else: @@ -125,14 +130,14 @@ class Tag(object): """ return self.to_str() - def __eq__(self, other): + def __eq__(self, other): """ Returns true if both objects are equal """ return self.__dict__ == other.__dict__ def __ne__(self, other): - """ + """ Returns true if both objects are not equal """ return not self == other diff --git a/samples/client/petstore/python/swagger_client/models/user.py b/samples/client/petstore/python/swagger_client/models/user.py index 6af36592c02..c862aa070b5 100644 --- a/samples/client/petstore/python/swagger_client/models/user.py +++ b/samples/client/petstore/python/swagger_client/models/user.py @@ -256,6 +256,11 @@ class User(object): lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value )) + elif isinstance(value, dict): + result[attr] = dict(map( + lambda (k, v): (k, v.to_dict()) if hasattr(v, "to_dict") else (k, v), + value.iteritems() + )) elif hasattr(value, "to_dict"): result[attr] = value.to_dict() else: @@ -275,14 +280,14 @@ class User(object): """ return self.to_str() - def __eq__(self, other): + def __eq__(self, other): """ Returns true if both objects are equal """ return self.__dict__ == other.__dict__ def __ne__(self, other): - """ + """ Returns true if both objects are not equal """ return not self == other From ec4c5502f147619a96d205d3397da1c94a25fca3 Mon Sep 17 00:00:00 2001 From: Matan Goldman Date: Sun, 7 Feb 2016 14:21:31 +0200 Subject: [PATCH 080/189] fix identation --- .../swagger-codegen/src/main/resources/python/model.mustache | 2 +- .../client/petstore/python/swagger_client/models/category.py | 2 +- samples/client/petstore/python/swagger_client/models/order.py | 2 +- samples/client/petstore/python/swagger_client/models/pet.py | 2 +- samples/client/petstore/python/swagger_client/models/tag.py | 2 +- samples/client/petstore/python/swagger_client/models/user.py | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/python/model.mustache b/modules/swagger-codegen/src/main/resources/python/model.mustache index 3669a4750b9..7807d300c9f 100644 --- a/modules/swagger-codegen/src/main/resources/python/model.mustache +++ b/modules/swagger-codegen/src/main/resources/python/model.mustache @@ -99,7 +99,7 @@ class {{classname}}(object): result[attr] = dict(map( lambda (k, v): (k, v.to_dict()) if hasattr(v, "to_dict") else (k, v), value.iteritems() - )) + )) elif hasattr(value, "to_dict"): result[attr] = value.to_dict() else: diff --git a/samples/client/petstore/python/swagger_client/models/category.py b/samples/client/petstore/python/swagger_client/models/category.py index 28257570fec..08fff86fbaa 100644 --- a/samples/client/petstore/python/swagger_client/models/category.py +++ b/samples/client/petstore/python/swagger_client/models/category.py @@ -110,7 +110,7 @@ class Category(object): result[attr] = dict(map( lambda (k, v): (k, v.to_dict()) if hasattr(v, "to_dict") else (k, v), value.iteritems() - )) + )) elif hasattr(value, "to_dict"): result[attr] = value.to_dict() else: diff --git a/samples/client/petstore/python/swagger_client/models/order.py b/samples/client/petstore/python/swagger_client/models/order.py index 2b5ab1020fe..ebf7c833a0b 100644 --- a/samples/client/petstore/python/swagger_client/models/order.py +++ b/samples/client/petstore/python/swagger_client/models/order.py @@ -216,7 +216,7 @@ class Order(object): result[attr] = dict(map( lambda (k, v): (k, v.to_dict()) if hasattr(v, "to_dict") else (k, v), value.iteritems() - )) + )) elif hasattr(value, "to_dict"): result[attr] = value.to_dict() else: diff --git a/samples/client/petstore/python/swagger_client/models/pet.py b/samples/client/petstore/python/swagger_client/models/pet.py index e18c803b98d..15eecdba32c 100644 --- a/samples/client/petstore/python/swagger_client/models/pet.py +++ b/samples/client/petstore/python/swagger_client/models/pet.py @@ -216,7 +216,7 @@ class Pet(object): result[attr] = dict(map( lambda (k, v): (k, v.to_dict()) if hasattr(v, "to_dict") else (k, v), value.iteritems() - )) + )) elif hasattr(value, "to_dict"): result[attr] = value.to_dict() else: diff --git a/samples/client/petstore/python/swagger_client/models/tag.py b/samples/client/petstore/python/swagger_client/models/tag.py index 9de614f24b3..9f8953d042e 100644 --- a/samples/client/petstore/python/swagger_client/models/tag.py +++ b/samples/client/petstore/python/swagger_client/models/tag.py @@ -110,7 +110,7 @@ class Tag(object): result[attr] = dict(map( lambda (k, v): (k, v.to_dict()) if hasattr(v, "to_dict") else (k, v), value.iteritems() - )) + )) elif hasattr(value, "to_dict"): result[attr] = value.to_dict() else: diff --git a/samples/client/petstore/python/swagger_client/models/user.py b/samples/client/petstore/python/swagger_client/models/user.py index c862aa070b5..e73c4a36eb9 100644 --- a/samples/client/petstore/python/swagger_client/models/user.py +++ b/samples/client/petstore/python/swagger_client/models/user.py @@ -260,7 +260,7 @@ class User(object): result[attr] = dict(map( lambda (k, v): (k, v.to_dict()) if hasattr(v, "to_dict") else (k, v), value.iteritems() - )) + )) elif hasattr(value, "to_dict"): result[attr] = value.to_dict() else: From a4a1372fc186a59e25e0afc34410b84bc9d48f1b Mon Sep 17 00:00:00 2001 From: Joseph Zuromski Date: Sun, 7 Feb 2016 05:59:23 -0800 Subject: [PATCH 081/189] update swift samples --- .gitignore | 2 + .../Classes/Swaggers/APIs/PetAPI.swift | 144 +++++++++--------- .../Classes/Swaggers/APIs/StoreAPI.swift | 72 ++++----- .../Classes/Swaggers/APIs/UserAPI.swift | 8 +- 4 files changed, 114 insertions(+), 112 deletions(-) diff --git a/.gitignore b/.gitignore index 2aaad73c13f..729d873a150 100644 --- a/.gitignore +++ b/.gitignore @@ -58,6 +58,8 @@ samples/client/petstore/silex/SwaggerServer/venodr/ samples/client/petstore/python/.projectile samples/client/petstore/python/.venv/ +samples/client/petstore/objc/SwaggerClientTests/SwaggerClient.xcodeproj/xcuserdata + .settings *.mustache~ diff --git a/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/APIs/PetAPI.swift b/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/APIs/PetAPI.swift index 5fc929a20a2..ea6c50e2549 100644 --- a/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/APIs/PetAPI.swift +++ b/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/APIs/PetAPI.swift @@ -71,20 +71,20 @@ extension PetstoreClientAPI { - OAuth: - type: oauth2 - name: petstore_auth - - examples: [{example=[ { - "tags" : [ { - "id" : 123456789, - "name" : "aeiou" - } ], + - examples: [{contentType=application/json, example=[ { + "photoUrls" : [ "aeiou" ], + "name" : "doggie", "id" : 123456789, "category" : { - "id" : 123456789, - "name" : "aeiou" + "name" : "aeiou", + "id" : 123456789 }, - "status" : "aeiou", - "name" : "doggie", - "photoUrls" : [ "aeiou" ] -} ], contentType=application/json}, {example= + "tags" : [ { + "name" : "aeiou", + "id" : 123456789 + } ], + "status" : "aeiou" +} ]}, {contentType=application/xml, example= 123456 doggie @@ -93,21 +93,21 @@ extension PetstoreClientAPI { string -, contentType=application/xml}] - - examples: [{example=[ { - "tags" : [ { - "id" : 123456789, - "name" : "aeiou" - } ], +}] + - examples: [{contentType=application/json, example=[ { + "photoUrls" : [ "aeiou" ], + "name" : "doggie", "id" : 123456789, "category" : { - "id" : 123456789, - "name" : "aeiou" + "name" : "aeiou", + "id" : 123456789 }, - "status" : "aeiou", - "name" : "doggie", - "photoUrls" : [ "aeiou" ] -} ], contentType=application/json}, {example= + "tags" : [ { + "name" : "aeiou", + "id" : 123456789 + } ], + "status" : "aeiou" +} ]}, {contentType=application/xml, example= 123456 doggie @@ -116,7 +116,7 @@ extension PetstoreClientAPI { string -, contentType=application/xml}] +}] - parameter status: (query) Status values that need to be considered for filter @@ -145,20 +145,20 @@ extension PetstoreClientAPI { - OAuth: - type: oauth2 - name: petstore_auth - - examples: [{example=[ { - "tags" : [ { - "id" : 123456789, - "name" : "aeiou" - } ], + - examples: [{contentType=application/json, example=[ { + "photoUrls" : [ "aeiou" ], + "name" : "doggie", "id" : 123456789, "category" : { - "id" : 123456789, - "name" : "aeiou" + "name" : "aeiou", + "id" : 123456789 }, - "status" : "aeiou", - "name" : "doggie", - "photoUrls" : [ "aeiou" ] -} ], contentType=application/json}, {example= + "tags" : [ { + "name" : "aeiou", + "id" : 123456789 + } ], + "status" : "aeiou" +} ]}, {contentType=application/xml, example= 123456 doggie @@ -167,21 +167,21 @@ extension PetstoreClientAPI { string -, contentType=application/xml}] - - examples: [{example=[ { - "tags" : [ { - "id" : 123456789, - "name" : "aeiou" - } ], +}] + - examples: [{contentType=application/json, example=[ { + "photoUrls" : [ "aeiou" ], + "name" : "doggie", "id" : 123456789, "category" : { - "id" : 123456789, - "name" : "aeiou" + "name" : "aeiou", + "id" : 123456789 }, - "status" : "aeiou", - "name" : "doggie", - "photoUrls" : [ "aeiou" ] -} ], contentType=application/json}, {example= + "tags" : [ { + "name" : "aeiou", + "id" : 123456789 + } ], + "status" : "aeiou" +} ]}, {contentType=application/xml, example= 123456 doggie @@ -190,7 +190,7 @@ extension PetstoreClientAPI { string -, contentType=application/xml}] +}] - parameter tags: (query) Tags to filter by @@ -219,20 +219,20 @@ extension PetstoreClientAPI { - API Key: - type: apiKey api_key - name: api_key - - examples: [{example={ - "tags" : [ { - "id" : 123456789, - "name" : "aeiou" - } ], + - examples: [{contentType=application/json, example={ + "photoUrls" : [ "aeiou" ], + "name" : "doggie", "id" : 123456789, "category" : { - "id" : 123456789, - "name" : "aeiou" + "name" : "aeiou", + "id" : 123456789 }, - "status" : "aeiou", - "name" : "doggie", - "photoUrls" : [ "aeiou" ] -}, contentType=application/json}, {example= + "tags" : [ { + "name" : "aeiou", + "id" : 123456789 + } ], + "status" : "aeiou" +}}, {contentType=application/xml, example= 123456 doggie @@ -241,21 +241,21 @@ extension PetstoreClientAPI { string -, contentType=application/xml}] - - examples: [{example={ - "tags" : [ { - "id" : 123456789, - "name" : "aeiou" - } ], +}] + - examples: [{contentType=application/json, example={ + "photoUrls" : [ "aeiou" ], + "name" : "doggie", "id" : 123456789, "category" : { - "id" : 123456789, - "name" : "aeiou" + "name" : "aeiou", + "id" : 123456789 }, - "status" : "aeiou", - "name" : "doggie", - "photoUrls" : [ "aeiou" ] -}, contentType=application/json}, {example= + "tags" : [ { + "name" : "aeiou", + "id" : 123456789 + } ], + "status" : "aeiou" +}}, {contentType=application/xml, example= 123456 doggie @@ -264,7 +264,7 @@ extension PetstoreClientAPI { string -, contentType=application/xml}] +}] - parameter petId: (path) ID of pet that needs to be fetched diff --git a/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/APIs/StoreAPI.swift b/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/APIs/StoreAPI.swift index 301bc80285d..0b81fea66d4 100644 --- a/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/APIs/StoreAPI.swift +++ b/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/APIs/StoreAPI.swift @@ -21,12 +21,12 @@ extension PetstoreClientAPI { - API Key: - type: apiKey api_key - name: api_key - - examples: [{example={ + - examples: [{contentType=application/json, example={ "key" : 123 -}, contentType=application/json}, {example=not implemented io.swagger.models.properties.MapProperty@d1e580af, contentType=application/xml}] - - examples: [{example={ +}}, {contentType=application/xml, example=not implemented io.swagger.models.properties.MapProperty@d1e580af}] + - examples: [{contentType=application/json, example={ "key" : 123 -}, contentType=application/json}, {example=not implemented io.swagger.models.properties.MapProperty@d1e580af, contentType=application/xml}] +}}, {contentType=application/xml, example=not implemented io.swagger.models.properties.MapProperty@d1e580af}] - returns: RequestBuilder<[String:Int]> */ @@ -48,36 +48,36 @@ extension PetstoreClientAPI { - POST /store/order - - - examples: [{example={ - "id" : 123456789, + - examples: [{contentType=application/json, example={ "petId" : 123456789, - "complete" : true, - "status" : "aeiou", "quantity" : 123, - "shipDate" : "2015-12-26T08:15:52.206+0000" -}, contentType=application/json}, {example= + "id" : 123456789, + "shipDate" : "2016-02-07T13:55:23.709+0000", + "complete" : true, + "status" : "aeiou" +}}, {contentType=application/xml, example= 123456 123456 0 - 2015-12-26T16:15:52.210Z + 2016-02-07T05:55:23.712Z string true -, contentType=application/xml}] - - examples: [{example={ - "id" : 123456789, +}] + - examples: [{contentType=application/json, example={ "petId" : 123456789, - "complete" : true, - "status" : "aeiou", "quantity" : 123, - "shipDate" : "2015-12-26T08:15:52.206+0000" -}, contentType=application/json}, {example= + "id" : 123456789, + "shipDate" : "2016-02-07T13:55:23.709+0000", + "complete" : true, + "status" : "aeiou" +}}, {contentType=application/xml, example= 123456 123456 0 - 2015-12-26T16:15:52.210Z + 2016-02-07T05:55:23.712Z string true -, contentType=application/xml}] +}] - parameter body: (body) order placed for purchasing the pet @@ -100,36 +100,36 @@ extension PetstoreClientAPI { - GET /store/order/{orderId} - For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions - - examples: [{example={ - "id" : 123456789, + - examples: [{contentType=application/json, example={ "petId" : 123456789, - "complete" : true, - "status" : "aeiou", "quantity" : 123, - "shipDate" : "2015-12-26T08:15:52.211+0000" -}, contentType=application/json}, {example= + "id" : 123456789, + "shipDate" : "2016-02-07T13:55:23.713+0000", + "complete" : true, + "status" : "aeiou" +}}, {contentType=application/xml, example= 123456 123456 0 - 2015-12-26T16:15:52.212Z + 2016-02-07T05:55:23.713Z string true -, contentType=application/xml}] - - examples: [{example={ - "id" : 123456789, +}] + - examples: [{contentType=application/json, example={ "petId" : 123456789, - "complete" : true, - "status" : "aeiou", "quantity" : 123, - "shipDate" : "2015-12-26T08:15:52.211+0000" -}, contentType=application/json}, {example= + "id" : 123456789, + "shipDate" : "2016-02-07T13:55:23.713+0000", + "complete" : true, + "status" : "aeiou" +}}, {contentType=application/xml, example= 123456 123456 0 - 2015-12-26T16:15:52.212Z + 2016-02-07T05:55:23.713Z string true -, contentType=application/xml}] +}] - parameter orderId: (path) ID of pet that needs to be fetched diff --git a/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/APIs/UserAPI.swift b/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/APIs/UserAPI.swift index 19cf534cea8..231e7f59228 100644 --- a/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/APIs/UserAPI.swift +++ b/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/APIs/UserAPI.swift @@ -84,8 +84,8 @@ extension PetstoreClientAPI { - GET /user/login - - - examples: [{example="aeiou", contentType=application/json}, {example=string, contentType=application/xml}] - - examples: [{example="aeiou", contentType=application/json}, {example=string, contentType=application/xml}] + - examples: [{contentType=application/json, example="aeiou"}, {contentType=application/xml, example=string}] + - examples: [{contentType=application/json, example="aeiou"}, {contentType=application/xml, example=string}] - parameter username: (query) The user name for login - parameter password: (query) The password for login in clear text @@ -134,7 +134,7 @@ extension PetstoreClientAPI { - GET /user/{username} - - - examples: [{example={ + - examples: [{contentType=application/json, example={ "id" : 1, "username" : "johnp", "firstName" : "John", @@ -143,7 +143,7 @@ extension PetstoreClientAPI { "password" : "-secret-", "phone" : "0123456789", "userStatus" : 0 -}, contentType=application/json}] +}}] - parameter username: (path) The name that needs to be fetched. Use user1 for testing. From 32d2a4d4cb9438d7d92b05f800653eb195066e73 Mon Sep 17 00:00:00 2001 From: Matan Goldman Date: Sun, 7 Feb 2016 16:23:12 +0200 Subject: [PATCH 082/189] fix python 3.4 compatabilty --- .../swagger-codegen/src/main/resources/python/model.mustache | 2 +- .../client/petstore/python/swagger_client/models/category.py | 2 +- samples/client/petstore/python/swagger_client/models/order.py | 2 +- samples/client/petstore/python/swagger_client/models/pet.py | 2 +- samples/client/petstore/python/swagger_client/models/tag.py | 2 +- samples/client/petstore/python/swagger_client/models/user.py | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/python/model.mustache b/modules/swagger-codegen/src/main/resources/python/model.mustache index 7807d300c9f..d7c3493d9da 100644 --- a/modules/swagger-codegen/src/main/resources/python/model.mustache +++ b/modules/swagger-codegen/src/main/resources/python/model.mustache @@ -97,7 +97,7 @@ class {{classname}}(object): )) elif isinstance(value, dict): result[attr] = dict(map( - lambda (k, v): (k, v.to_dict()) if hasattr(v, "to_dict") else (k, v), + lambda k, v: (k, v.to_dict()) if hasattr(v, "to_dict") else (k, v), value.iteritems() )) elif hasattr(value, "to_dict"): diff --git a/samples/client/petstore/python/swagger_client/models/category.py b/samples/client/petstore/python/swagger_client/models/category.py index 08fff86fbaa..59970e0bc3f 100644 --- a/samples/client/petstore/python/swagger_client/models/category.py +++ b/samples/client/petstore/python/swagger_client/models/category.py @@ -108,7 +108,7 @@ class Category(object): )) elif isinstance(value, dict): result[attr] = dict(map( - lambda (k, v): (k, v.to_dict()) if hasattr(v, "to_dict") else (k, v), + lambda k, v: (k, v.to_dict()) if hasattr(v, "to_dict") else (k, v), value.iteritems() )) elif hasattr(value, "to_dict"): diff --git a/samples/client/petstore/python/swagger_client/models/order.py b/samples/client/petstore/python/swagger_client/models/order.py index ebf7c833a0b..488f01f05ba 100644 --- a/samples/client/petstore/python/swagger_client/models/order.py +++ b/samples/client/petstore/python/swagger_client/models/order.py @@ -214,7 +214,7 @@ class Order(object): )) elif isinstance(value, dict): result[attr] = dict(map( - lambda (k, v): (k, v.to_dict()) if hasattr(v, "to_dict") else (k, v), + lambda k, v: (k, v.to_dict()) if hasattr(v, "to_dict") else (k, v), value.iteritems() )) elif hasattr(value, "to_dict"): diff --git a/samples/client/petstore/python/swagger_client/models/pet.py b/samples/client/petstore/python/swagger_client/models/pet.py index 15eecdba32c..94ca2249c0a 100644 --- a/samples/client/petstore/python/swagger_client/models/pet.py +++ b/samples/client/petstore/python/swagger_client/models/pet.py @@ -214,7 +214,7 @@ class Pet(object): )) elif isinstance(value, dict): result[attr] = dict(map( - lambda (k, v): (k, v.to_dict()) if hasattr(v, "to_dict") else (k, v), + lambda k, v: (k, v.to_dict()) if hasattr(v, "to_dict") else (k, v), value.iteritems() )) elif hasattr(value, "to_dict"): diff --git a/samples/client/petstore/python/swagger_client/models/tag.py b/samples/client/petstore/python/swagger_client/models/tag.py index 9f8953d042e..4deced8a351 100644 --- a/samples/client/petstore/python/swagger_client/models/tag.py +++ b/samples/client/petstore/python/swagger_client/models/tag.py @@ -108,7 +108,7 @@ class Tag(object): )) elif isinstance(value, dict): result[attr] = dict(map( - lambda (k, v): (k, v.to_dict()) if hasattr(v, "to_dict") else (k, v), + lambda k, v: (k, v.to_dict()) if hasattr(v, "to_dict") else (k, v), value.iteritems() )) elif hasattr(value, "to_dict"): diff --git a/samples/client/petstore/python/swagger_client/models/user.py b/samples/client/petstore/python/swagger_client/models/user.py index e73c4a36eb9..f8c1012842a 100644 --- a/samples/client/petstore/python/swagger_client/models/user.py +++ b/samples/client/petstore/python/swagger_client/models/user.py @@ -258,7 +258,7 @@ class User(object): )) elif isinstance(value, dict): result[attr] = dict(map( - lambda (k, v): (k, v.to_dict()) if hasattr(v, "to_dict") else (k, v), + lambda k, v: (k, v.to_dict()) if hasattr(v, "to_dict") else (k, v), value.iteritems() )) elif hasattr(value, "to_dict"): From 5ac630f7ff2f919e39384e955794145932ece4e4 Mon Sep 17 00:00:00 2001 From: Scott Williams Date: Thu, 4 Feb 2016 14:16:08 +0000 Subject: [PATCH 083/189] Fix for issue #2036, python client wont upload list of files --- .../java/io/swagger/codegen/DefaultCodegen.java | 2 ++ .../src/main/resources/python/api_client.mustache | 15 ++++++++------- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java index a66ef6db810..64516dc748f 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java @@ -1366,6 +1366,8 @@ public class DefaultCodegen { } else if (param instanceof FormParameter) { if ("file".equalsIgnoreCase(((FormParameter) param).getType())) { p.isFile = true; + } else if("file".equals(p.baseType)){ + p.isFile = true; } else { p.notFile = true; } diff --git a/modules/swagger-codegen/src/main/resources/python/api_client.mustache b/modules/swagger-codegen/src/main/resources/python/api_client.mustache index 57ada23fb32..fd954edde7d 100644 --- a/modules/swagger-codegen/src/main/resources/python/api_client.mustache +++ b/modules/swagger-codegen/src/main/resources/python/api_client.mustache @@ -395,13 +395,14 @@ class ApiClient(object): for k, v in iteritems(files): if not v: continue - - with open(v, 'rb') as f: - filename = os.path.basename(f.name) - filedata = f.read() - mimetype = mimetypes.\ - guess_type(filename)[0] or 'application/octet-stream' - params[k] = tuple([filename, filedata, mimetype]) + all_files = v if type(v) is list else [v] + for n in all_files: + with open(n, 'rb') as f: + filename = os.path.basename(f.name) + filedata = f.read() + mimetype = mimetypes.\ + guess_type(filename)[0] or 'application/octet-stream' + params[k] = tuple([filename, filedata, mimetype]) return params From 833ce25cab0d35514785839a11c539c1e100d805 Mon Sep 17 00:00:00 2001 From: Scott Williams Date: Fri, 5 Feb 2016 00:14:59 +0000 Subject: [PATCH 084/189] Change post_param from dict to list of tuples to allow list of files --- .../src/main/resources/python/api_client.mustache | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/python/api_client.mustache b/modules/swagger-codegen/src/main/resources/python/api_client.mustache index fd954edde7d..73f33a0e2e8 100644 --- a/modules/swagger-codegen/src/main/resources/python/api_client.mustache +++ b/modules/swagger-codegen/src/main/resources/python/api_client.mustache @@ -386,10 +386,10 @@ class ApiClient(object): :param files: File parameters. :return: Form parameters with files. """ - params = {} + params = [] if post_params: - params.update(post_params) + params = post_params if files: for k, v in iteritems(files): @@ -402,7 +402,7 @@ class ApiClient(object): filedata = f.read() mimetype = mimetypes.\ guess_type(filename)[0] or 'application/octet-stream' - params[k] = tuple([filename, filedata, mimetype]) + params.append(tuple[k, tuple([filename, filedata, mimetype])]) return params From 2407c494e7fc557e3fa6e80f3bbc3fbabe918dd6 Mon Sep 17 00:00:00 2001 From: Scott Williams Date: Fri, 5 Feb 2016 00:18:49 +0000 Subject: [PATCH 085/189] Change post_param from dict to list of tuples to allow list of files --- .../src/main/resources/python/api_client.mustache | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/resources/python/api_client.mustache b/modules/swagger-codegen/src/main/resources/python/api_client.mustache index 73f33a0e2e8..3ee9e7cc004 100644 --- a/modules/swagger-codegen/src/main/resources/python/api_client.mustache +++ b/modules/swagger-codegen/src/main/resources/python/api_client.mustache @@ -402,7 +402,7 @@ class ApiClient(object): filedata = f.read() mimetype = mimetypes.\ guess_type(filename)[0] or 'application/octet-stream' - params.append(tuple[k, tuple([filename, filedata, mimetype])]) + params.append(tuple([k, tuple([filename, filedata, mimetype])])) return params From b43e1e2c8f062cd1890fe1475981803143170998 Mon Sep 17 00:00:00 2001 From: Scott Williams Date: Fri, 5 Feb 2016 00:39:22 +0000 Subject: [PATCH 086/189] Change form_param to list of tuples from dict --- .../swagger-codegen/src/main/resources/python/api.mustache | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/python/api.mustache b/modules/swagger-codegen/src/main/resources/python/api.mustache index 77ece14d44b..9b0559fb6d1 100644 --- a/modules/swagger-codegen/src/main/resources/python/api.mustache +++ b/modules/swagger-codegen/src/main/resources/python/api.mustache @@ -117,11 +117,11 @@ class {{classname}}(object): header_params['{{baseName}}'] = params['{{paramName}}'] {{/headerParams}} - form_params = {} + form_params = [] files = {} {{#formParams}} if '{{paramName}}' in params: - {{#notFile}}form_params['{{baseName}}'] = params['{{paramName}}']{{/notFile}}{{#isFile}}files['{{baseName}}'] = params['{{paramName}}']{{/isFile}} + {{#notFile}}form_params.append(('{{baseName}}', params['{{paramName}}'])){{/notFile}}{{#isFile}}files['{{baseName}}'] = params['{{paramName}}']{{/isFile}} {{/formParams}} body_params = None From 57f38e4433c6544b61ace3405b1680d31d03c5e1 Mon Sep 17 00:00:00 2001 From: Scott Williams Date: Fri, 5 Feb 2016 09:46:41 +0000 Subject: [PATCH 087/189] Update pet-store python client files --- .../python/swagger_client/__init__.py | 2 +- .../python/swagger_client/api_client.py | 19 +++++------ .../python/swagger_client/apis/__init__.py | 2 +- .../python/swagger_client/apis/pet_api.py | 32 +++++++++---------- .../python/swagger_client/apis/store_api.py | 8 ++--- .../python/swagger_client/apis/user_api.py | 16 +++++----- 6 files changed, 40 insertions(+), 39 deletions(-) diff --git a/samples/client/petstore/python/swagger_client/__init__.py b/samples/client/petstore/python/swagger_client/__init__.py index f61c5d55262..6e7b59f36fd 100644 --- a/samples/client/petstore/python/swagger_client/__init__.py +++ b/samples/client/petstore/python/swagger_client/__init__.py @@ -9,8 +9,8 @@ from .models.order import Order # import apis into sdk package from .apis.user_api import UserApi -from .apis.pet_api import PetApi from .apis.store_api import StoreApi +from .apis.pet_api import PetApi # import ApiClient from .api_client import ApiClient diff --git a/samples/client/petstore/python/swagger_client/api_client.py b/samples/client/petstore/python/swagger_client/api_client.py index 00b901f3c4a..2b74f7ec8e5 100644 --- a/samples/client/petstore/python/swagger_client/api_client.py +++ b/samples/client/petstore/python/swagger_client/api_client.py @@ -386,22 +386,23 @@ class ApiClient(object): :param files: File parameters. :return: Form parameters with files. """ - params = {} + params = [] if post_params: - params.update(post_params) + params = post_params if files: for k, v in iteritems(files): if not v: continue - - with open(v, 'rb') as f: - filename = os.path.basename(f.name) - filedata = f.read() - mimetype = mimetypes.\ - guess_type(filename)[0] or 'application/octet-stream' - params[k] = tuple([filename, filedata, mimetype]) + all_files = v if type(v) is list else [v] + for n in all_files: + with open(n, 'rb') as f: + filename = os.path.basename(f.name) + filedata = f.read() + mimetype = mimetypes.\ + guess_type(filename)[0] or 'application/octet-stream' + params.append(tuple([k, tuple([filename, filedata, mimetype])])) return params diff --git a/samples/client/petstore/python/swagger_client/apis/__init__.py b/samples/client/petstore/python/swagger_client/apis/__init__.py index 592a56e282d..c0e09458f95 100644 --- a/samples/client/petstore/python/swagger_client/apis/__init__.py +++ b/samples/client/petstore/python/swagger_client/apis/__init__.py @@ -2,5 +2,5 @@ from __future__ import absolute_import # import apis into api package from .user_api import UserApi -from .pet_api import PetApi from .store_api import StoreApi +from .pet_api import PetApi diff --git a/samples/client/petstore/python/swagger_client/apis/pet_api.py b/samples/client/petstore/python/swagger_client/apis/pet_api.py index c3171760ddf..f5fc842a263 100644 --- a/samples/client/petstore/python/swagger_client/apis/pet_api.py +++ b/samples/client/petstore/python/swagger_client/apis/pet_api.py @@ -89,7 +89,7 @@ class PetApi(object): header_params = {} - form_params = {} + form_params = [] files = {} body_params = None @@ -165,7 +165,7 @@ class PetApi(object): header_params = {} - form_params = {} + form_params = [] files = {} body_params = None @@ -243,7 +243,7 @@ class PetApi(object): header_params = {} - form_params = {} + form_params = [] files = {} body_params = None @@ -319,7 +319,7 @@ class PetApi(object): header_params = {} - form_params = {} + form_params = [] files = {} body_params = None @@ -398,7 +398,7 @@ class PetApi(object): header_params = {} - form_params = {} + form_params = [] files = {} body_params = None @@ -479,12 +479,12 @@ class PetApi(object): header_params = {} - form_params = {} + form_params = [] files = {} if 'name' in params: - form_params['name'] = params['name'] + form_params.append(('name', params['name'])) if 'status' in params: - form_params['status'] = params['status'] + form_params.append(('status', params['status'])) body_params = None @@ -565,7 +565,7 @@ class PetApi(object): if 'api_key' in params: header_params['api_key'] = params['api_key'] - form_params = {} + form_params = [] files = {} body_params = None @@ -646,10 +646,10 @@ class PetApi(object): header_params = {} - form_params = {} + form_params = [] files = {} if 'additional_metadata' in params: - form_params['additionalMetadata'] = params['additional_metadata'] + form_params.append(('additionalMetadata', params['additional_metadata'])) if 'file' in params: files['file'] = params['file'] @@ -696,7 +696,7 @@ class PetApi(object): :param callback function: The callback function for asynchronous request. (optional) :param int pet_id: ID of pet that needs to be fetched (required) - :return: Binary + :return: str If the method is called asynchronously, returns the request thread. """ @@ -729,7 +729,7 @@ class PetApi(object): header_params = {} - form_params = {} + form_params = [] files = {} body_params = None @@ -754,7 +754,7 @@ class PetApi(object): body=body_params, post_params=form_params, files=files, - response_type='Binary', + response_type='str', auth_settings=auth_settings, callback=params.get('callback')) return response @@ -774,7 +774,7 @@ class PetApi(object): :param callback function: The callback function for asynchronous request. (optional) - :param Binary body: Pet object in the form of byte array + :param str body: Pet object in the form of byte array :return: None If the method is called asynchronously, returns the request thread. @@ -803,7 +803,7 @@ class PetApi(object): header_params = {} - form_params = {} + form_params = [] files = {} body_params = None diff --git a/samples/client/petstore/python/swagger_client/apis/store_api.py b/samples/client/petstore/python/swagger_client/apis/store_api.py index af6e56d6928..961123bc8fa 100644 --- a/samples/client/petstore/python/swagger_client/apis/store_api.py +++ b/samples/client/petstore/python/swagger_client/apis/store_api.py @@ -88,7 +88,7 @@ class StoreApi(object): header_params = {} - form_params = {} + form_params = [] files = {} body_params = None @@ -162,7 +162,7 @@ class StoreApi(object): header_params = {} - form_params = {} + form_params = [] files = {} body_params = None @@ -243,7 +243,7 @@ class StoreApi(object): header_params = {} - form_params = {} + form_params = [] files = {} body_params = None @@ -322,7 +322,7 @@ class StoreApi(object): header_params = {} - form_params = {} + form_params = [] files = {} body_params = None diff --git a/samples/client/petstore/python/swagger_client/apis/user_api.py b/samples/client/petstore/python/swagger_client/apis/user_api.py index 98111a84d9d..4e87823398e 100644 --- a/samples/client/petstore/python/swagger_client/apis/user_api.py +++ b/samples/client/petstore/python/swagger_client/apis/user_api.py @@ -89,7 +89,7 @@ class UserApi(object): header_params = {} - form_params = {} + form_params = [] files = {} body_params = None @@ -165,7 +165,7 @@ class UserApi(object): header_params = {} - form_params = {} + form_params = [] files = {} body_params = None @@ -241,7 +241,7 @@ class UserApi(object): header_params = {} - form_params = {} + form_params = [] files = {} body_params = None @@ -322,7 +322,7 @@ class UserApi(object): header_params = {} - form_params = {} + form_params = [] files = {} body_params = None @@ -395,7 +395,7 @@ class UserApi(object): header_params = {} - form_params = {} + form_params = [] files = {} body_params = None @@ -474,7 +474,7 @@ class UserApi(object): header_params = {} - form_params = {} + form_params = [] files = {} body_params = None @@ -554,7 +554,7 @@ class UserApi(object): header_params = {} - form_params = {} + form_params = [] files = {} body_params = None @@ -635,7 +635,7 @@ class UserApi(object): header_params = {} - form_params = {} + form_params = [] files = {} body_params = None From a6fe87a52af45a5edd6b32b41ddb481ad110818e Mon Sep 17 00:00:00 2001 From: Scott Williams Date: Sun, 7 Feb 2016 14:38:33 +0000 Subject: [PATCH 088/189] Use more appropriate variable name --- .../src/main/resources/python/api_client.mustache | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/python/api_client.mustache b/modules/swagger-codegen/src/main/resources/python/api_client.mustache index 3ee9e7cc004..7aac36e1a20 100644 --- a/modules/swagger-codegen/src/main/resources/python/api_client.mustache +++ b/modules/swagger-codegen/src/main/resources/python/api_client.mustache @@ -395,8 +395,8 @@ class ApiClient(object): for k, v in iteritems(files): if not v: continue - all_files = v if type(v) is list else [v] - for n in all_files: + file_names = v if type(v) is list else [v] + for n in file_names: with open(n, 'rb') as f: filename = os.path.basename(f.name) filedata = f.read() From 2ddbfa821856a51280703635a03f06a25cf59f1e Mon Sep 17 00:00:00 2001 From: Matan Goldman Date: Sun, 7 Feb 2016 18:05:07 +0200 Subject: [PATCH 089/189] Now it should be fully compatible with python 2.7 and 3.4 --- .../swagger-codegen/src/main/resources/python/model.mustache | 5 +++-- .../client/petstore/python/swagger_client/models/category.py | 5 +++-- .../client/petstore/python/swagger_client/models/order.py | 5 +++-- samples/client/petstore/python/swagger_client/models/pet.py | 5 +++-- samples/client/petstore/python/swagger_client/models/tag.py | 5 +++-- samples/client/petstore/python/swagger_client/models/user.py | 5 +++-- 6 files changed, 18 insertions(+), 12 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/python/model.mustache b/modules/swagger-codegen/src/main/resources/python/model.mustache index d7c3493d9da..f14a121aef9 100644 --- a/modules/swagger-codegen/src/main/resources/python/model.mustache +++ b/modules/swagger-codegen/src/main/resources/python/model.mustache @@ -97,8 +97,9 @@ class {{classname}}(object): )) elif isinstance(value, dict): result[attr] = dict(map( - lambda k, v: (k, v.to_dict()) if hasattr(v, "to_dict") else (k, v), - value.iteritems() + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() )) elif hasattr(value, "to_dict"): result[attr] = value.to_dict() diff --git a/samples/client/petstore/python/swagger_client/models/category.py b/samples/client/petstore/python/swagger_client/models/category.py index 59970e0bc3f..9f66c3e6764 100644 --- a/samples/client/petstore/python/swagger_client/models/category.py +++ b/samples/client/petstore/python/swagger_client/models/category.py @@ -108,8 +108,9 @@ class Category(object): )) elif isinstance(value, dict): result[attr] = dict(map( - lambda k, v: (k, v.to_dict()) if hasattr(v, "to_dict") else (k, v), - value.iteritems() + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() )) elif hasattr(value, "to_dict"): result[attr] = value.to_dict() diff --git a/samples/client/petstore/python/swagger_client/models/order.py b/samples/client/petstore/python/swagger_client/models/order.py index 488f01f05ba..b2b490ddfda 100644 --- a/samples/client/petstore/python/swagger_client/models/order.py +++ b/samples/client/petstore/python/swagger_client/models/order.py @@ -214,8 +214,9 @@ class Order(object): )) elif isinstance(value, dict): result[attr] = dict(map( - lambda k, v: (k, v.to_dict()) if hasattr(v, "to_dict") else (k, v), - value.iteritems() + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() )) elif hasattr(value, "to_dict"): result[attr] = value.to_dict() diff --git a/samples/client/petstore/python/swagger_client/models/pet.py b/samples/client/petstore/python/swagger_client/models/pet.py index 94ca2249c0a..a568235a492 100644 --- a/samples/client/petstore/python/swagger_client/models/pet.py +++ b/samples/client/petstore/python/swagger_client/models/pet.py @@ -214,8 +214,9 @@ class Pet(object): )) elif isinstance(value, dict): result[attr] = dict(map( - lambda k, v: (k, v.to_dict()) if hasattr(v, "to_dict") else (k, v), - value.iteritems() + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() )) elif hasattr(value, "to_dict"): result[attr] = value.to_dict() diff --git a/samples/client/petstore/python/swagger_client/models/tag.py b/samples/client/petstore/python/swagger_client/models/tag.py index 4deced8a351..293b13f51ad 100644 --- a/samples/client/petstore/python/swagger_client/models/tag.py +++ b/samples/client/petstore/python/swagger_client/models/tag.py @@ -108,8 +108,9 @@ class Tag(object): )) elif isinstance(value, dict): result[attr] = dict(map( - lambda k, v: (k, v.to_dict()) if hasattr(v, "to_dict") else (k, v), - value.iteritems() + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() )) elif hasattr(value, "to_dict"): result[attr] = value.to_dict() diff --git a/samples/client/petstore/python/swagger_client/models/user.py b/samples/client/petstore/python/swagger_client/models/user.py index f8c1012842a..6a161d8cbbf 100644 --- a/samples/client/petstore/python/swagger_client/models/user.py +++ b/samples/client/petstore/python/swagger_client/models/user.py @@ -258,8 +258,9 @@ class User(object): )) elif isinstance(value, dict): result[attr] = dict(map( - lambda k, v: (k, v.to_dict()) if hasattr(v, "to_dict") else (k, v), - value.iteritems() + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() )) elif hasattr(value, "to_dict"): result[attr] = value.to_dict() From 341f862569c56a69a6f5747048491d5e3f27d8db Mon Sep 17 00:00:00 2001 From: Matan Goldman Date: Sun, 7 Feb 2016 20:42:24 +0200 Subject: [PATCH 090/189] change the order of the elif inside to_dict for better performance (dictionary/additionalProperties is less probable) --- .../swagger-codegen/src/main/resources/python/model.mustache | 4 ++-- .../client/petstore/python/swagger_client/models/category.py | 4 ++-- samples/client/petstore/python/swagger_client/models/order.py | 4 ++-- samples/client/petstore/python/swagger_client/models/pet.py | 4 ++-- samples/client/petstore/python/swagger_client/models/tag.py | 4 ++-- samples/client/petstore/python/swagger_client/models/user.py | 4 ++-- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/python/model.mustache b/modules/swagger-codegen/src/main/resources/python/model.mustache index f14a121aef9..bd33a997c3e 100644 --- a/modules/swagger-codegen/src/main/resources/python/model.mustache +++ b/modules/swagger-codegen/src/main/resources/python/model.mustache @@ -95,14 +95,14 @@ class {{classname}}(object): lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() elif isinstance(value, dict): result[attr] = dict(map( lambda item: (item[0], item[1].to_dict()) if hasattr(item[1], "to_dict") else item, value.items() )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() else: result[attr] = value diff --git a/samples/client/petstore/python/swagger_client/models/category.py b/samples/client/petstore/python/swagger_client/models/category.py index 9f66c3e6764..b8d540c51bd 100644 --- a/samples/client/petstore/python/swagger_client/models/category.py +++ b/samples/client/petstore/python/swagger_client/models/category.py @@ -106,14 +106,14 @@ class Category(object): lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() elif isinstance(value, dict): result[attr] = dict(map( lambda item: (item[0], item[1].to_dict()) if hasattr(item[1], "to_dict") else item, value.items() )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() else: result[attr] = value diff --git a/samples/client/petstore/python/swagger_client/models/order.py b/samples/client/petstore/python/swagger_client/models/order.py index b2b490ddfda..4c8911f267b 100644 --- a/samples/client/petstore/python/swagger_client/models/order.py +++ b/samples/client/petstore/python/swagger_client/models/order.py @@ -212,14 +212,14 @@ class Order(object): lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() elif isinstance(value, dict): result[attr] = dict(map( lambda item: (item[0], item[1].to_dict()) if hasattr(item[1], "to_dict") else item, value.items() )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() else: result[attr] = value diff --git a/samples/client/petstore/python/swagger_client/models/pet.py b/samples/client/petstore/python/swagger_client/models/pet.py index a568235a492..dfa614b1e9b 100644 --- a/samples/client/petstore/python/swagger_client/models/pet.py +++ b/samples/client/petstore/python/swagger_client/models/pet.py @@ -212,14 +212,14 @@ class Pet(object): lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() elif isinstance(value, dict): result[attr] = dict(map( lambda item: (item[0], item[1].to_dict()) if hasattr(item[1], "to_dict") else item, value.items() )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() else: result[attr] = value diff --git a/samples/client/petstore/python/swagger_client/models/tag.py b/samples/client/petstore/python/swagger_client/models/tag.py index 293b13f51ad..50f829d65e3 100644 --- a/samples/client/petstore/python/swagger_client/models/tag.py +++ b/samples/client/petstore/python/swagger_client/models/tag.py @@ -106,14 +106,14 @@ class Tag(object): lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() elif isinstance(value, dict): result[attr] = dict(map( lambda item: (item[0], item[1].to_dict()) if hasattr(item[1], "to_dict") else item, value.items() )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() else: result[attr] = value diff --git a/samples/client/petstore/python/swagger_client/models/user.py b/samples/client/petstore/python/swagger_client/models/user.py index 6a161d8cbbf..fd6d16824b3 100644 --- a/samples/client/petstore/python/swagger_client/models/user.py +++ b/samples/client/petstore/python/swagger_client/models/user.py @@ -256,14 +256,14 @@ class User(object): lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() elif isinstance(value, dict): result[attr] = dict(map( lambda item: (item[0], item[1].to_dict()) if hasattr(item[1], "to_dict") else item, value.items() )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() else: result[attr] = value From 12ff5cc8cda9c80daf81588475f943f4d17e4e1c Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Mon, 8 Feb 2016 10:13:23 -0800 Subject: [PATCH 091/189] updated to 1.0.18-SNAPSHOT for https://github.com/swagger-api/swagger-parser/issues/182 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index be9098c89b7..0cab362828b 100644 --- a/pom.xml +++ b/pom.xml @@ -533,7 +533,7 @@ - 1.0.17 + 1.0.18-SNAPSHOT 2.11.1 2.3.4 1.5.7 From 7e9a5f00b1acdfa7295cc2d4eac890c2714029e5 Mon Sep 17 00:00:00 2001 From: delenius Date: Mon, 8 Feb 2016 12:31:00 -0800 Subject: [PATCH 092/189] Add usePromise parameter to JS client --- .../languages/JavascriptClientCodegen.java | 14 +++++++++++--- .../main/resources/Javascript/ApiClient.mustache | 15 +++++++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java index 2a60c7fc1f0..08f03e48b1b 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java @@ -39,6 +39,7 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo private static final String PROJECT_DESCRIPTION = "projectDescription"; private static final String PROJECT_VERSION = "projectVersion"; private static final String PROJECT_LICENSE_NAME = "projectLicenseName"; + private static final String USE_PROMISES = "usePromises"; protected String projectName; protected String moduleName; @@ -47,7 +48,8 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo protected String sourceFolder = "src"; protected String localVariablePrefix = ""; - + protected boolean usePromises = false; + public JavascriptClientCodegen() { super(); outputFolder = "generated-code/js"; @@ -56,7 +58,7 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo templateDir = "Javascript"; apiPackage = "api"; modelPackage = "model"; - + // reference: http://www.w3schools.com/js/js_reserved.asp reservedWords = new HashSet( Arrays.asList( @@ -96,6 +98,8 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo "version of the project (Default: using info.version or \"1.0.0\")")); cliOptions.add(new CliOption(PROJECT_LICENSE_NAME, "name of the license the project uses (Default: using info.license.name)")); + cliOptions.add(new CliOption(USE_PROMISES, + "use Promises as return values from the client API, instead of superagent callbacks (Default: false)")); } @Override @@ -161,7 +165,10 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo if (additionalProperties.containsKey(CodegenConstants.SOURCE_FOLDER)) { sourceFolder = (String) additionalProperties.get(CodegenConstants.SOURCE_FOLDER); } - + if (additionalProperties.containsKey(USE_PROMISES)) { + usePromises = Boolean.parseBoolean((String)additionalProperties.get(USE_PROMISES)); + } + if (swagger.getInfo() != null) { Info info = swagger.getInfo(); if (StringUtils.isBlank(projectName) && info.getTitle() != null) { @@ -204,6 +211,7 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo additionalProperties.put(PROJECT_VERSION, projectVersion); additionalProperties.put(CodegenConstants.LOCAL_VARIABLE_PREFIX, localVariablePrefix); additionalProperties.put(CodegenConstants.SOURCE_FOLDER, sourceFolder); + additionalProperties.put(USE_PROMISES, usePromises); supportingFiles.add(new SupportingFile("package.mustache", "", "package.json")); supportingFiles.add(new SupportingFile("index.mustache", sourceFolder, "index.js")); diff --git a/modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache index b301da5c301..55a78651485 100644 --- a/modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache +++ b/modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache @@ -214,6 +214,20 @@ request.accept(accept); } + {{#usePromises}} + return new Promise( function(resolve,reject) { + request.end(function(error, response) { + if (error) { + reject(error); + } + else { + var data = _this.deserialize(response, returnType); + resolve(data); + } + }); + }); + {{/usePromises}} + {{^usePromises}} request.end(function(error, response) { if (callback) { var data = null; @@ -225,6 +239,7 @@ }); return request; + {{/usePromises}} }; ApiClient.parseDate = function parseDate(str) { From 153faebc6dc3a5eb95eb3914e63164717969da95 Mon Sep 17 00:00:00 2001 From: delenius Date: Mon, 8 Feb 2016 12:39:30 -0800 Subject: [PATCH 093/189] Modify JS PetStore tests for prototypes change This is just the result of running ./bin/javascript-petstore.sh after the fix for #2044. --- .../petstore/javascript/src/model/Category.js | 85 +++--- .../petstore/javascript/src/model/Order.js | 217 +++++++------- .../petstore/javascript/src/model/Pet.js | 217 +++++++------- .../petstore/javascript/src/model/Tag.js | 85 +++--- .../petstore/javascript/src/model/User.js | 281 +++++++++--------- 5 files changed, 440 insertions(+), 445 deletions(-) diff --git a/samples/client/petstore/javascript/src/model/Category.js b/samples/client/petstore/javascript/src/model/Category.js index 9f7c53a2240..4b58f1e7c4d 100644 --- a/samples/client/petstore/javascript/src/model/Category.js +++ b/samples/client/petstore/javascript/src/model/Category.js @@ -20,65 +20,64 @@ var Category = function Category() { - var self = this; /** * datatype: Integer **/ - self['id'] = null; + this['id'] = null; /** * datatype: String **/ - self['name'] = null; + this['name'] = null; + }; - self.constructFromObject = function(data) { - if (!data) { - return this; - } - - self['id'] = ApiClient.convertToType(data['id'], 'Integer'); - - self['name'] = ApiClient.convertToType(data['name'], 'String'); - + Category.prototype.constructFromObject = function(data) { + if (!data) { return this; } - - /** - * @return {Integer} - **/ - self.getId = function() { - return self['id']; - } - - /** - * @param {Integer} id - **/ - self.setId = function(id) { - self['id'] = id; - } + this['id'] = ApiClient.convertToType(data['id'], 'Integer'); - /** - * @return {String} - **/ - self.getName = function() { - return self['name']; - } - - /** - * @param {String} name - **/ - self.setName = function(name) { - self['name'] = name; - } + this['name'] = ApiClient.convertToType(data['name'], 'String'); + return this; + } - self.toJson = function() { - return JSON.stringify(self); - } - }; + + /** + * @return {Integer} + **/ + Category.prototype.getId = function() { + return this['id']; + } + + /** + * @param {Integer} id + **/ + Category.prototype.setId = function(id) { + this['id'] = id; + } + + /** + * @return {String} + **/ + Category.prototype.getName = function() { + return this['name']; + } + + /** + * @param {String} name + **/ + Category.prototype.setName = function(name) { + this['name'] = name; + } + + + Category.prototype.toJson = function() { + return JSON.stringify(this); + } if (module) { module.Category = Category; diff --git a/samples/client/petstore/javascript/src/model/Order.js b/samples/client/petstore/javascript/src/model/Order.js index 1ac5ff706af..c9dd8403a4f 100644 --- a/samples/client/petstore/javascript/src/model/Order.js +++ b/samples/client/petstore/javascript/src/model/Order.js @@ -48,152 +48,151 @@ var StatusEnum = function StatusEnum() { var Order = function Order() { - var self = this; /** * datatype: Integer **/ - self['id'] = null; + this['id'] = null; /** * datatype: Integer **/ - self['petId'] = null; + this['petId'] = null; /** * datatype: Integer **/ - self['quantity'] = null; + this['quantity'] = null; /** * datatype: Date **/ - self['shipDate'] = null; + this['shipDate'] = null; /** * Order Status * datatype: StatusEnum **/ - self['status'] = null; + this['status'] = null; /** * datatype: Boolean **/ - self['complete'] = null; + this['complete'] = null; + }; - self.constructFromObject = function(data) { - if (!data) { - return this; - } - - self['id'] = ApiClient.convertToType(data['id'], 'Integer'); - - self['petId'] = ApiClient.convertToType(data['petId'], 'Integer'); - - self['quantity'] = ApiClient.convertToType(data['quantity'], 'Integer'); - - self['shipDate'] = ApiClient.convertToType(data['shipDate'], 'Date'); - - self['status'] = ApiClient.convertToType(data['status'], 'String'); - - self['complete'] = ApiClient.convertToType(data['complete'], 'Boolean'); - + Order.prototype.constructFromObject = function(data) { + if (!data) { return this; } - - /** - * @return {Integer} - **/ - self.getId = function() { - return self['id']; - } - - /** - * @param {Integer} id - **/ - self.setId = function(id) { - self['id'] = id; - } + this['id'] = ApiClient.convertToType(data['id'], 'Integer'); - /** - * @return {Integer} - **/ - self.getPetId = function() { - return self['petId']; - } - - /** - * @param {Integer} petId - **/ - self.setPetId = function(petId) { - self['petId'] = petId; - } + this['petId'] = ApiClient.convertToType(data['petId'], 'Integer'); - /** - * @return {Integer} - **/ - self.getQuantity = function() { - return self['quantity']; - } - - /** - * @param {Integer} quantity - **/ - self.setQuantity = function(quantity) { - self['quantity'] = quantity; - } + this['quantity'] = ApiClient.convertToType(data['quantity'], 'Integer'); - /** - * @return {Date} - **/ - self.getShipDate = function() { - return self['shipDate']; - } - - /** - * @param {Date} shipDate - **/ - self.setShipDate = function(shipDate) { - self['shipDate'] = shipDate; - } + this['shipDate'] = ApiClient.convertToType(data['shipDate'], 'Date'); - /** - * get Order Status - * @return {StatusEnum} - **/ - self.getStatus = function() { - return self['status']; - } - - /** - * set Order Status - * @param {StatusEnum} status - **/ - self.setStatus = function(status) { - self['status'] = status; - } + this['status'] = ApiClient.convertToType(data['status'], 'String'); - /** - * @return {Boolean} - **/ - self.getComplete = function() { - return self['complete']; - } - - /** - * @param {Boolean} complete - **/ - self.setComplete = function(complete) { - self['complete'] = complete; - } + this['complete'] = ApiClient.convertToType(data['complete'], 'Boolean'); + return this; + } - self.toJson = function() { - return JSON.stringify(self); - } - }; + + /** + * @return {Integer} + **/ + Order.prototype.getId = function() { + return this['id']; + } + + /** + * @param {Integer} id + **/ + Order.prototype.setId = function(id) { + this['id'] = id; + } + + /** + * @return {Integer} + **/ + Order.prototype.getPetId = function() { + return this['petId']; + } + + /** + * @param {Integer} petId + **/ + Order.prototype.setPetId = function(petId) { + this['petId'] = petId; + } + + /** + * @return {Integer} + **/ + Order.prototype.getQuantity = function() { + return this['quantity']; + } + + /** + * @param {Integer} quantity + **/ + Order.prototype.setQuantity = function(quantity) { + this['quantity'] = quantity; + } + + /** + * @return {Date} + **/ + Order.prototype.getShipDate = function() { + return this['shipDate']; + } + + /** + * @param {Date} shipDate + **/ + Order.prototype.setShipDate = function(shipDate) { + this['shipDate'] = shipDate; + } + + /** + * get Order Status + * @return {StatusEnum} + **/ + Order.prototype.getStatus = function() { + return this['status']; + } + + /** + * set Order Status + * @param {StatusEnum} status + **/ + Order.prototype.setStatus = function(status) { + this['status'] = status; + } + + /** + * @return {Boolean} + **/ + Order.prototype.getComplete = function() { + return this['complete']; + } + + /** + * @param {Boolean} complete + **/ + Order.prototype.setComplete = function(complete) { + this['complete'] = complete; + } + + + Order.prototype.toJson = function() { + return JSON.stringify(this); + } if (module) { module.Order = Order; diff --git a/samples/client/petstore/javascript/src/model/Pet.js b/samples/client/petstore/javascript/src/model/Pet.js index d50823edefb..60b24a3f8e5 100644 --- a/samples/client/petstore/javascript/src/model/Pet.js +++ b/samples/client/petstore/javascript/src/model/Pet.js @@ -48,154 +48,153 @@ var StatusEnum = function StatusEnum() { var Pet = function Pet(photoUrls, name) { - var self = this; /** * datatype: Integer **/ - self['id'] = null; + this['id'] = null; /** * datatype: Category **/ - self['category'] = new Category(); + this['category'] = new Category(); /** * datatype: String * required **/ - self['name'] = name; + this['name'] = name; /** * datatype: [String] * required **/ - self['photoUrls'] = photoUrls; + this['photoUrls'] = photoUrls; /** * datatype: [Tag] **/ - self['tags'] = []; + this['tags'] = []; /** * pet status in the store * datatype: StatusEnum **/ - self['status'] = null; + this['status'] = null; + }; - self.constructFromObject = function(data) { - if (!data) { - return this; - } - - self['id'] = ApiClient.convertToType(data['id'], 'Integer'); - - self['category'].constructFromObject(data['category']); - - self['name'] = ApiClient.convertToType(data['name'], 'String'); - - self['photoUrls'] = ApiClient.convertToType(data['photoUrls'], ['String']); - - self['tags'] = ApiClient.convertToType(data['tags'], [Tag]); - - self['status'] = ApiClient.convertToType(data['status'], 'String'); - + Pet.prototype.constructFromObject = function(data) { + if (!data) { return this; } - - /** - * @return {Integer} - **/ - self.getId = function() { - return self['id']; - } - - /** - * @param {Integer} id - **/ - self.setId = function(id) { - self['id'] = id; - } + this['id'] = ApiClient.convertToType(data['id'], 'Integer'); - /** - * @return {Category} - **/ - self.getCategory = function() { - return self['category']; - } - - /** - * @param {Category} category - **/ - self.setCategory = function(category) { - self['category'] = category; - } + this['category'].constructFromObject(data['category']); - /** - * @return {String} - **/ - self.getName = function() { - return self['name']; - } - - /** - * @param {String} name - **/ - self.setName = function(name) { - self['name'] = name; - } + this['name'] = ApiClient.convertToType(data['name'], 'String'); - /** - * @return {[String]} - **/ - self.getPhotoUrls = function() { - return self['photoUrls']; - } - - /** - * @param {[String]} photoUrls - **/ - self.setPhotoUrls = function(photoUrls) { - self['photoUrls'] = photoUrls; - } + this['photoUrls'] = ApiClient.convertToType(data['photoUrls'], ['String']); - /** - * @return {[Tag]} - **/ - self.getTags = function() { - return self['tags']; - } - - /** - * @param {[Tag]} tags - **/ - self.setTags = function(tags) { - self['tags'] = tags; - } + this['tags'] = ApiClient.convertToType(data['tags'], [Tag]); - /** - * get pet status in the store - * @return {StatusEnum} - **/ - self.getStatus = function() { - return self['status']; - } - - /** - * set pet status in the store - * @param {StatusEnum} status - **/ - self.setStatus = function(status) { - self['status'] = status; - } + this['status'] = ApiClient.convertToType(data['status'], 'String'); + return this; + } - self.toJson = function() { - return JSON.stringify(self); - } - }; + + /** + * @return {Integer} + **/ + Pet.prototype.getId = function() { + return this['id']; + } + + /** + * @param {Integer} id + **/ + Pet.prototype.setId = function(id) { + this['id'] = id; + } + + /** + * @return {Category} + **/ + Pet.prototype.getCategory = function() { + return this['category']; + } + + /** + * @param {Category} category + **/ + Pet.prototype.setCategory = function(category) { + this['category'] = category; + } + + /** + * @return {String} + **/ + Pet.prototype.getName = function() { + return this['name']; + } + + /** + * @param {String} name + **/ + Pet.prototype.setName = function(name) { + this['name'] = name; + } + + /** + * @return {[String]} + **/ + Pet.prototype.getPhotoUrls = function() { + return this['photoUrls']; + } + + /** + * @param {[String]} photoUrls + **/ + Pet.prototype.setPhotoUrls = function(photoUrls) { + this['photoUrls'] = photoUrls; + } + + /** + * @return {[Tag]} + **/ + Pet.prototype.getTags = function() { + return this['tags']; + } + + /** + * @param {[Tag]} tags + **/ + Pet.prototype.setTags = function(tags) { + this['tags'] = tags; + } + + /** + * get pet status in the store + * @return {StatusEnum} + **/ + Pet.prototype.getStatus = function() { + return this['status']; + } + + /** + * set pet status in the store + * @param {StatusEnum} status + **/ + Pet.prototype.setStatus = function(status) { + this['status'] = status; + } + + + Pet.prototype.toJson = function() { + return JSON.stringify(this); + } if (module) { module.Pet = Pet; diff --git a/samples/client/petstore/javascript/src/model/Tag.js b/samples/client/petstore/javascript/src/model/Tag.js index 3180975e976..ac3d5373491 100644 --- a/samples/client/petstore/javascript/src/model/Tag.js +++ b/samples/client/petstore/javascript/src/model/Tag.js @@ -20,65 +20,64 @@ var Tag = function Tag() { - var self = this; /** * datatype: Integer **/ - self['id'] = null; + this['id'] = null; /** * datatype: String **/ - self['name'] = null; + this['name'] = null; + }; - self.constructFromObject = function(data) { - if (!data) { - return this; - } - - self['id'] = ApiClient.convertToType(data['id'], 'Integer'); - - self['name'] = ApiClient.convertToType(data['name'], 'String'); - + Tag.prototype.constructFromObject = function(data) { + if (!data) { return this; } - - /** - * @return {Integer} - **/ - self.getId = function() { - return self['id']; - } - - /** - * @param {Integer} id - **/ - self.setId = function(id) { - self['id'] = id; - } + this['id'] = ApiClient.convertToType(data['id'], 'Integer'); - /** - * @return {String} - **/ - self.getName = function() { - return self['name']; - } - - /** - * @param {String} name - **/ - self.setName = function(name) { - self['name'] = name; - } + this['name'] = ApiClient.convertToType(data['name'], 'String'); + return this; + } - self.toJson = function() { - return JSON.stringify(self); - } - }; + + /** + * @return {Integer} + **/ + Tag.prototype.getId = function() { + return this['id']; + } + + /** + * @param {Integer} id + **/ + Tag.prototype.setId = function(id) { + this['id'] = id; + } + + /** + * @return {String} + **/ + Tag.prototype.getName = function() { + return this['name']; + } + + /** + * @param {String} name + **/ + Tag.prototype.setName = function(name) { + this['name'] = name; + } + + + Tag.prototype.toJson = function() { + return JSON.stringify(this); + } if (module) { module.Tag = Tag; diff --git a/samples/client/petstore/javascript/src/model/User.js b/samples/client/petstore/javascript/src/model/User.js index dab5d3791b5..2ee006e0ac9 100644 --- a/samples/client/petstore/javascript/src/model/User.js +++ b/samples/client/petstore/javascript/src/model/User.js @@ -20,194 +20,193 @@ var User = function User() { - var self = this; /** * datatype: Integer **/ - self['id'] = null; + this['id'] = null; /** * datatype: String **/ - self['username'] = null; + this['username'] = null; /** * datatype: String **/ - self['firstName'] = null; + this['firstName'] = null; /** * datatype: String **/ - self['lastName'] = null; + this['lastName'] = null; /** * datatype: String **/ - self['email'] = null; + this['email'] = null; /** * datatype: String **/ - self['password'] = null; + this['password'] = null; /** * datatype: String **/ - self['phone'] = null; + this['phone'] = null; /** * User Status * datatype: Integer **/ - self['userStatus'] = null; + this['userStatus'] = null; + }; - self.constructFromObject = function(data) { - if (!data) { - return this; - } - - self['id'] = ApiClient.convertToType(data['id'], 'Integer'); - - self['username'] = ApiClient.convertToType(data['username'], 'String'); - - self['firstName'] = ApiClient.convertToType(data['firstName'], 'String'); - - self['lastName'] = ApiClient.convertToType(data['lastName'], 'String'); - - self['email'] = ApiClient.convertToType(data['email'], 'String'); - - self['password'] = ApiClient.convertToType(data['password'], 'String'); - - self['phone'] = ApiClient.convertToType(data['phone'], 'String'); - - self['userStatus'] = ApiClient.convertToType(data['userStatus'], 'Integer'); - + User.prototype.constructFromObject = function(data) { + if (!data) { return this; } - - /** - * @return {Integer} - **/ - self.getId = function() { - return self['id']; - } - - /** - * @param {Integer} id - **/ - self.setId = function(id) { - self['id'] = id; - } + this['id'] = ApiClient.convertToType(data['id'], 'Integer'); - /** - * @return {String} - **/ - self.getUsername = function() { - return self['username']; - } - - /** - * @param {String} username - **/ - self.setUsername = function(username) { - self['username'] = username; - } + this['username'] = ApiClient.convertToType(data['username'], 'String'); - /** - * @return {String} - **/ - self.getFirstName = function() { - return self['firstName']; - } - - /** - * @param {String} firstName - **/ - self.setFirstName = function(firstName) { - self['firstName'] = firstName; - } + this['firstName'] = ApiClient.convertToType(data['firstName'], 'String'); - /** - * @return {String} - **/ - self.getLastName = function() { - return self['lastName']; - } - - /** - * @param {String} lastName - **/ - self.setLastName = function(lastName) { - self['lastName'] = lastName; - } + this['lastName'] = ApiClient.convertToType(data['lastName'], 'String'); - /** - * @return {String} - **/ - self.getEmail = function() { - return self['email']; - } - - /** - * @param {String} email - **/ - self.setEmail = function(email) { - self['email'] = email; - } + this['email'] = ApiClient.convertToType(data['email'], 'String'); - /** - * @return {String} - **/ - self.getPassword = function() { - return self['password']; - } - - /** - * @param {String} password - **/ - self.setPassword = function(password) { - self['password'] = password; - } + this['password'] = ApiClient.convertToType(data['password'], 'String'); - /** - * @return {String} - **/ - self.getPhone = function() { - return self['phone']; - } - - /** - * @param {String} phone - **/ - self.setPhone = function(phone) { - self['phone'] = phone; - } + this['phone'] = ApiClient.convertToType(data['phone'], 'String'); - /** - * get User Status - * @return {Integer} - **/ - self.getUserStatus = function() { - return self['userStatus']; - } - - /** - * set User Status - * @param {Integer} userStatus - **/ - self.setUserStatus = function(userStatus) { - self['userStatus'] = userStatus; - } + this['userStatus'] = ApiClient.convertToType(data['userStatus'], 'Integer'); + return this; + } - self.toJson = function() { - return JSON.stringify(self); - } - }; + + /** + * @return {Integer} + **/ + User.prototype.getId = function() { + return this['id']; + } + + /** + * @param {Integer} id + **/ + User.prototype.setId = function(id) { + this['id'] = id; + } + + /** + * @return {String} + **/ + User.prototype.getUsername = function() { + return this['username']; + } + + /** + * @param {String} username + **/ + User.prototype.setUsername = function(username) { + this['username'] = username; + } + + /** + * @return {String} + **/ + User.prototype.getFirstName = function() { + return this['firstName']; + } + + /** + * @param {String} firstName + **/ + User.prototype.setFirstName = function(firstName) { + this['firstName'] = firstName; + } + + /** + * @return {String} + **/ + User.prototype.getLastName = function() { + return this['lastName']; + } + + /** + * @param {String} lastName + **/ + User.prototype.setLastName = function(lastName) { + this['lastName'] = lastName; + } + + /** + * @return {String} + **/ + User.prototype.getEmail = function() { + return this['email']; + } + + /** + * @param {String} email + **/ + User.prototype.setEmail = function(email) { + this['email'] = email; + } + + /** + * @return {String} + **/ + User.prototype.getPassword = function() { + return this['password']; + } + + /** + * @param {String} password + **/ + User.prototype.setPassword = function(password) { + this['password'] = password; + } + + /** + * @return {String} + **/ + User.prototype.getPhone = function() { + return this['phone']; + } + + /** + * @param {String} phone + **/ + User.prototype.setPhone = function(phone) { + this['phone'] = phone; + } + + /** + * get User Status + * @return {Integer} + **/ + User.prototype.getUserStatus = function() { + return this['userStatus']; + } + + /** + * set User Status + * @param {Integer} userStatus + **/ + User.prototype.setUserStatus = function(userStatus) { + this['userStatus'] = userStatus; + } + + + User.prototype.toJson = function() { + return JSON.stringify(this); + } if (module) { module.User = User; From bc0658e81c450fc40833cfd4629855e965c60ff8 Mon Sep 17 00:00:00 2001 From: Joseph Zuromski Date: Mon, 8 Feb 2016 12:51:14 -0800 Subject: [PATCH 094/189] add in initial swift client tests --- .gitignore | 2 + .../SwaggerClient.xcodeproj/project.pbxproj | 403 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../SwaggerClient/AppDelegate.swift | 46 ++ .../AppIcon.appiconset/Contents.json | 68 +++ .../Base.lproj/LaunchScreen.storyboard | 27 ++ .../SwaggerClient/Base.lproj/Main.storyboard | 25 ++ .../SwaggerClient/Info.plist | 47 ++ .../SwaggerClient/ViewController.swift | 25 ++ .../SwaggerClientTests/Info.plist | 24 ++ .../SwaggerClientTests.swift | 36 ++ .../petstore/swift/SwaggerClientTests/pom.xml | 65 +++ 12 files changed, 775 insertions(+) create mode 100644 samples/client/petstore/swift/SwaggerClientTests/SwaggerClient.xcodeproj/project.pbxproj create mode 100644 samples/client/petstore/swift/SwaggerClientTests/SwaggerClient.xcworkspace/contents.xcworkspacedata create mode 100644 samples/client/petstore/swift/SwaggerClientTests/SwaggerClient/AppDelegate.swift create mode 100644 samples/client/petstore/swift/SwaggerClientTests/SwaggerClient/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 samples/client/petstore/swift/SwaggerClientTests/SwaggerClient/Base.lproj/LaunchScreen.storyboard create mode 100644 samples/client/petstore/swift/SwaggerClientTests/SwaggerClient/Base.lproj/Main.storyboard create mode 100644 samples/client/petstore/swift/SwaggerClientTests/SwaggerClient/Info.plist create mode 100644 samples/client/petstore/swift/SwaggerClientTests/SwaggerClient/ViewController.swift create mode 100644 samples/client/petstore/swift/SwaggerClientTests/SwaggerClientTests/Info.plist create mode 100644 samples/client/petstore/swift/SwaggerClientTests/SwaggerClientTests/SwaggerClientTests.swift create mode 100644 samples/client/petstore/swift/SwaggerClientTests/pom.xml diff --git a/.gitignore b/.gitignore index 729d873a150..5e2ca7a088c 100644 --- a/.gitignore +++ b/.gitignore @@ -59,6 +59,8 @@ samples/client/petstore/python/.projectile samples/client/petstore/python/.venv/ samples/client/petstore/objc/SwaggerClientTests/SwaggerClient.xcodeproj/xcuserdata +samples/client/petstore/swift/SwaggerClientTests/SwaggerClient.xcodeproj/xcuserdata +samples/client/petstore/swift/SwaggerClientTests/SwaggerClient.xcworkspace/xcuserdata .settings diff --git a/samples/client/petstore/swift/SwaggerClientTests/SwaggerClient.xcodeproj/project.pbxproj b/samples/client/petstore/swift/SwaggerClientTests/SwaggerClient.xcodeproj/project.pbxproj new file mode 100644 index 00000000000..d495cb15fe5 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/SwaggerClient.xcodeproj/project.pbxproj @@ -0,0 +1,403 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 6D4EFB951C692C6300B96B06 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D4EFB941C692C6300B96B06 /* AppDelegate.swift */; }; + 6D4EFB971C692C6300B96B06 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D4EFB961C692C6300B96B06 /* ViewController.swift */; }; + 6D4EFB9A1C692C6300B96B06 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6D4EFB981C692C6300B96B06 /* Main.storyboard */; }; + 6D4EFB9C1C692C6300B96B06 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6D4EFB9B1C692C6300B96B06 /* Assets.xcassets */; }; + 6D4EFB9F1C692C6300B96B06 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6D4EFB9D1C692C6300B96B06 /* LaunchScreen.storyboard */; }; + 6D4EFBAA1C692C6300B96B06 /* SwaggerClientTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D4EFBA91C692C6300B96B06 /* SwaggerClientTests.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 6D4EFBA61C692C6300B96B06 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 6D4EFB891C692C6300B96B06 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 6D4EFB901C692C6300B96B06; + remoteInfo = SwaggerClient; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 6D4EFB911C692C6300B96B06 /* SwaggerClient.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SwaggerClient.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 6D4EFB941C692C6300B96B06 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 6D4EFB961C692C6300B96B06 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + 6D4EFB991C692C6300B96B06 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 6D4EFB9B1C692C6300B96B06 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 6D4EFB9E1C692C6300B96B06 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 6D4EFBA01C692C6300B96B06 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 6D4EFBA51C692C6300B96B06 /* SwaggerClientTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SwaggerClientTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 6D4EFBA91C692C6300B96B06 /* SwaggerClientTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwaggerClientTests.swift; sourceTree = ""; }; + 6D4EFBAB1C692C6300B96B06 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 6D4EFB8E1C692C6300B96B06 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6D4EFBA21C692C6300B96B06 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 6D4EFB881C692C6300B96B06 = { + isa = PBXGroup; + children = ( + 6D4EFB931C692C6300B96B06 /* SwaggerClient */, + 6D4EFBA81C692C6300B96B06 /* SwaggerClientTests */, + 6D4EFB921C692C6300B96B06 /* Products */, + ); + sourceTree = ""; + }; + 6D4EFB921C692C6300B96B06 /* Products */ = { + isa = PBXGroup; + children = ( + 6D4EFB911C692C6300B96B06 /* SwaggerClient.app */, + 6D4EFBA51C692C6300B96B06 /* SwaggerClientTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 6D4EFB931C692C6300B96B06 /* SwaggerClient */ = { + isa = PBXGroup; + children = ( + 6D4EFB941C692C6300B96B06 /* AppDelegate.swift */, + 6D4EFB961C692C6300B96B06 /* ViewController.swift */, + 6D4EFB981C692C6300B96B06 /* Main.storyboard */, + 6D4EFB9B1C692C6300B96B06 /* Assets.xcassets */, + 6D4EFB9D1C692C6300B96B06 /* LaunchScreen.storyboard */, + 6D4EFBA01C692C6300B96B06 /* Info.plist */, + ); + path = SwaggerClient; + sourceTree = ""; + }; + 6D4EFBA81C692C6300B96B06 /* SwaggerClientTests */ = { + isa = PBXGroup; + children = ( + 6D4EFBA91C692C6300B96B06 /* SwaggerClientTests.swift */, + 6D4EFBAB1C692C6300B96B06 /* Info.plist */, + ); + path = SwaggerClientTests; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 6D4EFB901C692C6300B96B06 /* SwaggerClient */ = { + isa = PBXNativeTarget; + buildConfigurationList = 6D4EFBAE1C692C6300B96B06 /* Build configuration list for PBXNativeTarget "SwaggerClient" */; + buildPhases = ( + 6D4EFB8D1C692C6300B96B06 /* Sources */, + 6D4EFB8E1C692C6300B96B06 /* Frameworks */, + 6D4EFB8F1C692C6300B96B06 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = SwaggerClient; + productName = SwaggerClient; + productReference = 6D4EFB911C692C6300B96B06 /* SwaggerClient.app */; + productType = "com.apple.product-type.application"; + }; + 6D4EFBA41C692C6300B96B06 /* SwaggerClientTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 6D4EFBB11C692C6300B96B06 /* Build configuration list for PBXNativeTarget "SwaggerClientTests" */; + buildPhases = ( + 6D4EFBA11C692C6300B96B06 /* Sources */, + 6D4EFBA21C692C6300B96B06 /* Frameworks */, + 6D4EFBA31C692C6300B96B06 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 6D4EFBA71C692C6300B96B06 /* PBXTargetDependency */, + ); + name = SwaggerClientTests; + productName = SwaggerClientTests; + productReference = 6D4EFBA51C692C6300B96B06 /* SwaggerClientTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 6D4EFB891C692C6300B96B06 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0720; + LastUpgradeCheck = 0720; + ORGANIZATIONNAME = Swagger; + TargetAttributes = { + 6D4EFB901C692C6300B96B06 = { + CreatedOnToolsVersion = 7.2.1; + }; + 6D4EFBA41C692C6300B96B06 = { + CreatedOnToolsVersion = 7.2.1; + TestTargetID = 6D4EFB901C692C6300B96B06; + }; + }; + }; + buildConfigurationList = 6D4EFB8C1C692C6300B96B06 /* Build configuration list for PBXProject "SwaggerClient" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 6D4EFB881C692C6300B96B06; + productRefGroup = 6D4EFB921C692C6300B96B06 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 6D4EFB901C692C6300B96B06 /* SwaggerClient */, + 6D4EFBA41C692C6300B96B06 /* SwaggerClientTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 6D4EFB8F1C692C6300B96B06 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6D4EFB9F1C692C6300B96B06 /* LaunchScreen.storyboard in Resources */, + 6D4EFB9C1C692C6300B96B06 /* Assets.xcassets in Resources */, + 6D4EFB9A1C692C6300B96B06 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6D4EFBA31C692C6300B96B06 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 6D4EFB8D1C692C6300B96B06 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6D4EFB971C692C6300B96B06 /* ViewController.swift in Sources */, + 6D4EFB951C692C6300B96B06 /* AppDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6D4EFBA11C692C6300B96B06 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6D4EFBAA1C692C6300B96B06 /* SwaggerClientTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 6D4EFBA71C692C6300B96B06 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 6D4EFB901C692C6300B96B06 /* SwaggerClient */; + targetProxy = 6D4EFBA61C692C6300B96B06 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 6D4EFB981C692C6300B96B06 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 6D4EFB991C692C6300B96B06 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 6D4EFB9D1C692C6300B96B06 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 6D4EFB9E1C692C6300B96B06 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 6D4EFBAC1C692C6300B96B06 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.2; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 6D4EFBAD1C692C6300B96B06 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.2; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 6D4EFBAF1C692C6300B96B06 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + INFOPLIST_FILE = SwaggerClient/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.swagger.SwaggerClient; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 6D4EFBB01C692C6300B96B06 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + INFOPLIST_FILE = SwaggerClient/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.swagger.SwaggerClient; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; + 6D4EFBB21C692C6300B96B06 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + INFOPLIST_FILE = SwaggerClientTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.swagger.SwaggerClientTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SwaggerClient.app/SwaggerClient"; + }; + name = Debug; + }; + 6D4EFBB31C692C6300B96B06 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + INFOPLIST_FILE = SwaggerClientTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.swagger.SwaggerClientTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SwaggerClient.app/SwaggerClient"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 6D4EFB8C1C692C6300B96B06 /* Build configuration list for PBXProject "SwaggerClient" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 6D4EFBAC1C692C6300B96B06 /* Debug */, + 6D4EFBAD1C692C6300B96B06 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 6D4EFBAE1C692C6300B96B06 /* Build configuration list for PBXNativeTarget "SwaggerClient" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 6D4EFBAF1C692C6300B96B06 /* Debug */, + 6D4EFBB01C692C6300B96B06 /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; + 6D4EFBB11C692C6300B96B06 /* Build configuration list for PBXNativeTarget "SwaggerClientTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 6D4EFBB21C692C6300B96B06 /* Debug */, + 6D4EFBB31C692C6300B96B06 /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; +/* End XCConfigurationList section */ + }; + rootObject = 6D4EFB891C692C6300B96B06 /* Project object */; +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/SwaggerClient.xcworkspace/contents.xcworkspacedata b/samples/client/petstore/swift/SwaggerClientTests/SwaggerClient.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000000..04b012d9673 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/SwaggerClient.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/samples/client/petstore/swift/SwaggerClientTests/SwaggerClient/AppDelegate.swift b/samples/client/petstore/swift/SwaggerClientTests/SwaggerClient/AppDelegate.swift new file mode 100644 index 00000000000..3769667ad9c --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/SwaggerClient/AppDelegate.swift @@ -0,0 +1,46 @@ +// +// AppDelegate.swift +// SwaggerClient +// +// Created by Joseph Zuromski on 2/8/16. +// Copyright © 2016 Swagger. All rights reserved. +// + +import UIKit + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + + var window: UIWindow? + + + func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { + // Override point for customization after application launch. + return true + } + + func applicationWillResignActive(application: UIApplication) { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. + } + + func applicationDidEnterBackground(application: UIApplication) { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. + } + + func applicationWillEnterForeground(application: UIApplication) { + // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. + } + + func applicationDidBecomeActive(application: UIApplication) { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. + } + + func applicationWillTerminate(application: UIApplication) { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. + } + + +} + diff --git a/samples/client/petstore/swift/SwaggerClientTests/SwaggerClient/Assets.xcassets/AppIcon.appiconset/Contents.json b/samples/client/petstore/swift/SwaggerClientTests/SwaggerClient/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000000..36d2c80d889 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/SwaggerClient/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/samples/client/petstore/swift/SwaggerClientTests/SwaggerClient/Base.lproj/LaunchScreen.storyboard b/samples/client/petstore/swift/SwaggerClientTests/SwaggerClient/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 00000000000..2e721e1833f --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/SwaggerClient/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/client/petstore/swift/SwaggerClientTests/SwaggerClient/Base.lproj/Main.storyboard b/samples/client/petstore/swift/SwaggerClientTests/SwaggerClient/Base.lproj/Main.storyboard new file mode 100644 index 00000000000..3a2a49bad8c --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/SwaggerClient/Base.lproj/Main.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/client/petstore/swift/SwaggerClientTests/SwaggerClient/Info.plist b/samples/client/petstore/swift/SwaggerClientTests/SwaggerClient/Info.plist new file mode 100644 index 00000000000..40c6215d906 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/SwaggerClient/Info.plist @@ -0,0 +1,47 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/samples/client/petstore/swift/SwaggerClientTests/SwaggerClient/ViewController.swift b/samples/client/petstore/swift/SwaggerClientTests/SwaggerClient/ViewController.swift new file mode 100644 index 00000000000..cd7e9a16761 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/SwaggerClient/ViewController.swift @@ -0,0 +1,25 @@ +// +// ViewController.swift +// SwaggerClient +// +// Created by Joseph Zuromski on 2/8/16. +// Copyright © 2016 Swagger. All rights reserved. +// + +import UIKit + +class ViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view, typically from a nib. + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + +} + diff --git a/samples/client/petstore/swift/SwaggerClientTests/SwaggerClientTests/Info.plist b/samples/client/petstore/swift/SwaggerClientTests/SwaggerClientTests/Info.plist new file mode 100644 index 00000000000..ba72822e872 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/SwaggerClientTests/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/samples/client/petstore/swift/SwaggerClientTests/SwaggerClientTests/SwaggerClientTests.swift b/samples/client/petstore/swift/SwaggerClientTests/SwaggerClientTests/SwaggerClientTests.swift new file mode 100644 index 00000000000..27a86aa440a --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/SwaggerClientTests/SwaggerClientTests.swift @@ -0,0 +1,36 @@ +// +// SwaggerClientTests.swift +// SwaggerClientTests +// +// Created by Joseph Zuromski on 2/8/16. +// Copyright © 2016 Swagger. All rights reserved. +// + +import XCTest +@testable import SwaggerClient + +class SwaggerClientTests: XCTestCase { + + override func setUp() { + super.setUp() + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + + func testPerformanceExample() { + // This is an example of a performance test case. + self.measureBlock { + // Put the code you want to measure the time of here. + } + } + +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/pom.xml b/samples/client/petstore/swift/SwaggerClientTests/pom.xml new file mode 100644 index 00000000000..58c75cb5be1 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/pom.xml @@ -0,0 +1,65 @@ + + 4.0.0 + io.swagger + SwiftPetstoreClientTests + pom + 1.0-SNAPSHOT + Swift Swagger Petstore Client + + + + maven-dependency-plugin + + + package + + copy-dependencies + + + ${project.build.directory} + + + + + + org.codehaus.mojo + exec-maven-plugin + 1.2.1 + + + install-pods + pre-integration-test + + exec + + + pod + + install + + + + + xcodebuild-test + integration-test + + exec + + + xcodebuild + + -workspace + SwaggerClient.xcworkspace + -scheme + SwaggerClient + test + -destination + platform=iOS Simulator,name=iPhone 6,OS=9.2 + + + + + + + + From 4a0c7966a15caf84e07a61d972d81b00ff3eaaa5 Mon Sep 17 00:00:00 2001 From: Joseph Zuromski Date: Mon, 8 Feb 2016 12:56:49 -0800 Subject: [PATCH 095/189] add in pods --- .../petstore/swift/SwaggerClientTests/Podfile | 4 + .../swift/SwaggerClientTests/Podfile.lock | 39 + .../SwaggerClientTests/Pods/Alamofire/LICENSE | 19 + .../Pods/Alamofire/README.md | 1149 +++++++++++++ .../Pods/Alamofire/Source/Alamofire.swift | 368 +++++ .../Pods/Alamofire/Source/Download.swift | 244 +++ .../Pods/Alamofire/Source/Error.swift | 66 + .../Pods/Alamofire/Source/Manager.swift | 693 ++++++++ .../Alamofire/Source/MultipartFormData.swift | 669 ++++++++ .../Alamofire/Source/ParameterEncoding.swift | 251 +++ .../Pods/Alamofire/Source/Request.swift | 538 +++++++ .../Pods/Alamofire/Source/Response.swift | 83 + .../Source/ResponseSerialization.swift | 355 ++++ .../Pods/Alamofire/Source/Result.swift | 101 ++ .../Alamofire/Source/ServerTrustPolicy.swift | 302 ++++ .../Pods/Alamofire/Source/Stream.swift | 180 +++ .../Pods/Alamofire/Source/Upload.swift | 372 +++++ .../Pods/Alamofire/Source/Validation.swift | 189 +++ .../Private/OMGHTTPURLRQ/OMGFormURLEncode.h | 1 + .../Private/OMGHTTPURLRQ/OMGHTTPURLRQ.h | 1 + .../Private/OMGHTTPURLRQ/OMGUserAgent.h | 1 + .../Headers/Private/PromiseKit/AnyPromise.h | 1 + .../Private/PromiseKit/CALayer+AnyPromise.h | 1 + .../Private/PromiseKit/NSError+Cancellation.h | 1 + .../NSNotificationCenter+AnyPromise.h | 1 + .../PromiseKit/NSURLConnection+AnyPromise.h | 1 + .../Headers/Private/PromiseKit/PromiseKit.h | 1 + .../PromiseKit/UIActionSheet+AnyPromise.h | 1 + .../PromiseKit/UIAlertView+AnyPromise.h | 1 + .../Private/PromiseKit/UIView+AnyPromise.h | 1 + .../PromiseKit/UIViewController+AnyPromise.h | 1 + .../Headers/Private/PromiseKit/Umbrella.h | 1 + .../PetstoreClient.podspec.json | 22 + .../SwaggerClientTests/Pods/Manifest.lock | 39 + .../Pods/OMGHTTPURLRQ/README.markdown | 145 ++ .../OMGHTTPURLRQ/Sources/OMGFormURLEncode.h | 22 + .../OMGHTTPURLRQ/Sources/OMGFormURLEncode.m | 56 + .../Pods/OMGHTTPURLRQ/Sources/OMGHTTPURLRQ.h | 64 + .../Pods/OMGHTTPURLRQ/Sources/OMGHTTPURLRQ.m | 172 ++ .../Pods/OMGHTTPURLRQ/Sources/OMGUserAgent.h | 12 + .../Pods/OMGHTTPURLRQ/Sources/OMGUserAgent.m | 19 + .../Pods/Pods.xcodeproj/project.pbxproj | 1434 +++++++++++++++++ .../xcschemes/PetstoreClient.xcscheme | 60 + .../xcschemes/Alamofire.xcscheme | 60 + .../xcschemes/OMGHTTPURLRQ.xcscheme | 60 + .../jaz.xcuserdatad/xcschemes/Pods.xcscheme | 60 + .../xcschemes/PromiseKit.xcscheme | 60 + .../xcschemes/xcschememanagement.plist | 62 + .../NSNotificationCenter+AnyPromise.h | 43 + .../NSNotificationCenter+AnyPromise.m | 18 + .../NSNotificationCenter+Promise.swift | 51 + .../Foundation/NSObject+Promise.swift | 67 + .../Foundation/NSURLConnection+AnyPromise.h | 215 +++ .../Foundation/NSURLConnection+AnyPromise.m | 178 ++ .../Foundation/NSURLConnection+Promise.swift | 74 + .../Foundation/NSURLSession+Promise.swift | 71 + .../Categories/Foundation/afterlife.swift | 29 + .../QuartzCore/CALayer+AnyPromise.h | 40 + .../QuartzCore/CALayer+AnyPromise.m | 39 + .../Categories/UIKit/PMKAlertController.swift | 75 + .../UIKit/UIActionSheet+AnyPromise.h | 42 + .../UIKit/UIActionSheet+AnyPromise.m | 41 + .../UIKit/UIActionSheet+Promise.swift | 59 + .../Categories/UIKit/UIAlertView+AnyPromise.h | 40 + .../Categories/UIKit/UIAlertView+AnyPromise.m | 41 + .../UIKit/UIAlertView+Promise.swift | 58 + .../Categories/UIKit/UIView+AnyPromise.h | 80 + .../Categories/UIKit/UIView+AnyPromise.m | 64 + .../Categories/UIKit/UIView+Promise.swift | 48 + .../UIKit/UIViewController+AnyPromise.h | 90 ++ .../UIKit/UIViewController+AnyPromise.m | 130 ++ .../UIKit/UIViewController+Promise.swift | 136 ++ .../Pods/PromiseKit/README.markdown | 120 ++ .../PromiseKit/Sources/AnyPromise+Private.h | 47 + .../Pods/PromiseKit/Sources/AnyPromise.h | 268 +++ .../Pods/PromiseKit/Sources/AnyPromise.m | 154 ++ .../Pods/PromiseKit/Sources/AnyPromise.swift | 215 +++ .../Pods/PromiseKit/Sources/Error.swift | 216 +++ .../PromiseKit/Sources/NSError+Cancellation.h | 16 + .../Sources/NSMethodSignatureForBlock.m | 77 + .../Pods/PromiseKit/Sources/PMK.modulemap | 32 + .../PromiseKit/Sources/PMKCallVariadicBlock.m | 145 ++ .../Sources/Promise+Properties.swift | 57 + .../Pods/PromiseKit/Sources/Promise.swift | 655 ++++++++ .../Pods/PromiseKit/Sources/PromiseKit.h | 248 +++ .../Pods/PromiseKit/Sources/State.swift | 156 ++ .../PromiseKit/Sources/URLDataPromise.swift | 106 ++ .../Pods/PromiseKit/Sources/Umbrella.h | 59 + .../Pods/PromiseKit/Sources/after.m | 13 + .../Pods/PromiseKit/Sources/after.swift | 20 + .../PromiseKit/Sources/dispatch_promise.m | 10 + .../PromiseKit/Sources/dispatch_promise.swift | 23 + .../Pods/PromiseKit/Sources/hang.m | 24 + .../Pods/PromiseKit/Sources/join.m | 47 + .../Pods/PromiseKit/Sources/join.swift | 44 + .../Pods/PromiseKit/Sources/race.swift | 20 + .../Pods/PromiseKit/Sources/when.m | 86 + .../Pods/PromiseKit/Sources/when.swift | 87 + .../Alamofire/Alamofire-dummy.m | 5 + .../Alamofire/Alamofire-prefix.pch | 4 + .../Alamofire/Alamofire-umbrella.h | 6 + .../Alamofire/Alamofire.modulemap | 6 + .../Alamofire/Alamofire.xcconfig | 5 + .../Target Support Files/Alamofire/Info.plist | 26 + .../OMGHTTPURLRQ/Info.plist | 26 + .../OMGHTTPURLRQ/OMGHTTPURLRQ-dummy.m | 5 + .../OMGHTTPURLRQ/OMGHTTPURLRQ-prefix.pch | 4 + .../OMGHTTPURLRQ/OMGHTTPURLRQ-umbrella.h | 9 + .../OMGHTTPURLRQ/OMGHTTPURLRQ.modulemap | 6 + .../OMGHTTPURLRQ/OMGHTTPURLRQ.xcconfig | 4 + .../PetstoreClient/Info.plist | 26 + .../PetstoreClient/PetstoreClient-dummy.m | 5 + .../PetstoreClient/PetstoreClient-prefix.pch | 4 + .../PetstoreClient/PetstoreClient-umbrella.h | 6 + .../PetstoreClient/PetstoreClient.modulemap | 6 + .../PetstoreClient/PetstoreClient.xcconfig | 5 + .../Pods/Target Support Files/Pods/Info.plist | 26 + .../Pods/Pods-acknowledgements.markdown | 34 + .../Pods/Pods-acknowledgements.plist | 72 + .../Target Support Files/Pods/Pods-dummy.m | 5 + .../Pods/Pods-frameworks.sh | 97 ++ .../Pods/Pods-resources.sh | 95 ++ .../Target Support Files/Pods/Pods-umbrella.h | 6 + .../Pods/Pods.debug.xcconfig | 9 + .../Target Support Files/Pods/Pods.modulemap | 6 + .../Pods/Pods.release.xcconfig | 9 + .../PromiseKit/Info.plist | 26 + .../PromiseKit/PromiseKit-dummy.m | 5 + .../PromiseKit/PromiseKit-prefix.pch | 4 + .../PromiseKit/PromiseKit.modulemap | 32 + .../PromiseKit/PromiseKit.xcconfig | 7 + .../SwaggerClient.xcodeproj/project.pbxproj | 79 + .../contents.xcworkspacedata | 3 + 133 files changed, 13330 insertions(+) create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Podfile create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Podfile.lock create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/LICENSE create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/README.md create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/Alamofire.swift create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/Download.swift create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/Error.swift create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/Manager.swift create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/MultipartFormData.swift create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/ParameterEncoding.swift create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/Request.swift create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/Response.swift create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/ResponseSerialization.swift create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/Result.swift create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/ServerTrustPolicy.swift create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/Stream.swift create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/Upload.swift create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/Validation.swift create mode 120000 samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/OMGHTTPURLRQ/OMGFormURLEncode.h create mode 120000 samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/OMGHTTPURLRQ/OMGHTTPURLRQ.h create mode 120000 samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/OMGHTTPURLRQ/OMGUserAgent.h create mode 120000 samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/PromiseKit/AnyPromise.h create mode 120000 samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/PromiseKit/CALayer+AnyPromise.h create mode 120000 samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/PromiseKit/NSError+Cancellation.h create mode 120000 samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/PromiseKit/NSNotificationCenter+AnyPromise.h create mode 120000 samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/PromiseKit/NSURLConnection+AnyPromise.h create mode 120000 samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/PromiseKit/PromiseKit.h create mode 120000 samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/PromiseKit/UIActionSheet+AnyPromise.h create mode 120000 samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/PromiseKit/UIAlertView+AnyPromise.h create mode 120000 samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/PromiseKit/UIView+AnyPromise.h create mode 120000 samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/PromiseKit/UIViewController+AnyPromise.h create mode 120000 samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/PromiseKit/Umbrella.h create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Local Podspecs/PetstoreClient.podspec.json create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Manifest.lock create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/OMGHTTPURLRQ/README.markdown create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/OMGHTTPURLRQ/Sources/OMGFormURLEncode.h create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/OMGHTTPURLRQ/Sources/OMGFormURLEncode.m create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/OMGHTTPURLRQ/Sources/OMGHTTPURLRQ.h create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/OMGHTTPURLRQ/Sources/OMGHTTPURLRQ.m create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/OMGHTTPURLRQ/Sources/OMGUserAgent.h create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/OMGHTTPURLRQ/Sources/OMGUserAgent.m create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/project.pbxproj create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcshareddata/xcschemes/PetstoreClient.xcscheme create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcuserdata/jaz.xcuserdatad/xcschemes/Alamofire.xcscheme create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcuserdata/jaz.xcuserdatad/xcschemes/OMGHTTPURLRQ.xcscheme create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcuserdata/jaz.xcuserdatad/xcschemes/Pods.xcscheme create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcuserdata/jaz.xcuserdatad/xcschemes/PromiseKit.xcscheme create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcuserdata/jaz.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/Foundation/NSNotificationCenter+AnyPromise.h create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/Foundation/NSNotificationCenter+AnyPromise.m create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/Foundation/NSNotificationCenter+Promise.swift create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/Foundation/NSObject+Promise.swift create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/Foundation/NSURLConnection+AnyPromise.h create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/Foundation/NSURLConnection+AnyPromise.m create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/Foundation/NSURLConnection+Promise.swift create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/Foundation/NSURLSession+Promise.swift create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/Foundation/afterlife.swift create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/QuartzCore/CALayer+AnyPromise.h create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/QuartzCore/CALayer+AnyPromise.m create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/PMKAlertController.swift create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIActionSheet+AnyPromise.h create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIActionSheet+AnyPromise.m create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIActionSheet+Promise.swift create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIAlertView+AnyPromise.h create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIAlertView+AnyPromise.m create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIAlertView+Promise.swift create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIView+AnyPromise.h create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIView+AnyPromise.m create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIView+Promise.swift create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIViewController+AnyPromise.h create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIViewController+AnyPromise.m create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIViewController+Promise.swift create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/README.markdown create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/AnyPromise+Private.h create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/AnyPromise.h create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/AnyPromise.m create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/AnyPromise.swift create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/Error.swift create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/NSError+Cancellation.h create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/NSMethodSignatureForBlock.m create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/PMK.modulemap create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/PMKCallVariadicBlock.m create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/Promise+Properties.swift create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/Promise.swift create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/PromiseKit.h create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/State.swift create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/URLDataPromise.swift create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/Umbrella.h create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/after.m create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/after.swift create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/dispatch_promise.m create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/dispatch_promise.swift create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/hang.m create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/join.m create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/join.swift create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/race.swift create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/when.m create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/when.swift create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Alamofire/Alamofire-dummy.m create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Alamofire/Alamofire-prefix.pch create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Alamofire/Alamofire-umbrella.h create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Alamofire/Alamofire.modulemap create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Alamofire/Alamofire.xcconfig create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Alamofire/Info.plist create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/OMGHTTPURLRQ/Info.plist create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/OMGHTTPURLRQ/OMGHTTPURLRQ-dummy.m create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/OMGHTTPURLRQ/OMGHTTPURLRQ-prefix.pch create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/OMGHTTPURLRQ/OMGHTTPURLRQ-umbrella.h create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/OMGHTTPURLRQ/OMGHTTPURLRQ.modulemap create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/OMGHTTPURLRQ/OMGHTTPURLRQ.xcconfig create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/PetstoreClient/Info.plist create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/PetstoreClient/PetstoreClient-dummy.m create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/PetstoreClient/PetstoreClient-prefix.pch create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/PetstoreClient/PetstoreClient-umbrella.h create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/PetstoreClient/PetstoreClient.modulemap create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/PetstoreClient/PetstoreClient.xcconfig create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Pods/Info.plist create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Pods/Pods-acknowledgements.plist create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Pods/Pods-dummy.m create mode 100755 samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Pods/Pods-frameworks.sh create mode 100755 samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Pods/Pods-resources.sh create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Pods/Pods-umbrella.h create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Pods/Pods.debug.xcconfig create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Pods/Pods.modulemap create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Pods/Pods.release.xcconfig create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/PromiseKit/Info.plist create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/PromiseKit/PromiseKit-dummy.m create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/PromiseKit/PromiseKit-prefix.pch create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/PromiseKit/PromiseKit.modulemap create mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/PromiseKit/PromiseKit.xcconfig diff --git a/samples/client/petstore/swift/SwaggerClientTests/Podfile b/samples/client/petstore/swift/SwaggerClientTests/Podfile new file mode 100644 index 00000000000..5a8ad460aea --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Podfile @@ -0,0 +1,4 @@ +use_frameworks! +source 'https://github.com/CocoaPods/Specs.git' +pod "PetstoreClient", :path => "../" + diff --git a/samples/client/petstore/swift/SwaggerClientTests/Podfile.lock b/samples/client/petstore/swift/SwaggerClientTests/Podfile.lock new file mode 100644 index 00000000000..276eaa75e70 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Podfile.lock @@ -0,0 +1,39 @@ +PODS: + - Alamofire (3.1.5) + - OMGHTTPURLRQ (3.1.1): + - OMGHTTPURLRQ/RQ (= 3.1.1) + - OMGHTTPURLRQ/FormURLEncode (3.1.1) + - OMGHTTPURLRQ/RQ (3.1.1): + - OMGHTTPURLRQ/FormURLEncode + - OMGHTTPURLRQ/UserAgent + - OMGHTTPURLRQ/UserAgent (3.1.1) + - PetstoreClient (0.0.1): + - Alamofire (~> 3.1.4) + - PromiseKit (~> 3.0.0) + - PromiseKit (3.0.2): + - PromiseKit/Foundation (= 3.0.2) + - PromiseKit/QuartzCore (= 3.0.2) + - PromiseKit/UIKit (= 3.0.2) + - PromiseKit/CorePromise (3.0.2) + - PromiseKit/Foundation (3.0.2): + - OMGHTTPURLRQ (~> 3.1.0) + - PromiseKit/CorePromise + - PromiseKit/QuartzCore (3.0.2): + - PromiseKit/CorePromise + - PromiseKit/UIKit (3.0.2): + - PromiseKit/CorePromise + +DEPENDENCIES: + - PetstoreClient (from `../`) + +EXTERNAL SOURCES: + PetstoreClient: + :path: ../ + +SPEC CHECKSUMS: + Alamofire: 5f730ba29fd113b7ddd71c1e65d0c630acf5d7b0 + OMGHTTPURLRQ: 633f98ee745aeda02345935a52eec1784cddb589 + PetstoreClient: c9a3d06cf7954479a767135676406c4922cd3c4a + PromiseKit: ab1a380f7a30cf8cce663a2411e8b3580b10313d + +COCOAPODS: 0.39.0 diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/LICENSE b/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/LICENSE new file mode 100644 index 00000000000..bf300e4482e --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2014–2016 Alamofire Software Foundation (http://alamofire.org/) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/README.md b/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/README.md new file mode 100644 index 00000000000..bcc0ff4bd05 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/README.md @@ -0,0 +1,1149 @@ +![Alamofire: Elegant Networking in Swift](https://raw.githubusercontent.com/Alamofire/Alamofire/assets/alamofire.png) + +[![Build Status](https://travis-ci.org/Alamofire/Alamofire.svg)](https://travis-ci.org/Alamofire/Alamofire) +[![Cocoapods Compatible](https://img.shields.io/cocoapods/v/Alamofire.svg)](https://img.shields.io/cocoapods/v/Alamofire.svg) +[![Carthage Compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) +[![Platform](https://img.shields.io/cocoapods/p/Alamofire.svg?style=flat)](http://cocoadocs.org/docsets/Alamofire) +[![Twitter](https://img.shields.io/badge/twitter-@AlamofireSF-blue.svg?style=flat)](http://twitter.com/AlamofireSF) + +Alamofire is an HTTP networking library written in Swift. + +## Features + +- [x] Chainable Request / Response methods +- [x] URL / JSON / plist Parameter Encoding +- [x] Upload File / Data / Stream / MultipartFormData +- [x] Download using Request or Resume data +- [x] Authentication with NSURLCredential +- [x] HTTP Response Validation +- [x] TLS Certificate and Public Key Pinning +- [x] Progress Closure & NSProgress +- [x] cURL Debug Output +- [x] Comprehensive Unit Test Coverage +- [x] [Complete Documentation](http://cocoadocs.org/docsets/Alamofire) + +## Requirements + +- iOS 8.0+ / Mac OS X 10.9+ / tvOS 9.0+ / watchOS 2.0+ +- Xcode 7.2+ + +## Migration Guides + +- [Alamofire 3.0 Migration Guide](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Alamofire%203.0%20Migration%20Guide.md) +- [Alamofire 2.0 Migration Guide](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Alamofire%202.0%20Migration%20Guide.md) + +## Communication + +- If you **need help**, use [Stack Overflow](http://stackoverflow.com/questions/tagged/alamofire). (Tag 'alamofire') +- If you'd like to **ask a general question**, use [Stack Overflow](http://stackoverflow.com/questions/tagged/alamofire). +- If you **found a bug**, open an issue. +- If you **have a feature request**, open an issue. +- If you **want to contribute**, submit a pull request. + +## Installation + +> **Embedded frameworks require a minimum deployment target of iOS 8 or OS X Mavericks (10.9).** +> +> Alamofire is no longer supported on iOS 7 due to the lack of support for frameworks. Without frameworks, running Travis-CI against iOS 7 would require a second duplicated test target. The separate test suite would need to import all the Swift files and the tests would need to be duplicated and re-written. This split would be too difficult to maintain to ensure the highest possible quality of the Alamofire ecosystem. + +### CocoaPods + +[CocoaPods](http://cocoapods.org) is a dependency manager for Cocoa projects. You can install it with the following command: + +```bash +$ gem install cocoapods +``` + +> CocoaPods 0.39.0+ is required to build Alamofire 3.0.0+. + +To integrate Alamofire into your Xcode project using CocoaPods, specify it in your `Podfile`: + +```ruby +source 'https://github.com/CocoaPods/Specs.git' +platform :ios, '8.0' +use_frameworks! + +pod 'Alamofire', '~> 3.0' +``` + +Then, run the following command: + +```bash +$ pod install +``` + +### Carthage + +[Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks. + +You can install Carthage with [Homebrew](http://brew.sh/) using the following command: + +```bash +$ brew update +$ brew install carthage +``` + +To integrate Alamofire into your Xcode project using Carthage, specify it in your `Cartfile`: + +```ogdl +github "Alamofire/Alamofire" ~> 3.0 +``` + +Run `carthage update` to build the framework and drag the built `Alamofire.framework` into your Xcode project. + +### Manually + +If you prefer not to use either of the aforementioned dependency managers, you can integrate Alamofire into your project manually. + +#### Embedded Framework + +- Open up Terminal, `cd` into your top-level project directory, and run the following command "if" your project is not initialized as a git repository: + +```bash +$ git init +``` + +- Add Alamofire as a git [submodule](http://git-scm.com/docs/git-submodule) by running the following command: + +```bash +$ git submodule add https://github.com/Alamofire/Alamofire.git +``` + +- Open the new `Alamofire` folder, and drag the `Alamofire.xcodeproj` into the Project Navigator of your application's Xcode project. + + > It should appear nested underneath your application's blue project icon. Whether it is above or below all the other Xcode groups does not matter. + +- Select the `Alamofire.xcodeproj` in the Project Navigator and verify the deployment target matches that of your application target. +- Next, select your application project in the Project Navigator (blue project icon) to navigate to the target configuration window and select the application target under the "Targets" heading in the sidebar. +- In the tab bar at the top of that window, open the "General" panel. +- Click on the `+` button under the "Embedded Binaries" section. +- You will see two different `Alamofire.xcodeproj` folders each with two different versions of the `Alamofire.framework` nested inside a `Products` folder. + + > It does not matter which `Products` folder you choose from, but it does matter whether you choose the top or bottom `Alamofire.framework`. + +- Select the top `Alamofire.framework` for iOS and the bottom one for OS X. + + > You can verify which one you selected by inspecting the build log for your project. The build target for `Alamofire` will be listed as either `Alamofire iOS` or `Alamofire OSX`. + +- And that's it! + +> The `Alamofire.framework` is automagically added as a target dependency, linked framework and embedded framework in a copy files build phase which is all you need to build on the simulator and a device. + +--- + +## Usage + +### Making a Request + +```swift +import Alamofire + +Alamofire.request(.GET, "https://httpbin.org/get") +``` + +### Response Handling + +```swift +Alamofire.request(.GET, "https://httpbin.org/get", parameters: ["foo": "bar"]) + .responseJSON { response in + print(response.request) // original URL request + print(response.response) // URL response + print(response.data) // server data + print(response.result) // result of response serialization + + if let JSON = response.result.value { + print("JSON: \(JSON)") + } + } +``` + +> Networking in Alamofire is done _asynchronously_. Asynchronous programming may be a source of frustration to programmers unfamiliar with the concept, but there are [very good reasons](https://developer.apple.com/library/ios/qa/qa1693/_index.html) for doing it this way. + +> Rather than blocking execution to wait for a response from the server, a [callback](http://en.wikipedia.org/wiki/Callback_%28computer_programming%29) is specified to handle the response once it's received. The result of a request is only available inside the scope of a response handler. Any execution contingent on the response or data received from the server must be done within a handler. + +### Response Serialization + +**Built-in Response Methods** + +- `response()` +- `responseData()` +- `responseString(encoding: NSStringEncoding)` +- `responseJSON(options: NSJSONReadingOptions)` +- `responsePropertyList(options: NSPropertyListReadOptions)` + +#### Response Handler + +```swift +Alamofire.request(.GET, "https://httpbin.org/get", parameters: ["foo": "bar"]) + .response { request, response, data, error in + print(request) + print(response) + print(data) + print(error) + } +``` + +> The `response` serializer does NOT evaluate any of the response data. It merely forwards on all the information directly from the URL session delegate. We strongly encourage you to leverage the other responser serializers taking advantage of `Response` and `Result` types. + +#### Response Data Handler + +```swift +Alamofire.request(.GET, "https://httpbin.org/get", parameters: ["foo": "bar"]) + .responseData { response in + print(response.request) + print(response.response) + print(response.result) + } +``` + +#### Response String Handler + +```swift +Alamofire.request(.GET, "https://httpbin.org/get") + .responseString { response in + print("Success: \(response.result.isSuccess)") + print("Response String: \(response.result.value)") + } +``` + +#### Response JSON Handler + +```swift +Alamofire.request(.GET, "https://httpbin.org/get") + .responseJSON { response in + debugPrint(response) + } +``` + +#### Chained Response Handlers + +Response handlers can even be chained: + +```swift +Alamofire.request(.GET, "https://httpbin.org/get") + .responseString { response in + print("Response String: \(response.result.value)") + } + .responseJSON { response in + print("Response JSON: \(response.result.value)") + } +``` + +### HTTP Methods + +`Alamofire.Method` lists the HTTP methods defined in [RFC 7231 §4.3](http://tools.ietf.org/html/rfc7231#section-4.3): + +```swift +public enum Method: String { + case OPTIONS, GET, HEAD, POST, PUT, PATCH, DELETE, TRACE, CONNECT +} +``` + +These values can be passed as the first argument of the `Alamofire.request` method: + +```swift +Alamofire.request(.POST, "https://httpbin.org/post") + +Alamofire.request(.PUT, "https://httpbin.org/put") + +Alamofire.request(.DELETE, "https://httpbin.org/delete") +``` + +### Parameters + +#### GET Request With URL-Encoded Parameters + +```swift +Alamofire.request(.GET, "https://httpbin.org/get", parameters: ["foo": "bar"]) +// https://httpbin.org/get?foo=bar +``` + +#### POST Request With URL-Encoded Parameters + +```swift +let parameters = [ + "foo": "bar", + "baz": ["a", 1], + "qux": [ + "x": 1, + "y": 2, + "z": 3 + ] +] + +Alamofire.request(.POST, "https://httpbin.org/post", parameters: parameters) +// HTTP body: foo=bar&baz[]=a&baz[]=1&qux[x]=1&qux[y]=2&qux[z]=3 +``` + +### Parameter Encoding + +Parameters can also be encoded as JSON, Property List, or any custom format, using the `ParameterEncoding` enum: + +```swift +enum ParameterEncoding { + case URL + case URLEncodedInURL + case JSON + case PropertyList(format: NSPropertyListFormat, options: NSPropertyListWriteOptions) + case Custom((URLRequestConvertible, [String: AnyObject]?) -> (NSMutableURLRequest, NSError?)) + + func encode(request: NSURLRequest, parameters: [String: AnyObject]?) -> (NSURLRequest, NSError?) + { ... } +} +``` + +- `URL`: A query string to be set as or appended to any existing URL query for `GET`, `HEAD`, and `DELETE` requests, or set as the body for requests with any other HTTP method. The `Content-Type` HTTP header field of an encoded request with HTTP body is set to `application/x-www-form-urlencoded`. _Since there is no published specification for how to encode collection types, Alamofire follows the convention of appending `[]` to the key for array values (`foo[]=1&foo[]=2`), and appending the key surrounded by square brackets for nested dictionary values (`foo[bar]=baz`)._ +- `URLEncodedInURL`: Creates query string to be set as or appended to any existing URL query. Uses the same implementation as the `.URL` case, but always applies the encoded result to the URL. +- `JSON`: Uses `NSJSONSerialization` to create a JSON representation of the parameters object, which is set as the body of the request. The `Content-Type` HTTP header field of an encoded request is set to `application/json`. +- `PropertyList`: Uses `NSPropertyListSerialization` to create a plist representation of the parameters object, according to the associated format and write options values, which is set as the body of the request. The `Content-Type` HTTP header field of an encoded request is set to `application/x-plist`. +- `Custom`: Uses the associated closure value to construct a new request given an existing request and parameters. + +#### Manual Parameter Encoding of an NSURLRequest + +```swift +let URL = NSURL(string: "https://httpbin.org/get")! +var request = NSMutableURLRequest(URL: URL) + +let parameters = ["foo": "bar"] +let encoding = Alamofire.ParameterEncoding.URL +(request, _) = encoding.encode(request, parameters: parameters) +``` + +#### POST Request with JSON-encoded Parameters + +```swift +let parameters = [ + "foo": [1,2,3], + "bar": [ + "baz": "qux" + ] +] + +Alamofire.request(.POST, "https://httpbin.org/post", parameters: parameters, encoding: .JSON) +// HTTP body: {"foo": [1, 2, 3], "bar": {"baz": "qux"}} +``` + +### HTTP Headers + +Adding a custom HTTP header to a `Request` is supported directly in the global `request` method. This makes it easy to attach HTTP headers to a `Request` that can be constantly changing. + +> For HTTP headers that do not change, it is recommended to set them on the `NSURLSessionConfiguration` so they are automatically applied to any `NSURLSessionTask` created by the underlying `NSURLSession`. + +```swift +let headers = [ + "Authorization": "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==", + "Content-Type": "application/x-www-form-urlencoded" +] + +Alamofire.request(.GET, "https://httpbin.org/get", headers: headers) + .responseJSON { response in + debugPrint(response) + } +``` + +### Caching + +Caching is handled on the system framework level by [`NSURLCache`](https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSURLCache_Class/Reference/Reference.html#//apple_ref/occ/cl/NSURLCache). + +### Uploading + +**Supported Upload Types** + +- File +- Data +- Stream +- MultipartFormData + +#### Uploading a File + +```swift +let fileURL = NSBundle.mainBundle().URLForResource("Default", withExtension: "png") +Alamofire.upload(.POST, "https://httpbin.org/post", file: fileURL) +``` + +#### Uploading with Progress + +```swift +Alamofire.upload(.POST, "https://httpbin.org/post", file: fileURL) + .progress { bytesWritten, totalBytesWritten, totalBytesExpectedToWrite in + print(totalBytesWritten) + + // This closure is NOT called on the main queue for performance + // reasons. To update your ui, dispatch to the main queue. + dispatch_async(dispatch_get_main_queue()) { + print("Total bytes written on main queue: \(totalBytesWritten)") + } + } + .responseJSON { response in + debugPrint(response) + } +``` + +#### Uploading MultipartFormData + +```swift +Alamofire.upload( + .POST, + "https://httpbin.org/post", + multipartFormData: { multipartFormData in + multipartFormData.appendBodyPart(fileURL: unicornImageURL, name: "unicorn") + multipartFormData.appendBodyPart(fileURL: rainbowImageURL, name: "rainbow") + }, + encodingCompletion: { encodingResult in + switch encodingResult { + case .Success(let upload, _, _): + upload.responseJSON { response in + debugPrint(response) + } + case .Failure(let encodingError): + print(encodingError) + } + } +) +``` + +### Downloading + +**Supported Download Types** + +- Request +- Resume Data + +#### Downloading a File + +```swift +Alamofire.download(.GET, "https://httpbin.org/stream/100") { temporaryURL, response in + let fileManager = NSFileManager.defaultManager() + let directoryURL = fileManager.URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0] + let pathComponent = response.suggestedFilename + + return directoryURL.URLByAppendingPathComponent(pathComponent!) +} +``` + +#### Using the Default Download Destination + +```swift +let destination = Alamofire.Request.suggestedDownloadDestination(directory: .DocumentDirectory, domain: .UserDomainMask) +Alamofire.download(.GET, "https://httpbin.org/stream/100", destination: destination) +``` + +#### Downloading a File w/Progress + +```swift +Alamofire.download(.GET, "https://httpbin.org/stream/100", destination: destination) + .progress { bytesRead, totalBytesRead, totalBytesExpectedToRead in + print(totalBytesRead) + + // This closure is NOT called on the main queue for performance + // reasons. To update your ui, dispatch to the main queue. + dispatch_async(dispatch_get_main_queue()) { + print("Total bytes read on main queue: \(totalBytesRead)") + } + } + .response { _, _, _, error in + if let error = error { + print("Failed with error: \(error)") + } else { + print("Downloaded file successfully") + } + } +``` + +#### Accessing Resume Data for Failed Downloads + +```swift +Alamofire.download(.GET, "https://httpbin.org/stream/100", destination: destination) + .response { _, _, data, _ in + if let + data = data, + resumeDataString = NSString(data: data, encoding: NSUTF8StringEncoding) + { + print("Resume Data: \(resumeDataString)") + } else { + print("Resume Data was empty") + } + } +``` + +> The `data` parameter is automatically populated with the `resumeData` if available. + +```swift +let download = Alamofire.download(.GET, "https://httpbin.org/stream/100", destination: destination) +download.response { _, _, _, _ in + if let + resumeData = download.resumeData, + resumeDataString = NSString(data: resumeData, encoding: NSUTF8StringEncoding) + { + print("Resume Data: \(resumeDataString)") + } else { + print("Resume Data was empty") + } +} +``` + +### Authentication + +Authentication is handled on the system framework level by [`NSURLCredential` and `NSURLAuthenticationChallenge`](https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSURLAuthenticationChallenge_Class/Reference/Reference.html). + +**Supported Authentication Schemes** + +- [HTTP Basic](http://en.wikipedia.org/wiki/Basic_access_authentication) +- [HTTP Digest](http://en.wikipedia.org/wiki/Digest_access_authentication) +- [Kerberos](http://en.wikipedia.org/wiki/Kerberos_%28protocol%29) +- [NTLM](http://en.wikipedia.org/wiki/NT_LAN_Manager) + +#### HTTP Basic Authentication + +The `authenticate` method on a `Request` will automatically provide an `NSURLCredential` to an `NSURLAuthenticationChallenge` when appropriate: + +```swift +let user = "user" +let password = "password" + +Alamofire.request(.GET, "https://httpbin.org/basic-auth/\(user)/\(password)") + .authenticate(user: user, password: password) + .responseJSON { response in + debugPrint(response) + } +``` + +Depending upon your server implementation, an `Authorization` header may also be appropriate: + +```swift +let user = "user" +let password = "password" + +let credentialData = "\(user):\(password)".dataUsingEncoding(NSUTF8StringEncoding)! +let base64Credentials = credentialData.base64EncodedStringWithOptions([]) + +let headers = ["Authorization": "Basic \(base64Credentials)"] + +Alamofire.request(.GET, "https://httpbin.org/basic-auth/user/password", headers: headers) + .responseJSON { response in + debugPrint(response) + } +``` + +#### Authentication with NSURLCredential + +```swift +let user = "user" +let password = "password" + +let credential = NSURLCredential(user: user, password: password, persistence: .ForSession) + +Alamofire.request(.GET, "https://httpbin.org/basic-auth/\(user)/\(password)") + .authenticate(usingCredential: credential) + .responseJSON { response in + debugPrint(response) + } +``` + +### Validation + +By default, Alamofire treats any completed request to be successful, regardless of the content of the response. Calling `validate` before a response handler causes an error to be generated if the response had an unacceptable status code or MIME type. + +#### Manual Validation + +```swift +Alamofire.request(.GET, "https://httpbin.org/get", parameters: ["foo": "bar"]) + .validate(statusCode: 200..<300) + .validate(contentType: ["application/json"]) + .response { response in + print(response) + } +``` + +#### Automatic Validation + +Automatically validates status code within `200...299` range, and that the `Content-Type` header of the response matches the `Accept` header of the request, if one is provided. + +```swift +Alamofire.request(.GET, "https://httpbin.org/get", parameters: ["foo": "bar"]) + .validate() + .responseJSON { response in + switch response.result { + case .Success: + print("Validation Successful") + case .Failure(let error): + print(error) + } + } +``` + +### Printable + +```swift +let request = Alamofire.request(.GET, "https://httpbin.org/ip") + +print(request) +// GET https://httpbin.org/ip (200) +``` + +### DebugPrintable + +```swift +let request = Alamofire.request(.GET, "https://httpbin.org/get", parameters: ["foo": "bar"]) + +debugPrint(request) +``` + +#### Output (cURL) + +```bash +$ curl -i \ + -H "User-Agent: Alamofire" \ + -H "Accept-Encoding: Accept-Encoding: gzip;q=1.0,compress;q=0.5" \ + -H "Accept-Language: en;q=1.0,fr;q=0.9,de;q=0.8,zh-Hans;q=0.7,zh-Hant;q=0.6,ja;q=0.5" \ + "https://httpbin.org/get?foo=bar" +``` + +--- + +## Advanced Usage + +> Alamofire is built on `NSURLSession` and the Foundation URL Loading System. To make the most of +this framework, it is recommended that you be familiar with the concepts and capabilities of the underlying networking stack. + +**Recommended Reading** + +- [URL Loading System Programming Guide](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/URLLoadingSystem/URLLoadingSystem.html) +- [NSURLSession Class Reference](https://developer.apple.com/library/mac/documentation/Foundation/Reference/NSURLSession_class/Introduction/Introduction.html#//apple_ref/occ/cl/NSURLSession) +- [NSURLCache Class Reference](https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSURLCache_Class/Reference/Reference.html#//apple_ref/occ/cl/NSURLCache) +- [NSURLAuthenticationChallenge Class Reference](https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSURLAuthenticationChallenge_Class/Reference/Reference.html) + +### Manager + +Top-level convenience methods like `Alamofire.request` use a shared instance of `Alamofire.Manager`, which is configured with the default `NSURLSessionConfiguration`. + +As such, the following two statements are equivalent: + +```swift +Alamofire.request(.GET, "https://httpbin.org/get") +``` + +```swift +let manager = Alamofire.Manager.sharedInstance +manager.request(NSURLRequest(URL: NSURL(string: "https://httpbin.org/get")!)) +``` + +Applications can create managers for background and ephemeral sessions, as well as new managers that customize the default session configuration, such as for default headers (`HTTPAdditionalHeaders`) or timeout interval (`timeoutIntervalForRequest`). + +#### Creating a Manager with Default Configuration + +```swift +let configuration = NSURLSessionConfiguration.defaultSessionConfiguration() +let manager = Alamofire.Manager(configuration: configuration) +``` + +#### Creating a Manager with Background Configuration + +```swift +let configuration = NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier("com.example.app.background") +let manager = Alamofire.Manager(configuration: configuration) +``` + +#### Creating a Manager with Ephemeral Configuration + +```swift +let configuration = NSURLSessionConfiguration.ephemeralSessionConfiguration() +let manager = Alamofire.Manager(configuration: configuration) +``` + +#### Modifying Session Configuration + +```swift +var defaultHeaders = Alamofire.Manager.sharedInstance.session.configuration.HTTPAdditionalHeaders ?? [:] +defaultHeaders["DNT"] = "1 (Do Not Track Enabled)" + +let configuration = NSURLSessionConfiguration.defaultSessionConfiguration() +configuration.HTTPAdditionalHeaders = defaultHeaders + +let manager = Alamofire.Manager(configuration: configuration) +``` + +> This is **not** recommended for `Authorization` or `Content-Type` headers. Instead, use `URLRequestConvertible` and `ParameterEncoding`, respectively. + +### Request + +The result of a `request`, `upload`, or `download` method is an instance of `Alamofire.Request`. A request is always created using a constructor method from an owning manager, and never initialized directly. + +Methods like `authenticate`, `validate` and `responseData` return the caller in order to facilitate chaining. + +Requests can be suspended, resumed, and cancelled: + +- `suspend()`: Suspends the underlying task and dispatch queue +- `resume()`: Resumes the underlying task and dispatch queue. If the owning manager does not have `startRequestsImmediately` set to `true`, the request must call `resume()` in order to start. +- `cancel()`: Cancels the underlying task, producing an error that is passed to any registered response handlers. + +### Response Serialization + +#### Creating a Custom Response Serializer + +Alamofire provides built-in response serialization for strings, JSON, and property lists, but others can be added in extensions on `Alamofire.Request`. + +For example, here's how a response handler using [Ono](https://github.com/mattt/Ono) might be implemented: + +```swift +extension Request { + public static func XMLResponseSerializer() -> ResponseSerializer { + return ResponseSerializer { request, response, data, error in + guard error == nil else { return .Failure(error!) } + + guard let validData = data else { + let failureReason = "Data could not be serialized. Input data was nil." + let error = Error.errorWithCode(.DataSerializationFailed, failureReason: failureReason) + return .Failure(error) + } + + do { + let XML = try ONOXMLDocument(data: validData) + return .Success(XML) + } catch { + return .Failure(error as NSError) + } + } + } + + public func responseXMLDocument(completionHandler: Response -> Void) -> Self { + return response(responseSerializer: Request.XMLResponseSerializer(), completionHandler: completionHandler) + } +} +``` + +#### Generic Response Object Serialization + +Generics can be used to provide automatic, type-safe response object serialization. + +```swift +public protocol ResponseObjectSerializable { + init?(response: NSHTTPURLResponse, representation: AnyObject) +} + +extension Request { + public func responseObject(completionHandler: Response -> Void) -> Self { + let responseSerializer = ResponseSerializer { request, response, data, error in + guard error == nil else { return .Failure(error!) } + + let JSONResponseSerializer = Request.JSONResponseSerializer(options: .AllowFragments) + let result = JSONResponseSerializer.serializeResponse(request, response, data, error) + + switch result { + case .Success(let value): + if let + response = response, + responseObject = T(response: response, representation: value) + { + return .Success(responseObject) + } else { + let failureReason = "JSON could not be serialized into response object: \(value)" + let error = Error.errorWithCode(.JSONSerializationFailed, failureReason: failureReason) + return .Failure(error) + } + case .Failure(let error): + return .Failure(error) + } + } + + return response(responseSerializer: responseSerializer, completionHandler: completionHandler) + } +} +``` + +```swift +final class User: ResponseObjectSerializable { + let username: String + let name: String + + init?(response: NSHTTPURLResponse, representation: AnyObject) { + self.username = response.URL!.lastPathComponent! + self.name = representation.valueForKeyPath("name") as! String + } +} +``` + +```swift +Alamofire.request(.GET, "https://example.com/users/mattt") + .responseObject { (response: Response) in + debugPrint(response) + } +``` + +The same approach can also be used to handle endpoints that return a representation of a collection of objects: + +```swift +public protocol ResponseCollectionSerializable { + static func collection(response response: NSHTTPURLResponse, representation: AnyObject) -> [Self] +} + +extension Alamofire.Request { + public func responseCollection(completionHandler: Response<[T], NSError> -> Void) -> Self { + let responseSerializer = ResponseSerializer<[T], NSError> { request, response, data, error in + guard error == nil else { return .Failure(error!) } + + let JSONSerializer = Request.JSONResponseSerializer(options: .AllowFragments) + let result = JSONSerializer.serializeResponse(request, response, data, error) + + switch result { + case .Success(let value): + if let response = response { + return .Success(T.collection(response: response, representation: value)) + } else { + let failureReason = "Response collection could not be serialized due to nil response" + let error = Error.errorWithCode(.JSONSerializationFailed, failureReason: failureReason) + return .Failure(error) + } + case .Failure(let error): + return .Failure(error) + } + } + + return response(responseSerializer: responseSerializer, completionHandler: completionHandler) + } +} +``` + +```swift +final class User: ResponseObjectSerializable, ResponseCollectionSerializable { + let username: String + let name: String + + init?(response: NSHTTPURLResponse, representation: AnyObject) { + self.username = response.URL!.lastPathComponent! + self.name = representation.valueForKeyPath("name") as! String + } + + static func collection(response response: NSHTTPURLResponse, representation: AnyObject) -> [User] { + var users: [User] = [] + + if let representation = representation as? [[String: AnyObject]] { + for userRepresentation in representation { + if let user = User(response: response, representation: userRepresentation) { + users.append(user) + } + } + } + + return users + } +} +``` + +```swift +Alamofire.request(.GET, "http://example.com/users") + .responseCollection { (response: Response<[User], NSError>) in + debugPrint(response) + } +``` + +### URLStringConvertible + +Types adopting the `URLStringConvertible` protocol can be used to construct URL strings, which are then used to construct URL requests. `NSString`, `NSURL`, `NSURLComponents`, and `NSURLRequest` conform to `URLStringConvertible` by default, allowing any of them to be passed as `URLString` parameters to the `request`, `upload`, and `download` methods: + +```swift +let string = NSString(string: "https://httpbin.org/post") +Alamofire.request(.POST, string) + +let URL = NSURL(string: string)! +Alamofire.request(.POST, URL) + +let URLRequest = NSURLRequest(URL: URL) +Alamofire.request(.POST, URLRequest) // overrides `HTTPMethod` of `URLRequest` + +let URLComponents = NSURLComponents(URL: URL, resolvingAgainstBaseURL: true) +Alamofire.request(.POST, URLComponents) +``` + +Applications interacting with web applications in a significant manner are encouraged to have custom types conform to `URLStringConvertible` as a convenient way to map domain-specific models to server resources. + +#### Type-Safe Routing + +```swift +extension User: URLStringConvertible { + static let baseURLString = "http://example.com" + + var URLString: String { + return User.baseURLString + "/users/\(username)/" + } +} +``` + +```swift +let user = User(username: "mattt") +Alamofire.request(.GET, user) // http://example.com/users/mattt +``` + +### URLRequestConvertible + +Types adopting the `URLRequestConvertible` protocol can be used to construct URL requests. `NSURLRequest` conforms to `URLRequestConvertible` by default, allowing it to be passed into `request`, `upload`, and `download` methods directly (this is the recommended way to specify custom HTTP body for individual requests): + +```swift +let URL = NSURL(string: "https://httpbin.org/post")! +let mutableURLRequest = NSMutableURLRequest(URL: URL) +mutableURLRequest.HTTPMethod = "POST" + +let parameters = ["foo": "bar"] + +do { + mutableURLRequest.HTTPBody = try NSJSONSerialization.dataWithJSONObject(parameters, options: NSJSONWritingOptions()) +} catch { + // No-op +} + +mutableURLRequest.setValue("application/json", forHTTPHeaderField: "Content-Type") + +Alamofire.request(mutableURLRequest) +``` + +Applications interacting with web applications in a significant manner are encouraged to have custom types conform to `URLRequestConvertible` as a way to ensure consistency of requested endpoints. Such an approach can be used to abstract away server-side inconsistencies and provide type-safe routing, as well as manage authentication credentials and other state. + +#### API Parameter Abstraction + +```swift +enum Router: URLRequestConvertible { + static let baseURLString = "http://example.com" + static let perPage = 50 + + case Search(query: String, page: Int) + + // MARK: URLRequestConvertible + + var URLRequest: NSMutableURLRequest { + let result: (path: String, parameters: [String: AnyObject]) = { + switch self { + case .Search(let query, let page) where page > 1: + return ("/search", ["q": query, "offset": Router.perPage * page]) + case .Search(let query, _): + return ("/search", ["q": query]) + } + }() + + let URL = NSURL(string: Router.baseURLString)! + let URLRequest = NSURLRequest(URL: URL.URLByAppendingPathComponent(result.path)) + let encoding = Alamofire.ParameterEncoding.URL + + return encoding.encode(URLRequest, parameters: result.parameters).0 + } +} +``` + +```swift +Alamofire.request(Router.Search(query: "foo bar", page: 1)) // ?q=foo%20bar&offset=50 +``` + +#### CRUD & Authorization + +```swift +enum Router: URLRequestConvertible { + static let baseURLString = "http://example.com" + static var OAuthToken: String? + + case CreateUser([String: AnyObject]) + case ReadUser(String) + case UpdateUser(String, [String: AnyObject]) + case DestroyUser(String) + + var method: Alamofire.Method { + switch self { + case .CreateUser: + return .POST + case .ReadUser: + return .GET + case .UpdateUser: + return .PUT + case .DestroyUser: + return .DELETE + } + } + + var path: String { + switch self { + case .CreateUser: + return "/users" + case .ReadUser(let username): + return "/users/\(username)" + case .UpdateUser(let username, _): + return "/users/\(username)" + case .DestroyUser(let username): + return "/users/\(username)" + } + } + + // MARK: URLRequestConvertible + + var URLRequest: NSMutableURLRequest { + let URL = NSURL(string: Router.baseURLString)! + let mutableURLRequest = NSMutableURLRequest(URL: URL.URLByAppendingPathComponent(path)) + mutableURLRequest.HTTPMethod = method.rawValue + + if let token = Router.OAuthToken { + mutableURLRequest.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization") + } + + switch self { + case .CreateUser(let parameters): + return Alamofire.ParameterEncoding.JSON.encode(mutableURLRequest, parameters: parameters).0 + case .UpdateUser(_, let parameters): + return Alamofire.ParameterEncoding.URL.encode(mutableURLRequest, parameters: parameters).0 + default: + return mutableURLRequest + } + } +} +``` + +```swift +Alamofire.request(Router.ReadUser("mattt")) // GET /users/mattt +``` + +### Security + +Using a secure HTTPS connection when communicating with servers and web services is an important step in securing sensitive data. By default, Alamofire will evaluate the certificate chain provided by the server using Apple's built in validation provided by the Security framework. While this guarantees the certificate chain is valid, it does not prevent man-in-the-middle (MITM) attacks or other potential vulnerabilities. In order to mitigate MITM attacks, applications dealing with sensitive customer data or financial information should use certificate or public key pinning provided by the `ServerTrustPolicy`. + +#### ServerTrustPolicy + +The `ServerTrustPolicy` enumeration evaluates the server trust generally provided by an `NSURLAuthenticationChallenge` when connecting to a server over a secure HTTPS connection. + +```swift +let serverTrustPolicy = ServerTrustPolicy.PinCertificates( + certificates: ServerTrustPolicy.certificatesInBundle(), + validateCertificateChain: true, + validateHost: true +) +``` + +There are many different cases of server trust evaluation giving you complete control over the validation process: + +* `PerformDefaultEvaluation`: Uses the default server trust evaluation while allowing you to control whether to validate the host provided by the challenge. +* `PinCertificates`: Uses the pinned certificates to validate the server trust. The server trust is considered valid if one of the pinned certificates match one of the server certificates. +* `PinPublicKeys`: Uses the pinned public keys to validate the server trust. The server trust is considered valid if one of the pinned public keys match one of the server certificate public keys. +* `DisableEvaluation`: Disables all evaluation which in turn will always consider any server trust as valid. +* `CustomEvaluation`: Uses the associated closure to evaluate the validity of the server trust thus giving you complete control over the validation process. Use with caution. + +#### Server Trust Policy Manager + +The `ServerTrustPolicyManager` is responsible for storing an internal mapping of server trust policies to a particular host. This allows Alamofire to evaluate each host against a different server trust policy. + +```swift +let serverTrustPolicies: [String: ServerTrustPolicy] = [ + "test.example.com": .PinCertificates( + certificates: ServerTrustPolicy.certificatesInBundle(), + validateCertificateChain: true, + validateHost: true + ), + "insecure.expired-apis.com": .DisableEvaluation +] + +let manager = Manager( + serverTrustPolicyManager: ServerTrustPolicyManager(policies: serverTrustPolicies) +) +``` + +> Make sure to keep a reference to the new `Manager` instance, otherwise your requests will all get cancelled when your `manager` is deallocated. + +These server trust policies will result in the following behavior: + +* `test.example.com` will always use certificate pinning with certificate chain and host validation enabled thus requiring the following criteria to be met to allow the TLS handshake to succeed: + * Certificate chain MUST be valid. + * Certificate chain MUST include one of the pinned certificates. + * Challenge host MUST match the host in the certificate chain's leaf certificate. +* `insecure.expired-apis.com` will never evaluate the certificate chain and will always allow the TLS handshake to succeed. +* All other hosts will use the default evaluation provided by Apple. + +##### Subclassing Server Trust Policy Manager + +If you find yourself needing more flexible server trust policy matching behavior (i.e. wildcarded domains), then subclass the `ServerTrustPolicyManager` and override the `serverTrustPolicyForHost` method with your own custom implementation. + +```swift +class CustomServerTrustPolicyManager: ServerTrustPolicyManager { + override func serverTrustPolicyForHost(host: String) -> ServerTrustPolicy? { + var policy: ServerTrustPolicy? + + // Implement your custom domain matching behavior... + + return policy + } +} +``` + +#### Validating the Host + +The `.PerformDefaultEvaluation`, `.PinCertificates` and `.PinPublicKeys` server trust policies all take a `validateHost` parameter. Setting the value to `true` will cause the server trust evaluation to verify that hostname in the certificate matches the hostname of the challenge. If they do not match, evaluation will fail. A `validateHost` value of `false` will still evaluate the full certificate chain, but will not validate the hostname of the leaf certificate. + +> It is recommended that `validateHost` always be set to `true` in production environments. + +#### Validating the Certificate Chain + +Pinning certificates and public keys both have the option of validating the certificate chain using the `validateCertificateChain` parameter. By setting this value to `true`, the full certificate chain will be evaluated in addition to performing a byte equality check against the pinned certficates or public keys. A value of `false` will skip the certificate chain validation, but will still perform the byte equality check. + +There are several cases where it may make sense to disable certificate chain validation. The most common use cases for disabling validation are self-signed and expired certificates. The evaluation would always fail in both of these cases, but the byte equality check will still ensure you are receiving the certificate you expect from the server. + +> It is recommended that `validateCertificateChain` always be set to `true` in production environments. + +#### App Transport Security + +With the addition of App Transport Security (ATS) in iOS 9, it is possible that using a custom `ServerTrustPolicyManager` with several `ServerTrustPolicy` objects will have no effect. If you continuously see `CFNetwork SSLHandshake failed (-9806)` errors, you have probably run into this problem. Apple's ATS system overrides the entire challenge system unless you configure the ATS settings in your app's plist to disable enough of it to allow your app to evaluate the server trust. + +If you run into this problem (high probability with self-signed certificates), you can work around this issue by adding the following to your `Info.plist`. + +```xml + + NSAppTransportSecurity + + NSExceptionDomains + + example.com + + NSExceptionAllowsInsecureHTTPLoads + + NSExceptionRequiresForwardSecrecy + + NSIncludesSubdomains + + + NSTemporaryExceptionMinimumTLSVersion + TLSv1.2 + + + + +``` + +Whether you need to set the `NSExceptionRequiresForwardSecrecy` to `NO` depends on whether your TLS connection is using an allowed cipher suite. In certain cases, it will need to be set to `NO`. The `NSExceptionAllowsInsecureHTTPLoads` MUST be set to `YES` in order to allow the `SessionDelegate` to receive challenge callbacks. Once the challenge callbacks are being called, the `ServerTrustPolicyManager` will take over the server trust evaluation. You may also need to specify the `NSTemporaryExceptionMinimumTLSVersion` if you're trying to connect to a host that only supports TLS versions less than `1.2`. + +> It is recommended to always use valid certificates in production environments. + +--- + +## Component Libraries + +In order to keep Alamofire focused specifically on core networking implementations, additional component libraries have been created by the [Alamofire Software Foundation](https://github.com/Alamofire/Foundation) to bring additional functionality to the Alamofire ecosystem. + +* [AlamofireImage](https://github.com/Alamofire/AlamofireImage) - An image library including image response serializers, `UIImage` and `UIImageView` extensions, custom image filters, an auto-purging in-memory cache and a priority-based image downloading system. + +## Open Rdars + +The following rdars have some affect on the current implementation of Alamofire. + +* [rdar://21349340](http://www.openradar.me/radar?id=5517037090635776) - Compiler throwing warning due to toll-free bridging issue in test case + +## FAQ + +### What's the origin of the name Alamofire? + +Alamofire is named after the [Alamo Fire flower](https://aggie-horticulture.tamu.edu/wildseed/alamofire.html), a hybrid variant of the Bluebonnet, the official state flower of Texas. + +--- + +## Credits + +Alamofire is owned and maintained by the [Alamofire Software Foundation](http://alamofire.org). You can follow them on Twitter at [@AlamofireSF](https://twitter.com/AlamofireSF) for project updates and releases. + +### Security Disclosure + +If you believe you have identified a security vulnerability with Alamofire, you should report it as soon as possible via email to security@alamofire.org. Please do not post it to a public issue tracker. + +## License + +Alamofire is released under the MIT license. See LICENSE for details. diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/Alamofire.swift b/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/Alamofire.swift new file mode 100644 index 00000000000..b866f42264f --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/Alamofire.swift @@ -0,0 +1,368 @@ +// Alamofire.swift +// +// Copyright (c) 2014–2016 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +import Foundation + +// MARK: - URLStringConvertible + +/** + Types adopting the `URLStringConvertible` protocol can be used to construct URL strings, which are then used to + construct URL requests. +*/ +public protocol URLStringConvertible { + /** + A URL that conforms to RFC 2396. + + Methods accepting a `URLStringConvertible` type parameter parse it according to RFCs 1738 and 1808. + + See https://tools.ietf.org/html/rfc2396 + See https://tools.ietf.org/html/rfc1738 + See https://tools.ietf.org/html/rfc1808 + */ + var URLString: String { get } +} + +extension String: URLStringConvertible { + public var URLString: String { + return self + } +} + +extension NSURL: URLStringConvertible { + public var URLString: String { + return absoluteString + } +} + +extension NSURLComponents: URLStringConvertible { + public var URLString: String { + return URL!.URLString + } +} + +extension NSURLRequest: URLStringConvertible { + public var URLString: String { + return URL!.URLString + } +} + +// MARK: - URLRequestConvertible + +/** + Types adopting the `URLRequestConvertible` protocol can be used to construct URL requests. +*/ +public protocol URLRequestConvertible { + /// The URL request. + var URLRequest: NSMutableURLRequest { get } +} + +extension NSURLRequest: URLRequestConvertible { + public var URLRequest: NSMutableURLRequest { + return self.mutableCopy() as! NSMutableURLRequest + } +} + +// MARK: - Convenience + +func URLRequest( + method: Method, + _ URLString: URLStringConvertible, + headers: [String: String]? = nil) + -> NSMutableURLRequest +{ + let mutableURLRequest = NSMutableURLRequest(URL: NSURL(string: URLString.URLString)!) + mutableURLRequest.HTTPMethod = method.rawValue + + if let headers = headers { + for (headerField, headerValue) in headers { + mutableURLRequest.setValue(headerValue, forHTTPHeaderField: headerField) + } + } + + return mutableURLRequest +} + +// MARK: - Request Methods + +/** + Creates a request using the shared manager instance for the specified method, URL string, parameters, and + parameter encoding. + + - parameter method: The HTTP method. + - parameter URLString: The URL string. + - parameter parameters: The parameters. `nil` by default. + - parameter encoding: The parameter encoding. `.URL` by default. + - parameter headers: The HTTP headers. `nil` by default. + + - returns: The created request. +*/ +public func request( + method: Method, + _ URLString: URLStringConvertible, + parameters: [String: AnyObject]? = nil, + encoding: ParameterEncoding = .URL, + headers: [String: String]? = nil) + -> Request +{ + return Manager.sharedInstance.request( + method, + URLString, + parameters: parameters, + encoding: encoding, + headers: headers + ) +} + +/** + Creates a request using the shared manager instance for the specified URL request. + + If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned. + + - parameter URLRequest: The URL request + + - returns: The created request. +*/ +public func request(URLRequest: URLRequestConvertible) -> Request { + return Manager.sharedInstance.request(URLRequest.URLRequest) +} + +// MARK: - Upload Methods + +// MARK: File + +/** + Creates an upload request using the shared manager instance for the specified method, URL string, and file. + + - parameter method: The HTTP method. + - parameter URLString: The URL string. + - parameter headers: The HTTP headers. `nil` by default. + - parameter file: The file to upload. + + - returns: The created upload request. +*/ +public func upload( + method: Method, + _ URLString: URLStringConvertible, + headers: [String: String]? = nil, + file: NSURL) + -> Request +{ + return Manager.sharedInstance.upload(method, URLString, headers: headers, file: file) +} + +/** + Creates an upload request using the shared manager instance for the specified URL request and file. + + - parameter URLRequest: The URL request. + - parameter file: The file to upload. + + - returns: The created upload request. +*/ +public func upload(URLRequest: URLRequestConvertible, file: NSURL) -> Request { + return Manager.sharedInstance.upload(URLRequest, file: file) +} + +// MARK: Data + +/** + Creates an upload request using the shared manager instance for the specified method, URL string, and data. + + - parameter method: The HTTP method. + - parameter URLString: The URL string. + - parameter headers: The HTTP headers. `nil` by default. + - parameter data: The data to upload. + + - returns: The created upload request. +*/ +public func upload( + method: Method, + _ URLString: URLStringConvertible, + headers: [String: String]? = nil, + data: NSData) + -> Request +{ + return Manager.sharedInstance.upload(method, URLString, headers: headers, data: data) +} + +/** + Creates an upload request using the shared manager instance for the specified URL request and data. + + - parameter URLRequest: The URL request. + - parameter data: The data to upload. + + - returns: The created upload request. +*/ +public func upload(URLRequest: URLRequestConvertible, data: NSData) -> Request { + return Manager.sharedInstance.upload(URLRequest, data: data) +} + +// MARK: Stream + +/** + Creates an upload request using the shared manager instance for the specified method, URL string, and stream. + + - parameter method: The HTTP method. + - parameter URLString: The URL string. + - parameter headers: The HTTP headers. `nil` by default. + - parameter stream: The stream to upload. + + - returns: The created upload request. +*/ +public func upload( + method: Method, + _ URLString: URLStringConvertible, + headers: [String: String]? = nil, + stream: NSInputStream) + -> Request +{ + return Manager.sharedInstance.upload(method, URLString, headers: headers, stream: stream) +} + +/** + Creates an upload request using the shared manager instance for the specified URL request and stream. + + - parameter URLRequest: The URL request. + - parameter stream: The stream to upload. + + - returns: The created upload request. +*/ +public func upload(URLRequest: URLRequestConvertible, stream: NSInputStream) -> Request { + return Manager.sharedInstance.upload(URLRequest, stream: stream) +} + +// MARK: MultipartFormData + +/** + Creates an upload request using the shared manager instance for the specified method and URL string. + + - parameter method: The HTTP method. + - parameter URLString: The URL string. + - parameter headers: The HTTP headers. `nil` by default. + - parameter multipartFormData: The closure used to append body parts to the `MultipartFormData`. + - parameter encodingMemoryThreshold: The encoding memory threshold in bytes. + `MultipartFormDataEncodingMemoryThreshold` by default. + - parameter encodingCompletion: The closure called when the `MultipartFormData` encoding is complete. +*/ +public func upload( + method: Method, + _ URLString: URLStringConvertible, + headers: [String: String]? = nil, + multipartFormData: MultipartFormData -> Void, + encodingMemoryThreshold: UInt64 = Manager.MultipartFormDataEncodingMemoryThreshold, + encodingCompletion: (Manager.MultipartFormDataEncodingResult -> Void)?) +{ + return Manager.sharedInstance.upload( + method, + URLString, + headers: headers, + multipartFormData: multipartFormData, + encodingMemoryThreshold: encodingMemoryThreshold, + encodingCompletion: encodingCompletion + ) +} + +/** + Creates an upload request using the shared manager instance for the specified method and URL string. + + - parameter URLRequest: The URL request. + - parameter multipartFormData: The closure used to append body parts to the `MultipartFormData`. + - parameter encodingMemoryThreshold: The encoding memory threshold in bytes. + `MultipartFormDataEncodingMemoryThreshold` by default. + - parameter encodingCompletion: The closure called when the `MultipartFormData` encoding is complete. +*/ +public func upload( + URLRequest: URLRequestConvertible, + multipartFormData: MultipartFormData -> Void, + encodingMemoryThreshold: UInt64 = Manager.MultipartFormDataEncodingMemoryThreshold, + encodingCompletion: (Manager.MultipartFormDataEncodingResult -> Void)?) +{ + return Manager.sharedInstance.upload( + URLRequest, + multipartFormData: multipartFormData, + encodingMemoryThreshold: encodingMemoryThreshold, + encodingCompletion: encodingCompletion + ) +} + +// MARK: - Download Methods + +// MARK: URL Request + +/** + Creates a download request using the shared manager instance for the specified method and URL string. + + - parameter method: The HTTP method. + - parameter URLString: The URL string. + - parameter parameters: The parameters. `nil` by default. + - parameter encoding: The parameter encoding. `.URL` by default. + - parameter headers: The HTTP headers. `nil` by default. + - parameter destination: The closure used to determine the destination of the downloaded file. + + - returns: The created download request. +*/ +public func download( + method: Method, + _ URLString: URLStringConvertible, + parameters: [String: AnyObject]? = nil, + encoding: ParameterEncoding = .URL, + headers: [String: String]? = nil, + destination: Request.DownloadFileDestination) + -> Request +{ + return Manager.sharedInstance.download( + method, + URLString, + parameters: parameters, + encoding: encoding, + headers: headers, + destination: destination + ) +} + +/** + Creates a download request using the shared manager instance for the specified URL request. + + - parameter URLRequest: The URL request. + - parameter destination: The closure used to determine the destination of the downloaded file. + + - returns: The created download request. +*/ +public func download(URLRequest: URLRequestConvertible, destination: Request.DownloadFileDestination) -> Request { + return Manager.sharedInstance.download(URLRequest, destination: destination) +} + +// MARK: Resume Data + +/** + Creates a request using the shared manager instance for downloading from the resume data produced from a + previous request cancellation. + + - parameter resumeData: The resume data. This is an opaque data blob produced by `NSURLSessionDownloadTask` + when a task is cancelled. See `NSURLSession -downloadTaskWithResumeData:` for additional + information. + - parameter destination: The closure used to determine the destination of the downloaded file. + + - returns: The created download request. +*/ +public func download(resumeData data: NSData, destination: Request.DownloadFileDestination) -> Request { + return Manager.sharedInstance.download(data, destination: destination) +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/Download.swift b/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/Download.swift new file mode 100644 index 00000000000..b9a043cb8e3 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/Download.swift @@ -0,0 +1,244 @@ +// Download.swift +// +// Copyright (c) 2014–2016 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +import Foundation + +extension Manager { + private enum Downloadable { + case Request(NSURLRequest) + case ResumeData(NSData) + } + + private func download(downloadable: Downloadable, destination: Request.DownloadFileDestination) -> Request { + var downloadTask: NSURLSessionDownloadTask! + + switch downloadable { + case .Request(let request): + dispatch_sync(queue) { + downloadTask = self.session.downloadTaskWithRequest(request) + } + case .ResumeData(let resumeData): + dispatch_sync(queue) { + downloadTask = self.session.downloadTaskWithResumeData(resumeData) + } + } + + let request = Request(session: session, task: downloadTask) + + if let downloadDelegate = request.delegate as? Request.DownloadTaskDelegate { + downloadDelegate.downloadTaskDidFinishDownloadingToURL = { session, downloadTask, URL in + return destination(URL, downloadTask.response as! NSHTTPURLResponse) + } + } + + delegate[request.delegate.task] = request.delegate + + if startRequestsImmediately { + request.resume() + } + + return request + } + + // MARK: Request + + /** + Creates a download request for the specified method, URL string, parameters, parameter encoding, headers + and destination. + + If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned. + + - parameter method: The HTTP method. + - parameter URLString: The URL string. + - parameter parameters: The parameters. `nil` by default. + - parameter encoding: The parameter encoding. `.URL` by default. + - parameter headers: The HTTP headers. `nil` by default. + - parameter destination: The closure used to determine the destination of the downloaded file. + + - returns: The created download request. + */ + public func download( + method: Method, + _ URLString: URLStringConvertible, + parameters: [String: AnyObject]? = nil, + encoding: ParameterEncoding = .URL, + headers: [String: String]? = nil, + destination: Request.DownloadFileDestination) + -> Request + { + let mutableURLRequest = URLRequest(method, URLString, headers: headers) + let encodedURLRequest = encoding.encode(mutableURLRequest, parameters: parameters).0 + + return download(encodedURLRequest, destination: destination) + } + + /** + Creates a request for downloading from the specified URL request. + + If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned. + + - parameter URLRequest: The URL request + - parameter destination: The closure used to determine the destination of the downloaded file. + + - returns: The created download request. + */ + public func download(URLRequest: URLRequestConvertible, destination: Request.DownloadFileDestination) -> Request { + return download(.Request(URLRequest.URLRequest), destination: destination) + } + + // MARK: Resume Data + + /** + Creates a request for downloading from the resume data produced from a previous request cancellation. + + If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned. + + - parameter resumeData: The resume data. This is an opaque data blob produced by `NSURLSessionDownloadTask` + when a task is cancelled. See `NSURLSession -downloadTaskWithResumeData:` for + additional information. + - parameter destination: The closure used to determine the destination of the downloaded file. + + - returns: The created download request. + */ + public func download(resumeData: NSData, destination: Request.DownloadFileDestination) -> Request { + return download(.ResumeData(resumeData), destination: destination) + } +} + +// MARK: - + +extension Request { + /** + A closure executed once a request has successfully completed in order to determine where to move the temporary + file written to during the download process. The closure takes two arguments: the temporary file URL and the URL + response, and returns a single argument: the file URL where the temporary file should be moved. + */ + public typealias DownloadFileDestination = (NSURL, NSHTTPURLResponse) -> NSURL + + /** + Creates a download file destination closure which uses the default file manager to move the temporary file to a + file URL in the first available directory with the specified search path directory and search path domain mask. + + - parameter directory: The search path directory. `.DocumentDirectory` by default. + - parameter domain: The search path domain mask. `.UserDomainMask` by default. + + - returns: A download file destination closure. + */ + public class func suggestedDownloadDestination( + directory directory: NSSearchPathDirectory = .DocumentDirectory, + domain: NSSearchPathDomainMask = .UserDomainMask) + -> DownloadFileDestination + { + return { temporaryURL, response -> NSURL in + let directoryURLs = NSFileManager.defaultManager().URLsForDirectory(directory, inDomains: domain) + + if !directoryURLs.isEmpty { + return directoryURLs[0].URLByAppendingPathComponent(response.suggestedFilename!) + } + + return temporaryURL + } + } + + /// The resume data of the underlying download task if available after a failure. + public var resumeData: NSData? { + var data: NSData? + + if let delegate = delegate as? DownloadTaskDelegate { + data = delegate.resumeData + } + + return data + } + + // MARK: - DownloadTaskDelegate + + class DownloadTaskDelegate: TaskDelegate, NSURLSessionDownloadDelegate { + var downloadTask: NSURLSessionDownloadTask? { return task as? NSURLSessionDownloadTask } + var downloadProgress: ((Int64, Int64, Int64) -> Void)? + + var resumeData: NSData? + override var data: NSData? { return resumeData } + + // MARK: - NSURLSessionDownloadDelegate + + // MARK: Override Closures + + var downloadTaskDidFinishDownloadingToURL: ((NSURLSession, NSURLSessionDownloadTask, NSURL) -> NSURL)? + var downloadTaskDidWriteData: ((NSURLSession, NSURLSessionDownloadTask, Int64, Int64, Int64) -> Void)? + var downloadTaskDidResumeAtOffset: ((NSURLSession, NSURLSessionDownloadTask, Int64, Int64) -> Void)? + + // MARK: Delegate Methods + + func URLSession( + session: NSURLSession, + downloadTask: NSURLSessionDownloadTask, + didFinishDownloadingToURL location: NSURL) + { + if let downloadTaskDidFinishDownloadingToURL = downloadTaskDidFinishDownloadingToURL { + do { + let destination = downloadTaskDidFinishDownloadingToURL(session, downloadTask, location) + try NSFileManager.defaultManager().moveItemAtURL(location, toURL: destination) + } catch { + self.error = error as NSError + } + } + } + + func URLSession( + session: NSURLSession, + downloadTask: NSURLSessionDownloadTask, + didWriteData bytesWritten: Int64, + totalBytesWritten: Int64, + totalBytesExpectedToWrite: Int64) + { + if let downloadTaskDidWriteData = downloadTaskDidWriteData { + downloadTaskDidWriteData( + session, + downloadTask, + bytesWritten, + totalBytesWritten, + totalBytesExpectedToWrite + ) + } else { + progress.totalUnitCount = totalBytesExpectedToWrite + progress.completedUnitCount = totalBytesWritten + + downloadProgress?(bytesWritten, totalBytesWritten, totalBytesExpectedToWrite) + } + } + + func URLSession( + session: NSURLSession, + downloadTask: NSURLSessionDownloadTask, + didResumeAtOffset fileOffset: Int64, + expectedTotalBytes: Int64) + { + if let downloadTaskDidResumeAtOffset = downloadTaskDidResumeAtOffset { + downloadTaskDidResumeAtOffset(session, downloadTask, fileOffset, expectedTotalBytes) + } else { + progress.totalUnitCount = expectedTotalBytes + progress.completedUnitCount = fileOffset + } + } + } +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/Error.swift b/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/Error.swift new file mode 100644 index 00000000000..7a813f1b813 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/Error.swift @@ -0,0 +1,66 @@ +// Error.swift +// +// Copyright (c) 2014–2016 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +import Foundation + +/// The `Error` struct provides a convenience for creating custom Alamofire NSErrors. +public struct Error { + /// The domain used for creating all Alamofire errors. + public static let Domain = "com.alamofire.error" + + /// The custom error codes generated by Alamofire. + public enum Code: Int { + case InputStreamReadFailed = -6000 + case OutputStreamWriteFailed = -6001 + case ContentTypeValidationFailed = -6002 + case StatusCodeValidationFailed = -6003 + case DataSerializationFailed = -6004 + case StringSerializationFailed = -6005 + case JSONSerializationFailed = -6006 + case PropertyListSerializationFailed = -6007 + } + + /** + Creates an `NSError` with the given error code and failure reason. + + - parameter code: The error code. + - parameter failureReason: The failure reason. + + - returns: An `NSError` with the given error code and failure reason. + */ + public static func errorWithCode(code: Code, failureReason: String) -> NSError { + return errorWithCode(code.rawValue, failureReason: failureReason) + } + + /** + Creates an `NSError` with the given error code and failure reason. + + - parameter code: The error code. + - parameter failureReason: The failure reason. + + - returns: An `NSError` with the given error code and failure reason. + */ + public static func errorWithCode(code: Int, failureReason: String) -> NSError { + let userInfo = [NSLocalizedFailureReasonErrorKey: failureReason] + return NSError(domain: Domain, code: code, userInfo: userInfo) + } +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/Manager.swift b/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/Manager.swift new file mode 100644 index 00000000000..d81c7380fa8 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/Manager.swift @@ -0,0 +1,693 @@ +// Manager.swift +// +// Copyright (c) 2014–2016 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +import Foundation + +/** + Responsible for creating and managing `Request` objects, as well as their underlying `NSURLSession`. +*/ +public class Manager { + + // MARK: - Properties + + /** + A shared instance of `Manager`, used by top-level Alamofire request methods, and suitable for use directly + for any ad hoc requests. + */ + public static let sharedInstance: Manager = { + let configuration = NSURLSessionConfiguration.defaultSessionConfiguration() + configuration.HTTPAdditionalHeaders = Manager.defaultHTTPHeaders + + return Manager(configuration: configuration) + }() + + /** + Creates default values for the "Accept-Encoding", "Accept-Language" and "User-Agent" headers. + */ + public static let defaultHTTPHeaders: [String: String] = { + // Accept-Encoding HTTP Header; see https://tools.ietf.org/html/rfc7230#section-4.2.3 + let acceptEncoding: String = "gzip;q=1.0, compress;q=0.5" + + // Accept-Language HTTP Header; see https://tools.ietf.org/html/rfc7231#section-5.3.5 + let acceptLanguage = NSLocale.preferredLanguages().prefix(6).enumerate().map { index, languageCode in + let quality = 1.0 - (Double(index) * 0.1) + return "\(languageCode);q=\(quality)" + }.joinWithSeparator(", ") + + // User-Agent Header; see https://tools.ietf.org/html/rfc7231#section-5.5.3 + let userAgent: String = { + if let info = NSBundle.mainBundle().infoDictionary { + let executable: AnyObject = info[kCFBundleExecutableKey as String] ?? "Unknown" + let bundle: AnyObject = info[kCFBundleIdentifierKey as String] ?? "Unknown" + let version: AnyObject = info[kCFBundleVersionKey as String] ?? "Unknown" + let os: AnyObject = NSProcessInfo.processInfo().operatingSystemVersionString ?? "Unknown" + + var mutableUserAgent = NSMutableString(string: "\(executable)/\(bundle) (\(version); OS \(os))") as CFMutableString + let transform = NSString(string: "Any-Latin; Latin-ASCII; [:^ASCII:] Remove") as CFString + + if CFStringTransform(mutableUserAgent, UnsafeMutablePointer(nil), transform, false) { + return mutableUserAgent as String + } + } + + return "Alamofire" + }() + + return [ + "Accept-Encoding": acceptEncoding, + "Accept-Language": acceptLanguage, + "User-Agent": userAgent + ] + }() + + let queue = dispatch_queue_create(nil, DISPATCH_QUEUE_SERIAL) + + /// The underlying session. + public let session: NSURLSession + + /// The session delegate handling all the task and session delegate callbacks. + public let delegate: SessionDelegate + + /// Whether to start requests immediately after being constructed. `true` by default. + public var startRequestsImmediately: Bool = true + + /** + The background completion handler closure provided by the UIApplicationDelegate + `application:handleEventsForBackgroundURLSession:completionHandler:` method. By setting the background + completion handler, the SessionDelegate `sessionDidFinishEventsForBackgroundURLSession` closure implementation + will automatically call the handler. + + If you need to handle your own events before the handler is called, then you need to override the + SessionDelegate `sessionDidFinishEventsForBackgroundURLSession` and manually call the handler when finished. + + `nil` by default. + */ + public var backgroundCompletionHandler: (() -> Void)? + + // MARK: - Lifecycle + + /** + Initializes the `Manager` instance with the specified configuration, delegate and server trust policy. + + - parameter configuration: The configuration used to construct the managed session. + `NSURLSessionConfiguration.defaultSessionConfiguration()` by default. + - parameter delegate: The delegate used when initializing the session. `SessionDelegate()` by + default. + - parameter serverTrustPolicyManager: The server trust policy manager to use for evaluating all server trust + challenges. `nil` by default. + + - returns: The new `Manager` instance. + */ + public init( + configuration: NSURLSessionConfiguration = NSURLSessionConfiguration.defaultSessionConfiguration(), + delegate: SessionDelegate = SessionDelegate(), + serverTrustPolicyManager: ServerTrustPolicyManager? = nil) + { + self.delegate = delegate + self.session = NSURLSession(configuration: configuration, delegate: delegate, delegateQueue: nil) + + commonInit(serverTrustPolicyManager: serverTrustPolicyManager) + } + + /** + Initializes the `Manager` instance with the specified session, delegate and server trust policy. + + - parameter session: The URL session. + - parameter delegate: The delegate of the URL session. Must equal the URL session's delegate. + - parameter serverTrustPolicyManager: The server trust policy manager to use for evaluating all server trust + challenges. `nil` by default. + + - returns: The new `Manager` instance if the URL session's delegate matches the delegate parameter. + */ + public init?( + session: NSURLSession, + delegate: SessionDelegate, + serverTrustPolicyManager: ServerTrustPolicyManager? = nil) + { + self.delegate = delegate + self.session = session + + guard delegate === session.delegate else { return nil } + + commonInit(serverTrustPolicyManager: serverTrustPolicyManager) + } + + private func commonInit(serverTrustPolicyManager serverTrustPolicyManager: ServerTrustPolicyManager?) { + session.serverTrustPolicyManager = serverTrustPolicyManager + + delegate.sessionDidFinishEventsForBackgroundURLSession = { [weak self] session in + guard let strongSelf = self else { return } + dispatch_async(dispatch_get_main_queue()) { strongSelf.backgroundCompletionHandler?() } + } + } + + deinit { + session.invalidateAndCancel() + } + + // MARK: - Request + + /** + Creates a request for the specified method, URL string, parameters, parameter encoding and headers. + + - parameter method: The HTTP method. + - parameter URLString: The URL string. + - parameter parameters: The parameters. `nil` by default. + - parameter encoding: The parameter encoding. `.URL` by default. + - parameter headers: The HTTP headers. `nil` by default. + + - returns: The created request. + */ + public func request( + method: Method, + _ URLString: URLStringConvertible, + parameters: [String: AnyObject]? = nil, + encoding: ParameterEncoding = .URL, + headers: [String: String]? = nil) + -> Request + { + let mutableURLRequest = URLRequest(method, URLString, headers: headers) + let encodedURLRequest = encoding.encode(mutableURLRequest, parameters: parameters).0 + return request(encodedURLRequest) + } + + /** + Creates a request for the specified URL request. + + If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned. + + - parameter URLRequest: The URL request + + - returns: The created request. + */ + public func request(URLRequest: URLRequestConvertible) -> Request { + var dataTask: NSURLSessionDataTask! + dispatch_sync(queue) { dataTask = self.session.dataTaskWithRequest(URLRequest.URLRequest) } + + let request = Request(session: session, task: dataTask) + delegate[request.delegate.task] = request.delegate + + if startRequestsImmediately { + request.resume() + } + + return request + } + + // MARK: - SessionDelegate + + /** + Responsible for handling all delegate callbacks for the underlying session. + */ + public final class SessionDelegate: NSObject, NSURLSessionDelegate, NSURLSessionTaskDelegate, NSURLSessionDataDelegate, NSURLSessionDownloadDelegate { + private var subdelegates: [Int: Request.TaskDelegate] = [:] + private let subdelegateQueue = dispatch_queue_create(nil, DISPATCH_QUEUE_CONCURRENT) + + subscript(task: NSURLSessionTask) -> Request.TaskDelegate? { + get { + var subdelegate: Request.TaskDelegate? + dispatch_sync(subdelegateQueue) { subdelegate = self.subdelegates[task.taskIdentifier] } + + return subdelegate + } + + set { + dispatch_barrier_async(subdelegateQueue) { self.subdelegates[task.taskIdentifier] = newValue } + } + } + + /** + Initializes the `SessionDelegate` instance. + + - returns: The new `SessionDelegate` instance. + */ + public override init() { + super.init() + } + + // MARK: - NSURLSessionDelegate + + // MARK: Override Closures + + /// Overrides default behavior for NSURLSessionDelegate method `URLSession:didBecomeInvalidWithError:`. + public var sessionDidBecomeInvalidWithError: ((NSURLSession, NSError?) -> Void)? + + /// Overrides default behavior for NSURLSessionDelegate method `URLSession:didReceiveChallenge:completionHandler:`. + public var sessionDidReceiveChallenge: ((NSURLSession, NSURLAuthenticationChallenge) -> (NSURLSessionAuthChallengeDisposition, NSURLCredential?))? + + /// Overrides default behavior for NSURLSessionDelegate method `URLSessionDidFinishEventsForBackgroundURLSession:`. + public var sessionDidFinishEventsForBackgroundURLSession: ((NSURLSession) -> Void)? + + // MARK: Delegate Methods + + /** + Tells the delegate that the session has been invalidated. + + - parameter session: The session object that was invalidated. + - parameter error: The error that caused invalidation, or nil if the invalidation was explicit. + */ + public func URLSession(session: NSURLSession, didBecomeInvalidWithError error: NSError?) { + sessionDidBecomeInvalidWithError?(session, error) + } + + /** + Requests credentials from the delegate in response to a session-level authentication request from the remote server. + + - parameter session: The session containing the task that requested authentication. + - parameter challenge: An object that contains the request for authentication. + - parameter completionHandler: A handler that your delegate method must call providing the disposition and credential. + */ + public func URLSession( + session: NSURLSession, + didReceiveChallenge challenge: NSURLAuthenticationChallenge, + completionHandler: ((NSURLSessionAuthChallengeDisposition, NSURLCredential?) -> Void)) + { + var disposition: NSURLSessionAuthChallengeDisposition = .PerformDefaultHandling + var credential: NSURLCredential? + + if let sessionDidReceiveChallenge = sessionDidReceiveChallenge { + (disposition, credential) = sessionDidReceiveChallenge(session, challenge) + } else if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust { + let host = challenge.protectionSpace.host + + if let + serverTrustPolicy = session.serverTrustPolicyManager?.serverTrustPolicyForHost(host), + serverTrust = challenge.protectionSpace.serverTrust + { + if serverTrustPolicy.evaluateServerTrust(serverTrust, isValidForHost: host) { + disposition = .UseCredential + credential = NSURLCredential(forTrust: serverTrust) + } else { + disposition = .CancelAuthenticationChallenge + } + } + } + + completionHandler(disposition, credential) + } + + /** + Tells the delegate that all messages enqueued for a session have been delivered. + + - parameter session: The session that no longer has any outstanding requests. + */ + public func URLSessionDidFinishEventsForBackgroundURLSession(session: NSURLSession) { + sessionDidFinishEventsForBackgroundURLSession?(session) + } + + // MARK: - NSURLSessionTaskDelegate + + // MARK: Override Closures + + /// Overrides default behavior for NSURLSessionTaskDelegate method `URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:`. + public var taskWillPerformHTTPRedirection: ((NSURLSession, NSURLSessionTask, NSHTTPURLResponse, NSURLRequest) -> NSURLRequest?)? + + /// Overrides default behavior for NSURLSessionTaskDelegate method `URLSession:task:didReceiveChallenge:completionHandler:`. + public var taskDidReceiveChallenge: ((NSURLSession, NSURLSessionTask, NSURLAuthenticationChallenge) -> (NSURLSessionAuthChallengeDisposition, NSURLCredential?))? + + /// Overrides default behavior for NSURLSessionTaskDelegate method `URLSession:session:task:needNewBodyStream:`. + public var taskNeedNewBodyStream: ((NSURLSession, NSURLSessionTask) -> NSInputStream!)? + + /// Overrides default behavior for NSURLSessionTaskDelegate method `URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:`. + public var taskDidSendBodyData: ((NSURLSession, NSURLSessionTask, Int64, Int64, Int64) -> Void)? + + /// Overrides default behavior for NSURLSessionTaskDelegate method `URLSession:task:didCompleteWithError:`. + public var taskDidComplete: ((NSURLSession, NSURLSessionTask, NSError?) -> Void)? + + // MARK: Delegate Methods + + /** + Tells the delegate that the remote server requested an HTTP redirect. + + - parameter session: The session containing the task whose request resulted in a redirect. + - parameter task: The task whose request resulted in a redirect. + - parameter response: An object containing the server’s response to the original request. + - parameter request: A URL request object filled out with the new location. + - parameter completionHandler: A closure that your handler should call with either the value of the request + parameter, a modified URL request object, or NULL to refuse the redirect and + return the body of the redirect response. + */ + public func URLSession( + session: NSURLSession, + task: NSURLSessionTask, + willPerformHTTPRedirection response: NSHTTPURLResponse, + newRequest request: NSURLRequest, + completionHandler: ((NSURLRequest?) -> Void)) + { + var redirectRequest: NSURLRequest? = request + + if let taskWillPerformHTTPRedirection = taskWillPerformHTTPRedirection { + redirectRequest = taskWillPerformHTTPRedirection(session, task, response, request) + } + + completionHandler(redirectRequest) + } + + /** + Requests credentials from the delegate in response to an authentication request from the remote server. + + - parameter session: The session containing the task whose request requires authentication. + - parameter task: The task whose request requires authentication. + - parameter challenge: An object that contains the request for authentication. + - parameter completionHandler: A handler that your delegate method must call providing the disposition and credential. + */ + public func URLSession( + session: NSURLSession, + task: NSURLSessionTask, + didReceiveChallenge challenge: NSURLAuthenticationChallenge, + completionHandler: ((NSURLSessionAuthChallengeDisposition, NSURLCredential?) -> Void)) + { + if let taskDidReceiveChallenge = taskDidReceiveChallenge { + completionHandler(taskDidReceiveChallenge(session, task, challenge)) + } else if let delegate = self[task] { + delegate.URLSession( + session, + task: task, + didReceiveChallenge: challenge, + completionHandler: completionHandler + ) + } else { + URLSession(session, didReceiveChallenge: challenge, completionHandler: completionHandler) + } + } + + /** + Tells the delegate when a task requires a new request body stream to send to the remote server. + + - parameter session: The session containing the task that needs a new body stream. + - parameter task: The task that needs a new body stream. + - parameter completionHandler: A completion handler that your delegate method should call with the new body stream. + */ + public func URLSession( + session: NSURLSession, + task: NSURLSessionTask, + needNewBodyStream completionHandler: ((NSInputStream?) -> Void)) + { + if let taskNeedNewBodyStream = taskNeedNewBodyStream { + completionHandler(taskNeedNewBodyStream(session, task)) + } else if let delegate = self[task] { + delegate.URLSession(session, task: task, needNewBodyStream: completionHandler) + } + } + + /** + Periodically informs the delegate of the progress of sending body content to the server. + + - parameter session: The session containing the data task. + - parameter task: The data task. + - parameter bytesSent: The number of bytes sent since the last time this delegate method was called. + - parameter totalBytesSent: The total number of bytes sent so far. + - parameter totalBytesExpectedToSend: The expected length of the body data. + */ + public func URLSession( + session: NSURLSession, + task: NSURLSessionTask, + didSendBodyData bytesSent: Int64, + totalBytesSent: Int64, + totalBytesExpectedToSend: Int64) + { + if let taskDidSendBodyData = taskDidSendBodyData { + taskDidSendBodyData(session, task, bytesSent, totalBytesSent, totalBytesExpectedToSend) + } else if let delegate = self[task] as? Request.UploadTaskDelegate { + delegate.URLSession( + session, + task: task, + didSendBodyData: bytesSent, + totalBytesSent: totalBytesSent, + totalBytesExpectedToSend: totalBytesExpectedToSend + ) + } + } + + /** + Tells the delegate that the task finished transferring data. + + - parameter session: The session containing the task whose request finished transferring data. + - parameter task: The task whose request finished transferring data. + - parameter error: If an error occurred, an error object indicating how the transfer failed, otherwise nil. + */ + public func URLSession(session: NSURLSession, task: NSURLSessionTask, didCompleteWithError error: NSError?) { + if let taskDidComplete = taskDidComplete { + taskDidComplete(session, task, error) + } else if let delegate = self[task] { + delegate.URLSession(session, task: task, didCompleteWithError: error) + } + + self[task] = nil + } + + // MARK: - NSURLSessionDataDelegate + + // MARK: Override Closures + + /// Overrides default behavior for NSURLSessionDataDelegate method `URLSession:dataTask:didReceiveResponse:completionHandler:`. + public var dataTaskDidReceiveResponse: ((NSURLSession, NSURLSessionDataTask, NSURLResponse) -> NSURLSessionResponseDisposition)? + + /// Overrides default behavior for NSURLSessionDataDelegate method `URLSession:dataTask:didBecomeDownloadTask:`. + public var dataTaskDidBecomeDownloadTask: ((NSURLSession, NSURLSessionDataTask, NSURLSessionDownloadTask) -> Void)? + + /// Overrides default behavior for NSURLSessionDataDelegate method `URLSession:dataTask:didReceiveData:`. + public var dataTaskDidReceiveData: ((NSURLSession, NSURLSessionDataTask, NSData) -> Void)? + + /// Overrides default behavior for NSURLSessionDataDelegate method `URLSession:dataTask:willCacheResponse:completionHandler:`. + public var dataTaskWillCacheResponse: ((NSURLSession, NSURLSessionDataTask, NSCachedURLResponse) -> NSCachedURLResponse!)? + + // MARK: Delegate Methods + + /** + Tells the delegate that the data task received the initial reply (headers) from the server. + + - parameter session: The session containing the data task that received an initial reply. + - parameter dataTask: The data task that received an initial reply. + - parameter response: A URL response object populated with headers. + - parameter completionHandler: A completion handler that your code calls to continue the transfer, passing a + constant to indicate whether the transfer should continue as a data task or + should become a download task. + */ + public func URLSession( + session: NSURLSession, + dataTask: NSURLSessionDataTask, + didReceiveResponse response: NSURLResponse, + completionHandler: ((NSURLSessionResponseDisposition) -> Void)) + { + var disposition: NSURLSessionResponseDisposition = .Allow + + if let dataTaskDidReceiveResponse = dataTaskDidReceiveResponse { + disposition = dataTaskDidReceiveResponse(session, dataTask, response) + } + + completionHandler(disposition) + } + + /** + Tells the delegate that the data task was changed to a download task. + + - parameter session: The session containing the task that was replaced by a download task. + - parameter dataTask: The data task that was replaced by a download task. + - parameter downloadTask: The new download task that replaced the data task. + */ + public func URLSession( + session: NSURLSession, + dataTask: NSURLSessionDataTask, + didBecomeDownloadTask downloadTask: NSURLSessionDownloadTask) + { + if let dataTaskDidBecomeDownloadTask = dataTaskDidBecomeDownloadTask { + dataTaskDidBecomeDownloadTask(session, dataTask, downloadTask) + } else { + let downloadDelegate = Request.DownloadTaskDelegate(task: downloadTask) + self[downloadTask] = downloadDelegate + } + } + + /** + Tells the delegate that the data task has received some of the expected data. + + - parameter session: The session containing the data task that provided data. + - parameter dataTask: The data task that provided data. + - parameter data: A data object containing the transferred data. + */ + public func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveData data: NSData) { + if let dataTaskDidReceiveData = dataTaskDidReceiveData { + dataTaskDidReceiveData(session, dataTask, data) + } else if let delegate = self[dataTask] as? Request.DataTaskDelegate { + delegate.URLSession(session, dataTask: dataTask, didReceiveData: data) + } + } + + /** + Asks the delegate whether the data (or upload) task should store the response in the cache. + + - parameter session: The session containing the data (or upload) task. + - parameter dataTask: The data (or upload) task. + - parameter proposedResponse: The default caching behavior. This behavior is determined based on the current + caching policy and the values of certain received headers, such as the Pragma + and Cache-Control headers. + - parameter completionHandler: A block that your handler must call, providing either the original proposed + response, a modified version of that response, or NULL to prevent caching the + response. If your delegate implements this method, it must call this completion + handler; otherwise, your app leaks memory. + */ + public func URLSession( + session: NSURLSession, + dataTask: NSURLSessionDataTask, + willCacheResponse proposedResponse: NSCachedURLResponse, + completionHandler: ((NSCachedURLResponse?) -> Void)) + { + if let dataTaskWillCacheResponse = dataTaskWillCacheResponse { + completionHandler(dataTaskWillCacheResponse(session, dataTask, proposedResponse)) + } else if let delegate = self[dataTask] as? Request.DataTaskDelegate { + delegate.URLSession( + session, + dataTask: dataTask, + willCacheResponse: proposedResponse, + completionHandler: completionHandler + ) + } else { + completionHandler(proposedResponse) + } + } + + // MARK: - NSURLSessionDownloadDelegate + + // MARK: Override Closures + + /// Overrides default behavior for NSURLSessionDownloadDelegate method `URLSession:downloadTask:didFinishDownloadingToURL:`. + public var downloadTaskDidFinishDownloadingToURL: ((NSURLSession, NSURLSessionDownloadTask, NSURL) -> Void)? + + /// Overrides default behavior for NSURLSessionDownloadDelegate method `URLSession:downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:`. + public var downloadTaskDidWriteData: ((NSURLSession, NSURLSessionDownloadTask, Int64, Int64, Int64) -> Void)? + + /// Overrides default behavior for NSURLSessionDownloadDelegate method `URLSession:downloadTask:didResumeAtOffset:expectedTotalBytes:`. + public var downloadTaskDidResumeAtOffset: ((NSURLSession, NSURLSessionDownloadTask, Int64, Int64) -> Void)? + + // MARK: Delegate Methods + + /** + Tells the delegate that a download task has finished downloading. + + - parameter session: The session containing the download task that finished. + - parameter downloadTask: The download task that finished. + - parameter location: A file URL for the temporary file. Because the file is temporary, you must either + open the file for reading or move it to a permanent location in your app’s sandbox + container directory before returning from this delegate method. + */ + public func URLSession( + session: NSURLSession, + downloadTask: NSURLSessionDownloadTask, + didFinishDownloadingToURL location: NSURL) + { + if let downloadTaskDidFinishDownloadingToURL = downloadTaskDidFinishDownloadingToURL { + downloadTaskDidFinishDownloadingToURL(session, downloadTask, location) + } else if let delegate = self[downloadTask] as? Request.DownloadTaskDelegate { + delegate.URLSession(session, downloadTask: downloadTask, didFinishDownloadingToURL: location) + } + } + + /** + Periodically informs the delegate about the download’s progress. + + - parameter session: The session containing the download task. + - parameter downloadTask: The download task. + - parameter bytesWritten: The number of bytes transferred since the last time this delegate + method was called. + - parameter totalBytesWritten: The total number of bytes transferred so far. + - parameter totalBytesExpectedToWrite: The expected length of the file, as provided by the Content-Length + header. If this header was not provided, the value is + `NSURLSessionTransferSizeUnknown`. + */ + public func URLSession( + session: NSURLSession, + downloadTask: NSURLSessionDownloadTask, + didWriteData bytesWritten: Int64, + totalBytesWritten: Int64, + totalBytesExpectedToWrite: Int64) + { + if let downloadTaskDidWriteData = downloadTaskDidWriteData { + downloadTaskDidWriteData(session, downloadTask, bytesWritten, totalBytesWritten, totalBytesExpectedToWrite) + } else if let delegate = self[downloadTask] as? Request.DownloadTaskDelegate { + delegate.URLSession( + session, + downloadTask: downloadTask, + didWriteData: bytesWritten, + totalBytesWritten: totalBytesWritten, + totalBytesExpectedToWrite: totalBytesExpectedToWrite + ) + } + } + + /** + Tells the delegate that the download task has resumed downloading. + + - parameter session: The session containing the download task that finished. + - parameter downloadTask: The download task that resumed. See explanation in the discussion. + - parameter fileOffset: If the file's cache policy or last modified date prevents reuse of the + existing content, then this value is zero. Otherwise, this value is an + integer representing the number of bytes on disk that do not need to be + retrieved again. + - parameter expectedTotalBytes: The expected length of the file, as provided by the Content-Length header. + If this header was not provided, the value is NSURLSessionTransferSizeUnknown. + */ + public func URLSession( + session: NSURLSession, + downloadTask: NSURLSessionDownloadTask, + didResumeAtOffset fileOffset: Int64, + expectedTotalBytes: Int64) + { + if let downloadTaskDidResumeAtOffset = downloadTaskDidResumeAtOffset { + downloadTaskDidResumeAtOffset(session, downloadTask, fileOffset, expectedTotalBytes) + } else if let delegate = self[downloadTask] as? Request.DownloadTaskDelegate { + delegate.URLSession( + session, + downloadTask: downloadTask, + didResumeAtOffset: fileOffset, + expectedTotalBytes: expectedTotalBytes + ) + } + } + + // MARK: - NSURLSessionStreamDelegate + + var _streamTaskReadClosed: Any? + var _streamTaskWriteClosed: Any? + var _streamTaskBetterRouteDiscovered: Any? + var _streamTaskDidBecomeInputStream: Any? + + // MARK: - NSObject + + public override func respondsToSelector(selector: Selector) -> Bool { + switch selector { + case "URLSession:didBecomeInvalidWithError:": + return sessionDidBecomeInvalidWithError != nil + case "URLSession:didReceiveChallenge:completionHandler:": + return sessionDidReceiveChallenge != nil + case "URLSessionDidFinishEventsForBackgroundURLSession:": + return sessionDidFinishEventsForBackgroundURLSession != nil + case "URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:": + return taskWillPerformHTTPRedirection != nil + case "URLSession:dataTask:didReceiveResponse:completionHandler:": + return dataTaskDidReceiveResponse != nil + default: + return self.dynamicType.instancesRespondToSelector(selector) + } + } + } +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/MultipartFormData.swift b/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/MultipartFormData.swift new file mode 100644 index 00000000000..8c37f164e7e --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/MultipartFormData.swift @@ -0,0 +1,669 @@ +// MultipartFormData.swift +// +// Copyright (c) 2014–2016 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +import Foundation + +#if os(iOS) || os(watchOS) || os(tvOS) +import MobileCoreServices +#elseif os(OSX) +import CoreServices +#endif + +/** + Constructs `multipart/form-data` for uploads within an HTTP or HTTPS body. There are currently two ways to encode + multipart form data. The first way is to encode the data directly in memory. This is very efficient, but can lead + to memory issues if the dataset is too large. The second way is designed for larger datasets and will write all the + data to a single file on disk with all the proper boundary segmentation. The second approach MUST be used for + larger datasets such as video content, otherwise your app may run out of memory when trying to encode the dataset. + + For more information on `multipart/form-data` in general, please refer to the RFC-2388 and RFC-2045 specs as well + and the w3 form documentation. + + - https://www.ietf.org/rfc/rfc2388.txt + - https://www.ietf.org/rfc/rfc2045.txt + - https://www.w3.org/TR/html401/interact/forms.html#h-17.13 +*/ +public class MultipartFormData { + + // MARK: - Helper Types + + struct EncodingCharacters { + static let CRLF = "\r\n" + } + + struct BoundaryGenerator { + enum BoundaryType { + case Initial, Encapsulated, Final + } + + static func randomBoundary() -> String { + return String(format: "alamofire.boundary.%08x%08x", arc4random(), arc4random()) + } + + static func boundaryData(boundaryType boundaryType: BoundaryType, boundary: String) -> NSData { + let boundaryText: String + + switch boundaryType { + case .Initial: + boundaryText = "--\(boundary)\(EncodingCharacters.CRLF)" + case .Encapsulated: + boundaryText = "\(EncodingCharacters.CRLF)--\(boundary)\(EncodingCharacters.CRLF)" + case .Final: + boundaryText = "\(EncodingCharacters.CRLF)--\(boundary)--\(EncodingCharacters.CRLF)" + } + + return boundaryText.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)! + } + } + + class BodyPart { + let headers: [String: String] + let bodyStream: NSInputStream + let bodyContentLength: UInt64 + var hasInitialBoundary = false + var hasFinalBoundary = false + + init(headers: [String: String], bodyStream: NSInputStream, bodyContentLength: UInt64) { + self.headers = headers + self.bodyStream = bodyStream + self.bodyContentLength = bodyContentLength + } + } + + // MARK: - Properties + + /// The `Content-Type` header value containing the boundary used to generate the `multipart/form-data`. + public var contentType: String { return "multipart/form-data; boundary=\(boundary)" } + + /// The content length of all body parts used to generate the `multipart/form-data` not including the boundaries. + public var contentLength: UInt64 { return bodyParts.reduce(0) { $0 + $1.bodyContentLength } } + + /// The boundary used to separate the body parts in the encoded form data. + public let boundary: String + + private var bodyParts: [BodyPart] + private var bodyPartError: NSError? + private let streamBufferSize: Int + + // MARK: - Lifecycle + + /** + Creates a multipart form data object. + + - returns: The multipart form data object. + */ + public init() { + self.boundary = BoundaryGenerator.randomBoundary() + self.bodyParts = [] + + /** + * The optimal read/write buffer size in bytes for input and output streams is 1024 (1KB). For more + * information, please refer to the following article: + * - https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Streams/Articles/ReadingInputStreams.html + */ + + self.streamBufferSize = 1024 + } + + // MARK: - Body Parts + + /** + Creates a body part from the data and appends it to the multipart form data object. + + The body part data will be encoded using the following format: + + - `Content-Disposition: form-data; name=#{name}` (HTTP Header) + - Encoded data + - Multipart form boundary + + - parameter data: The data to encode into the multipart form data. + - parameter name: The name to associate with the data in the `Content-Disposition` HTTP header. + */ + public func appendBodyPart(data data: NSData, name: String) { + let headers = contentHeaders(name: name) + let stream = NSInputStream(data: data) + let length = UInt64(data.length) + + appendBodyPart(stream: stream, length: length, headers: headers) + } + + /** + Creates a body part from the data and appends it to the multipart form data object. + + The body part data will be encoded using the following format: + + - `Content-Disposition: form-data; name=#{name}` (HTTP Header) + - `Content-Type: #{generated mimeType}` (HTTP Header) + - Encoded data + - Multipart form boundary + + - parameter data: The data to encode into the multipart form data. + - parameter name: The name to associate with the data in the `Content-Disposition` HTTP header. + - parameter mimeType: The MIME type to associate with the data content type in the `Content-Type` HTTP header. + */ + public func appendBodyPart(data data: NSData, name: String, mimeType: String) { + let headers = contentHeaders(name: name, mimeType: mimeType) + let stream = NSInputStream(data: data) + let length = UInt64(data.length) + + appendBodyPart(stream: stream, length: length, headers: headers) + } + + /** + Creates a body part from the data and appends it to the multipart form data object. + + The body part data will be encoded using the following format: + + - `Content-Disposition: form-data; name=#{name}; filename=#{filename}` (HTTP Header) + - `Content-Type: #{mimeType}` (HTTP Header) + - Encoded file data + - Multipart form boundary + + - parameter data: The data to encode into the multipart form data. + - parameter name: The name to associate with the data in the `Content-Disposition` HTTP header. + - parameter fileName: The filename to associate with the data in the `Content-Disposition` HTTP header. + - parameter mimeType: The MIME type to associate with the data in the `Content-Type` HTTP header. + */ + public func appendBodyPart(data data: NSData, name: String, fileName: String, mimeType: String) { + let headers = contentHeaders(name: name, fileName: fileName, mimeType: mimeType) + let stream = NSInputStream(data: data) + let length = UInt64(data.length) + + appendBodyPart(stream: stream, length: length, headers: headers) + } + + /** + Creates a body part from the file and appends it to the multipart form data object. + + The body part data will be encoded using the following format: + + - `Content-Disposition: form-data; name=#{name}; filename=#{generated filename}` (HTTP Header) + - `Content-Type: #{generated mimeType}` (HTTP Header) + - Encoded file data + - Multipart form boundary + + The filename in the `Content-Disposition` HTTP header is generated from the last path component of the + `fileURL`. The `Content-Type` HTTP header MIME type is generated by mapping the `fileURL` extension to the + system associated MIME type. + + - parameter fileURL: The URL of the file whose content will be encoded into the multipart form data. + - parameter name: The name to associate with the file content in the `Content-Disposition` HTTP header. + */ + public func appendBodyPart(fileURL fileURL: NSURL, name: String) { + if let + fileName = fileURL.lastPathComponent, + pathExtension = fileURL.pathExtension + { + let mimeType = mimeTypeForPathExtension(pathExtension) + appendBodyPart(fileURL: fileURL, name: name, fileName: fileName, mimeType: mimeType) + } else { + let failureReason = "Failed to extract the fileName of the provided URL: \(fileURL)" + setBodyPartError(Error.errorWithCode(NSURLErrorBadURL, failureReason: failureReason)) + } + } + + /** + Creates a body part from the file and appends it to the multipart form data object. + + The body part data will be encoded using the following format: + + - Content-Disposition: form-data; name=#{name}; filename=#{filename} (HTTP Header) + - Content-Type: #{mimeType} (HTTP Header) + - Encoded file data + - Multipart form boundary + + - parameter fileURL: The URL of the file whose content will be encoded into the multipart form data. + - parameter name: The name to associate with the file content in the `Content-Disposition` HTTP header. + - parameter fileName: The filename to associate with the file content in the `Content-Disposition` HTTP header. + - parameter mimeType: The MIME type to associate with the file content in the `Content-Type` HTTP header. + */ + public func appendBodyPart(fileURL fileURL: NSURL, name: String, fileName: String, mimeType: String) { + let headers = contentHeaders(name: name, fileName: fileName, mimeType: mimeType) + + //============================================================ + // Check 1 - is file URL? + //============================================================ + + guard fileURL.fileURL else { + let failureReason = "The file URL does not point to a file URL: \(fileURL)" + let error = Error.errorWithCode(NSURLErrorBadURL, failureReason: failureReason) + setBodyPartError(error) + return + } + + //============================================================ + // Check 2 - is file URL reachable? + //============================================================ + + var isReachable = true + + if #available(OSX 10.10, *) { + isReachable = fileURL.checkPromisedItemIsReachableAndReturnError(nil) + } + + guard isReachable else { + let error = Error.errorWithCode(NSURLErrorBadURL, failureReason: "The file URL is not reachable: \(fileURL)") + setBodyPartError(error) + return + } + + //============================================================ + // Check 3 - is file URL a directory? + //============================================================ + + var isDirectory: ObjCBool = false + + guard let + path = fileURL.path + where NSFileManager.defaultManager().fileExistsAtPath(path, isDirectory: &isDirectory) && !isDirectory else + { + let failureReason = "The file URL is a directory, not a file: \(fileURL)" + let error = Error.errorWithCode(NSURLErrorBadURL, failureReason: failureReason) + setBodyPartError(error) + return + } + + //============================================================ + // Check 4 - can the file size be extracted? + //============================================================ + + var bodyContentLength: UInt64? + + do { + if let + path = fileURL.path, + fileSize = try NSFileManager.defaultManager().attributesOfItemAtPath(path)[NSFileSize] as? NSNumber + { + bodyContentLength = fileSize.unsignedLongLongValue + } + } catch { + // No-op + } + + guard let length = bodyContentLength else { + let failureReason = "Could not fetch attributes from the file URL: \(fileURL)" + let error = Error.errorWithCode(NSURLErrorBadURL, failureReason: failureReason) + setBodyPartError(error) + return + } + + //============================================================ + // Check 5 - can a stream be created from file URL? + //============================================================ + + guard let stream = NSInputStream(URL: fileURL) else { + let failureReason = "Failed to create an input stream from the file URL: \(fileURL)" + let error = Error.errorWithCode(NSURLErrorCannotOpenFile, failureReason: failureReason) + setBodyPartError(error) + return + } + + appendBodyPart(stream: stream, length: length, headers: headers) + } + + /** + Creates a body part from the stream and appends it to the multipart form data object. + + The body part data will be encoded using the following format: + + - `Content-Disposition: form-data; name=#{name}; filename=#{filename}` (HTTP Header) + - `Content-Type: #{mimeType}` (HTTP Header) + - Encoded stream data + - Multipart form boundary + + - parameter stream: The input stream to encode in the multipart form data. + - parameter length: The content length of the stream. + - parameter name: The name to associate with the stream content in the `Content-Disposition` HTTP header. + - parameter fileName: The filename to associate with the stream content in the `Content-Disposition` HTTP header. + - parameter mimeType: The MIME type to associate with the stream content in the `Content-Type` HTTP header. + */ + public func appendBodyPart( + stream stream: NSInputStream, + length: UInt64, + name: String, + fileName: String, + mimeType: String) + { + let headers = contentHeaders(name: name, fileName: fileName, mimeType: mimeType) + appendBodyPart(stream: stream, length: length, headers: headers) + } + + /** + Creates a body part with the headers, stream and length and appends it to the multipart form data object. + + The body part data will be encoded using the following format: + + - HTTP headers + - Encoded stream data + - Multipart form boundary + + - parameter stream: The input stream to encode in the multipart form data. + - parameter length: The content length of the stream. + - parameter headers: The HTTP headers for the body part. + */ + public func appendBodyPart(stream stream: NSInputStream, length: UInt64, headers: [String: String]) { + let bodyPart = BodyPart(headers: headers, bodyStream: stream, bodyContentLength: length) + bodyParts.append(bodyPart) + } + + // MARK: - Data Encoding + + /** + Encodes all the appended body parts into a single `NSData` object. + + It is important to note that this method will load all the appended body parts into memory all at the same + time. This method should only be used when the encoded data will have a small memory footprint. For large data + cases, please use the `writeEncodedDataToDisk(fileURL:completionHandler:)` method. + + - throws: An `NSError` if encoding encounters an error. + + - returns: The encoded `NSData` if encoding is successful. + */ + public func encode() throws -> NSData { + if let bodyPartError = bodyPartError { + throw bodyPartError + } + + let encoded = NSMutableData() + + bodyParts.first?.hasInitialBoundary = true + bodyParts.last?.hasFinalBoundary = true + + for bodyPart in bodyParts { + let encodedData = try encodeBodyPart(bodyPart) + encoded.appendData(encodedData) + } + + return encoded + } + + /** + Writes the appended body parts into the given file URL. + + This process is facilitated by reading and writing with input and output streams, respectively. Thus, + this approach is very memory efficient and should be used for large body part data. + + - parameter fileURL: The file URL to write the multipart form data into. + + - throws: An `NSError` if encoding encounters an error. + */ + public func writeEncodedDataToDisk(fileURL: NSURL) throws { + if let bodyPartError = bodyPartError { + throw bodyPartError + } + + if let path = fileURL.path where NSFileManager.defaultManager().fileExistsAtPath(path) { + let failureReason = "A file already exists at the given file URL: \(fileURL)" + throw Error.errorWithCode(NSURLErrorBadURL, failureReason: failureReason) + } else if !fileURL.fileURL { + let failureReason = "The URL does not point to a valid file: \(fileURL)" + throw Error.errorWithCode(NSURLErrorBadURL, failureReason: failureReason) + } + + let outputStream: NSOutputStream + + if let possibleOutputStream = NSOutputStream(URL: fileURL, append: false) { + outputStream = possibleOutputStream + } else { + let failureReason = "Failed to create an output stream with the given URL: \(fileURL)" + throw Error.errorWithCode(NSURLErrorCannotOpenFile, failureReason: failureReason) + } + + outputStream.scheduleInRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode) + outputStream.open() + + self.bodyParts.first?.hasInitialBoundary = true + self.bodyParts.last?.hasFinalBoundary = true + + for bodyPart in self.bodyParts { + try writeBodyPart(bodyPart, toOutputStream: outputStream) + } + + outputStream.close() + outputStream.removeFromRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode) + } + + // MARK: - Private - Body Part Encoding + + private func encodeBodyPart(bodyPart: BodyPart) throws -> NSData { + let encoded = NSMutableData() + + let initialData = bodyPart.hasInitialBoundary ? initialBoundaryData() : encapsulatedBoundaryData() + encoded.appendData(initialData) + + let headerData = encodeHeaderDataForBodyPart(bodyPart) + encoded.appendData(headerData) + + let bodyStreamData = try encodeBodyStreamDataForBodyPart(bodyPart) + encoded.appendData(bodyStreamData) + + if bodyPart.hasFinalBoundary { + encoded.appendData(finalBoundaryData()) + } + + return encoded + } + + private func encodeHeaderDataForBodyPart(bodyPart: BodyPart) -> NSData { + var headerText = "" + + for (key, value) in bodyPart.headers { + headerText += "\(key): \(value)\(EncodingCharacters.CRLF)" + } + headerText += EncodingCharacters.CRLF + + return headerText.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)! + } + + private func encodeBodyStreamDataForBodyPart(bodyPart: BodyPart) throws -> NSData { + let inputStream = bodyPart.bodyStream + inputStream.scheduleInRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode) + inputStream.open() + + var error: NSError? + let encoded = NSMutableData() + + while inputStream.hasBytesAvailable { + var buffer = [UInt8](count: streamBufferSize, repeatedValue: 0) + let bytesRead = inputStream.read(&buffer, maxLength: streamBufferSize) + + if inputStream.streamError != nil { + error = inputStream.streamError + break + } + + if bytesRead > 0 { + encoded.appendBytes(buffer, length: bytesRead) + } else if bytesRead < 0 { + let failureReason = "Failed to read from input stream: \(inputStream)" + error = Error.errorWithCode(.InputStreamReadFailed, failureReason: failureReason) + break + } else { + break + } + } + + inputStream.close() + inputStream.removeFromRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode) + + if let error = error { + throw error + } + + return encoded + } + + // MARK: - Private - Writing Body Part to Output Stream + + private func writeBodyPart(bodyPart: BodyPart, toOutputStream outputStream: NSOutputStream) throws { + try writeInitialBoundaryDataForBodyPart(bodyPart, toOutputStream: outputStream) + try writeHeaderDataForBodyPart(bodyPart, toOutputStream: outputStream) + try writeBodyStreamForBodyPart(bodyPart, toOutputStream: outputStream) + try writeFinalBoundaryDataForBodyPart(bodyPart, toOutputStream: outputStream) + } + + private func writeInitialBoundaryDataForBodyPart( + bodyPart: BodyPart, + toOutputStream outputStream: NSOutputStream) + throws + { + let initialData = bodyPart.hasInitialBoundary ? initialBoundaryData() : encapsulatedBoundaryData() + return try writeData(initialData, toOutputStream: outputStream) + } + + private func writeHeaderDataForBodyPart(bodyPart: BodyPart, toOutputStream outputStream: NSOutputStream) throws { + let headerData = encodeHeaderDataForBodyPart(bodyPart) + return try writeData(headerData, toOutputStream: outputStream) + } + + private func writeBodyStreamForBodyPart(bodyPart: BodyPart, toOutputStream outputStream: NSOutputStream) throws { + let inputStream = bodyPart.bodyStream + inputStream.scheduleInRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode) + inputStream.open() + + while inputStream.hasBytesAvailable { + var buffer = [UInt8](count: streamBufferSize, repeatedValue: 0) + let bytesRead = inputStream.read(&buffer, maxLength: streamBufferSize) + + if let streamError = inputStream.streamError { + throw streamError + } + + if bytesRead > 0 { + if buffer.count != bytesRead { + buffer = Array(buffer[0.. 0 { + if outputStream.hasSpaceAvailable { + let bytesWritten = outputStream.write(buffer, maxLength: bytesToWrite) + + if let streamError = outputStream.streamError { + throw streamError + } + + if bytesWritten < 0 { + let failureReason = "Failed to write to output stream: \(outputStream)" + throw Error.errorWithCode(.OutputStreamWriteFailed, failureReason: failureReason) + } + + bytesToWrite -= bytesWritten + + if bytesToWrite > 0 { + buffer = Array(buffer[bytesWritten.. String { + if let + id = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, pathExtension, nil)?.takeRetainedValue(), + contentType = UTTypeCopyPreferredTagWithClass(id, kUTTagClassMIMEType)?.takeRetainedValue() + { + return contentType as String + } + + return "application/octet-stream" + } + + // MARK: - Private - Content Headers + + private func contentHeaders(name name: String) -> [String: String] { + return ["Content-Disposition": "form-data; name=\"\(name)\""] + } + + private func contentHeaders(name name: String, mimeType: String) -> [String: String] { + return [ + "Content-Disposition": "form-data; name=\"\(name)\"", + "Content-Type": "\(mimeType)" + ] + } + + private func contentHeaders(name name: String, fileName: String, mimeType: String) -> [String: String] { + return [ + "Content-Disposition": "form-data; name=\"\(name)\"; filename=\"\(fileName)\"", + "Content-Type": "\(mimeType)" + ] + } + + // MARK: - Private - Boundary Encoding + + private func initialBoundaryData() -> NSData { + return BoundaryGenerator.boundaryData(boundaryType: .Initial, boundary: boundary) + } + + private func encapsulatedBoundaryData() -> NSData { + return BoundaryGenerator.boundaryData(boundaryType: .Encapsulated, boundary: boundary) + } + + private func finalBoundaryData() -> NSData { + return BoundaryGenerator.boundaryData(boundaryType: .Final, boundary: boundary) + } + + // MARK: - Private - Errors + + private func setBodyPartError(error: NSError) { + if bodyPartError == nil { + bodyPartError = error + } + } +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/ParameterEncoding.swift b/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/ParameterEncoding.swift new file mode 100644 index 00000000000..d56d2d6c3a7 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/ParameterEncoding.swift @@ -0,0 +1,251 @@ +// ParameterEncoding.swift +// +// Copyright (c) 2014–2016 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +import Foundation + +/** + HTTP method definitions. + + See https://tools.ietf.org/html/rfc7231#section-4.3 +*/ +public enum Method: String { + case OPTIONS, GET, HEAD, POST, PUT, PATCH, DELETE, TRACE, CONNECT +} + +// MARK: ParameterEncoding + +/** + Used to specify the way in which a set of parameters are applied to a URL request. + + - `URL`: Creates a query string to be set as or appended to any existing URL query for `GET`, `HEAD`, + and `DELETE` requests, or set as the body for requests with any other HTTP method. The + `Content-Type` HTTP header field of an encoded request with HTTP body is set to + `application/x-www-form-urlencoded; charset=utf-8`. Since there is no published specification + for how to encode collection types, the convention of appending `[]` to the key for array + values (`foo[]=1&foo[]=2`), and appending the key surrounded by square brackets for nested + dictionary values (`foo[bar]=baz`). + + - `URLEncodedInURL`: Creates query string to be set as or appended to any existing URL query. Uses the same + implementation as the `.URL` case, but always applies the encoded result to the URL. + + - `JSON`: Uses `NSJSONSerialization` to create a JSON representation of the parameters object, which is + set as the body of the request. The `Content-Type` HTTP header field of an encoded request is + set to `application/json`. + + - `PropertyList`: Uses `NSPropertyListSerialization` to create a plist representation of the parameters object, + according to the associated format and write options values, which is set as the body of the + request. The `Content-Type` HTTP header field of an encoded request is set to + `application/x-plist`. + + - `Custom`: Uses the associated closure value to construct a new request given an existing request and + parameters. +*/ +public enum ParameterEncoding { + case URL + case URLEncodedInURL + case JSON + case PropertyList(NSPropertyListFormat, NSPropertyListWriteOptions) + case Custom((URLRequestConvertible, [String: AnyObject]?) -> (NSMutableURLRequest, NSError?)) + + /** + Creates a URL request by encoding parameters and applying them onto an existing request. + + - parameter URLRequest: The request to have parameters applied + - parameter parameters: The parameters to apply + + - returns: A tuple containing the constructed request and the error that occurred during parameter encoding, + if any. + */ + public func encode( + URLRequest: URLRequestConvertible, + parameters: [String: AnyObject]?) + -> (NSMutableURLRequest, NSError?) + { + var mutableURLRequest = URLRequest.URLRequest + + guard let parameters = parameters where !parameters.isEmpty else { + return (mutableURLRequest, nil) + } + + var encodingError: NSError? = nil + + switch self { + case .URL, .URLEncodedInURL: + func query(parameters: [String: AnyObject]) -> String { + var components: [(String, String)] = [] + + for key in parameters.keys.sort(<) { + let value = parameters[key]! + components += queryComponents(key, value) + } + + return (components.map { "\($0)=\($1)" } as [String]).joinWithSeparator("&") + } + + func encodesParametersInURL(method: Method) -> Bool { + switch self { + case .URLEncodedInURL: + return true + default: + break + } + + switch method { + case .GET, .HEAD, .DELETE: + return true + default: + return false + } + } + + if let method = Method(rawValue: mutableURLRequest.HTTPMethod) where encodesParametersInURL(method) { + if let URLComponents = NSURLComponents(URL: mutableURLRequest.URL!, resolvingAgainstBaseURL: false) { + let percentEncodedQuery = (URLComponents.percentEncodedQuery.map { $0 + "&" } ?? "") + query(parameters) + URLComponents.percentEncodedQuery = percentEncodedQuery + mutableURLRequest.URL = URLComponents.URL + } + } else { + if mutableURLRequest.valueForHTTPHeaderField("Content-Type") == nil { + mutableURLRequest.setValue( + "application/x-www-form-urlencoded; charset=utf-8", + forHTTPHeaderField: "Content-Type" + ) + } + + mutableURLRequest.HTTPBody = query(parameters).dataUsingEncoding( + NSUTF8StringEncoding, + allowLossyConversion: false + ) + } + case .JSON: + do { + let options = NSJSONWritingOptions() + let data = try NSJSONSerialization.dataWithJSONObject(parameters, options: options) + + mutableURLRequest.setValue("application/json", forHTTPHeaderField: "Content-Type") + mutableURLRequest.HTTPBody = data + } catch { + encodingError = error as NSError + } + case .PropertyList(let format, let options): + do { + let data = try NSPropertyListSerialization.dataWithPropertyList( + parameters, + format: format, + options: options + ) + mutableURLRequest.setValue("application/x-plist", forHTTPHeaderField: "Content-Type") + mutableURLRequest.HTTPBody = data + } catch { + encodingError = error as NSError + } + case .Custom(let closure): + (mutableURLRequest, encodingError) = closure(mutableURLRequest, parameters) + } + + return (mutableURLRequest, encodingError) + } + + /** + Creates percent-escaped, URL encoded query string components from the given key-value pair using recursion. + + - parameter key: The key of the query component. + - parameter value: The value of the query component. + + - returns: The percent-escaped, URL encoded query string components. + */ + public func queryComponents(key: String, _ value: AnyObject) -> [(String, String)] { + var components: [(String, String)] = [] + + if let dictionary = value as? [String: AnyObject] { + for (nestedKey, value) in dictionary { + components += queryComponents("\(key)[\(nestedKey)]", value) + } + } else if let array = value as? [AnyObject] { + for value in array { + components += queryComponents("\(key)[]", value) + } + } else { + components.append((escape(key), escape("\(value)"))) + } + + return components + } + + /** + Returns a percent-escaped string following RFC 3986 for a query string key or value. + + RFC 3986 states that the following characters are "reserved" characters. + + - General Delimiters: ":", "#", "[", "]", "@", "?", "/" + - Sub-Delimiters: "!", "$", "&", "'", "(", ")", "*", "+", ",", ";", "=" + + In RFC 3986 - Section 3.4, it states that the "?" and "/" characters should not be escaped to allow + query strings to include a URL. Therefore, all "reserved" characters with the exception of "?" and "/" + should be percent-escaped in the query string. + + - parameter string: The string to be percent-escaped. + + - returns: The percent-escaped string. + */ + public func escape(string: String) -> String { + let generalDelimitersToEncode = ":#[]@" // does not include "?" or "/" due to RFC 3986 - Section 3.4 + let subDelimitersToEncode = "!$&'()*+,;=" + + let allowedCharacterSet = NSCharacterSet.URLQueryAllowedCharacterSet().mutableCopy() as! NSMutableCharacterSet + allowedCharacterSet.removeCharactersInString(generalDelimitersToEncode + subDelimitersToEncode) + + var escaped = "" + + //========================================================================================================== + // + // Batching is required for escaping due to an internal bug in iOS 8.1 and 8.2. Encoding more than a few + // hundred Chinense characters causes various malloc error crashes. To avoid this issue until iOS 8 is no + // longer supported, batching MUST be used for encoding. This introduces roughly a 20% overhead. For more + // info, please refer to: + // + // - https://github.com/Alamofire/Alamofire/issues/206 + // + //========================================================================================================== + + if #available(iOS 8.3, OSX 10.10, *) { + escaped = string.stringByAddingPercentEncodingWithAllowedCharacters(allowedCharacterSet) ?? string + } else { + let batchSize = 50 + var index = string.startIndex + + while index != string.endIndex { + let startIndex = index + let endIndex = index.advancedBy(batchSize, limit: string.endIndex) + let range = Range(start: startIndex, end: endIndex) + + let substring = string.substringWithRange(range) + + escaped += substring.stringByAddingPercentEncodingWithAllowedCharacters(allowedCharacterSet) ?? substring + + index = endIndex + } + } + + return escaped + } +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/Request.swift b/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/Request.swift new file mode 100644 index 00000000000..3e242e7ea72 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/Request.swift @@ -0,0 +1,538 @@ +// Request.swift +// +// Copyright (c) 2014–2016 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +import Foundation + +/** + Responsible for sending a request and receiving the response and associated data from the server, as well as + managing its underlying `NSURLSessionTask`. +*/ +public class Request { + + // MARK: - Properties + + /// The delegate for the underlying task. + public let delegate: TaskDelegate + + /// The underlying task. + public var task: NSURLSessionTask { return delegate.task } + + /// The session belonging to the underlying task. + public let session: NSURLSession + + /// The request sent or to be sent to the server. + public var request: NSURLRequest? { return task.originalRequest } + + /// The response received from the server, if any. + public var response: NSHTTPURLResponse? { return task.response as? NSHTTPURLResponse } + + /// The progress of the request lifecycle. + public var progress: NSProgress { return delegate.progress } + + // MARK: - Lifecycle + + init(session: NSURLSession, task: NSURLSessionTask) { + self.session = session + + switch task { + case is NSURLSessionUploadTask: + self.delegate = UploadTaskDelegate(task: task) + case is NSURLSessionDataTask: + self.delegate = DataTaskDelegate(task: task) + case is NSURLSessionDownloadTask: + self.delegate = DownloadTaskDelegate(task: task) + default: + self.delegate = TaskDelegate(task: task) + } + } + + // MARK: - Authentication + + /** + Associates an HTTP Basic credential with the request. + + - parameter user: The user. + - parameter password: The password. + - parameter persistence: The URL credential persistence. `.ForSession` by default. + + - returns: The request. + */ + public func authenticate( + user user: String, + password: String, + persistence: NSURLCredentialPersistence = .ForSession) + -> Self + { + let credential = NSURLCredential(user: user, password: password, persistence: persistence) + + return authenticate(usingCredential: credential) + } + + /** + Associates a specified credential with the request. + + - parameter credential: The credential. + + - returns: The request. + */ + public func authenticate(usingCredential credential: NSURLCredential) -> Self { + delegate.credential = credential + + return self + } + + // MARK: - Progress + + /** + Sets a closure to be called periodically during the lifecycle of the request as data is written to or read + from the server. + + - For uploads, the progress closure returns the bytes written, total bytes written, and total bytes expected + to write. + - For downloads and data tasks, the progress closure returns the bytes read, total bytes read, and total bytes + expected to read. + + - parameter closure: The code to be executed periodically during the lifecycle of the request. + + - returns: The request. + */ + public func progress(closure: ((Int64, Int64, Int64) -> Void)? = nil) -> Self { + if let uploadDelegate = delegate as? UploadTaskDelegate { + uploadDelegate.uploadProgress = closure + } else if let dataDelegate = delegate as? DataTaskDelegate { + dataDelegate.dataProgress = closure + } else if let downloadDelegate = delegate as? DownloadTaskDelegate { + downloadDelegate.downloadProgress = closure + } + + return self + } + + /** + Sets a closure to be called periodically during the lifecycle of the request as data is read from the server. + + This closure returns the bytes most recently received from the server, not including data from previous calls. + If this closure is set, data will only be available within this closure, and will not be saved elsewhere. It is + also important to note that the `response` closure will be called with nil `responseData`. + + - parameter closure: The code to be executed periodically during the lifecycle of the request. + + - returns: The request. + */ + public func stream(closure: (NSData -> Void)? = nil) -> Self { + if let dataDelegate = delegate as? DataTaskDelegate { + dataDelegate.dataStream = closure + } + + return self + } + + // MARK: - State + + /** + Suspends the request. + */ + public func suspend() { + task.suspend() + } + + /** + Resumes the request. + */ + public func resume() { + task.resume() + } + + /** + Cancels the request. + */ + public func cancel() { + if let + downloadDelegate = delegate as? DownloadTaskDelegate, + downloadTask = downloadDelegate.downloadTask + { + downloadTask.cancelByProducingResumeData { data in + downloadDelegate.resumeData = data + } + } else { + task.cancel() + } + } + + // MARK: - TaskDelegate + + /** + The task delegate is responsible for handling all delegate callbacks for the underlying task as well as + executing all operations attached to the serial operation queue upon task completion. + */ + public class TaskDelegate: NSObject { + + /// The serial operation queue used to execute all operations after the task completes. + public let queue: NSOperationQueue + + let task: NSURLSessionTask + let progress: NSProgress + + var data: NSData? { return nil } + var error: NSError? + + var credential: NSURLCredential? + + init(task: NSURLSessionTask) { + self.task = task + self.progress = NSProgress(totalUnitCount: 0) + self.queue = { + let operationQueue = NSOperationQueue() + operationQueue.maxConcurrentOperationCount = 1 + operationQueue.suspended = true + + if #available(OSX 10.10, *) { + operationQueue.qualityOfService = NSQualityOfService.Utility + } + + return operationQueue + }() + } + + deinit { + queue.cancelAllOperations() + queue.suspended = false + } + + // MARK: - NSURLSessionTaskDelegate + + // MARK: Override Closures + + var taskWillPerformHTTPRedirection: ((NSURLSession, NSURLSessionTask, NSHTTPURLResponse, NSURLRequest) -> NSURLRequest?)? + var taskDidReceiveChallenge: ((NSURLSession, NSURLSessionTask, NSURLAuthenticationChallenge) -> (NSURLSessionAuthChallengeDisposition, NSURLCredential?))? + var taskNeedNewBodyStream: ((NSURLSession, NSURLSessionTask) -> NSInputStream?)? + var taskDidCompleteWithError: ((NSURLSession, NSURLSessionTask, NSError?) -> Void)? + + // MARK: Delegate Methods + + func URLSession( + session: NSURLSession, + task: NSURLSessionTask, + willPerformHTTPRedirection response: NSHTTPURLResponse, + newRequest request: NSURLRequest, + completionHandler: ((NSURLRequest?) -> Void)) + { + var redirectRequest: NSURLRequest? = request + + if let taskWillPerformHTTPRedirection = taskWillPerformHTTPRedirection { + redirectRequest = taskWillPerformHTTPRedirection(session, task, response, request) + } + + completionHandler(redirectRequest) + } + + func URLSession( + session: NSURLSession, + task: NSURLSessionTask, + didReceiveChallenge challenge: NSURLAuthenticationChallenge, + completionHandler: ((NSURLSessionAuthChallengeDisposition, NSURLCredential?) -> Void)) + { + var disposition: NSURLSessionAuthChallengeDisposition = .PerformDefaultHandling + var credential: NSURLCredential? + + if let taskDidReceiveChallenge = taskDidReceiveChallenge { + (disposition, credential) = taskDidReceiveChallenge(session, task, challenge) + } else if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust { + let host = challenge.protectionSpace.host + + if let + serverTrustPolicy = session.serverTrustPolicyManager?.serverTrustPolicyForHost(host), + serverTrust = challenge.protectionSpace.serverTrust + { + if serverTrustPolicy.evaluateServerTrust(serverTrust, isValidForHost: host) { + disposition = .UseCredential + credential = NSURLCredential(forTrust: serverTrust) + } else { + disposition = .CancelAuthenticationChallenge + } + } + } else { + if challenge.previousFailureCount > 0 { + disposition = .CancelAuthenticationChallenge + } else { + credential = self.credential ?? session.configuration.URLCredentialStorage?.defaultCredentialForProtectionSpace(challenge.protectionSpace) + + if credential != nil { + disposition = .UseCredential + } + } + } + + completionHandler(disposition, credential) + } + + func URLSession( + session: NSURLSession, + task: NSURLSessionTask, + needNewBodyStream completionHandler: ((NSInputStream?) -> Void)) + { + var bodyStream: NSInputStream? + + if let taskNeedNewBodyStream = taskNeedNewBodyStream { + bodyStream = taskNeedNewBodyStream(session, task) + } + + completionHandler(bodyStream) + } + + func URLSession(session: NSURLSession, task: NSURLSessionTask, didCompleteWithError error: NSError?) { + if let taskDidCompleteWithError = taskDidCompleteWithError { + taskDidCompleteWithError(session, task, error) + } else { + if let error = error { + self.error = error + + if let + downloadDelegate = self as? DownloadTaskDelegate, + userInfo = error.userInfo as? [String: AnyObject], + resumeData = userInfo[NSURLSessionDownloadTaskResumeData] as? NSData + { + downloadDelegate.resumeData = resumeData + } + } + + queue.suspended = false + } + } + } + + // MARK: - DataTaskDelegate + + class DataTaskDelegate: TaskDelegate, NSURLSessionDataDelegate { + var dataTask: NSURLSessionDataTask? { return task as? NSURLSessionDataTask } + + private var totalBytesReceived: Int64 = 0 + private var mutableData: NSMutableData + override var data: NSData? { + if dataStream != nil { + return nil + } else { + return mutableData + } + } + + private var expectedContentLength: Int64? + private var dataProgress: ((bytesReceived: Int64, totalBytesReceived: Int64, totalBytesExpectedToReceive: Int64) -> Void)? + private var dataStream: ((data: NSData) -> Void)? + + override init(task: NSURLSessionTask) { + mutableData = NSMutableData() + super.init(task: task) + } + + // MARK: - NSURLSessionDataDelegate + + // MARK: Override Closures + + var dataTaskDidReceiveResponse: ((NSURLSession, NSURLSessionDataTask, NSURLResponse) -> NSURLSessionResponseDisposition)? + var dataTaskDidBecomeDownloadTask: ((NSURLSession, NSURLSessionDataTask, NSURLSessionDownloadTask) -> Void)? + var dataTaskDidReceiveData: ((NSURLSession, NSURLSessionDataTask, NSData) -> Void)? + var dataTaskWillCacheResponse: ((NSURLSession, NSURLSessionDataTask, NSCachedURLResponse) -> NSCachedURLResponse?)? + + // MARK: Delegate Methods + + func URLSession( + session: NSURLSession, + dataTask: NSURLSessionDataTask, + didReceiveResponse response: NSURLResponse, + completionHandler: (NSURLSessionResponseDisposition -> Void)) + { + var disposition: NSURLSessionResponseDisposition = .Allow + + expectedContentLength = response.expectedContentLength + + if let dataTaskDidReceiveResponse = dataTaskDidReceiveResponse { + disposition = dataTaskDidReceiveResponse(session, dataTask, response) + } + + completionHandler(disposition) + } + + func URLSession( + session: NSURLSession, + dataTask: NSURLSessionDataTask, + didBecomeDownloadTask downloadTask: NSURLSessionDownloadTask) + { + dataTaskDidBecomeDownloadTask?(session, dataTask, downloadTask) + } + + func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveData data: NSData) { + if let dataTaskDidReceiveData = dataTaskDidReceiveData { + dataTaskDidReceiveData(session, dataTask, data) + } else { + if let dataStream = dataStream { + dataStream(data: data) + } else { + mutableData.appendData(data) + } + + totalBytesReceived += data.length + let totalBytesExpected = dataTask.response?.expectedContentLength ?? NSURLSessionTransferSizeUnknown + + progress.totalUnitCount = totalBytesExpected + progress.completedUnitCount = totalBytesReceived + + dataProgress?( + bytesReceived: Int64(data.length), + totalBytesReceived: totalBytesReceived, + totalBytesExpectedToReceive: totalBytesExpected + ) + } + } + + func URLSession( + session: NSURLSession, + dataTask: NSURLSessionDataTask, + willCacheResponse proposedResponse: NSCachedURLResponse, + completionHandler: ((NSCachedURLResponse?) -> Void)) + { + var cachedResponse: NSCachedURLResponse? = proposedResponse + + if let dataTaskWillCacheResponse = dataTaskWillCacheResponse { + cachedResponse = dataTaskWillCacheResponse(session, dataTask, proposedResponse) + } + + completionHandler(cachedResponse) + } + } +} + +// MARK: - CustomStringConvertible + +extension Request: CustomStringConvertible { + + /** + The textual representation used when written to an output stream, which includes the HTTP method and URL, as + well as the response status code if a response has been received. + */ + public var description: String { + var components: [String] = [] + + if let HTTPMethod = request?.HTTPMethod { + components.append(HTTPMethod) + } + + if let URLString = request?.URL?.absoluteString { + components.append(URLString) + } + + if let response = response { + components.append("(\(response.statusCode))") + } + + return components.joinWithSeparator(" ") + } +} + +// MARK: - CustomDebugStringConvertible + +extension Request: CustomDebugStringConvertible { + func cURLRepresentation() -> String { + var components = ["$ curl -i"] + + guard let + request = self.request, + URL = request.URL, + host = URL.host + else { + return "$ curl command could not be created" + } + + if let HTTPMethod = request.HTTPMethod where HTTPMethod != "GET" { + components.append("-X \(HTTPMethod)") + } + + if let credentialStorage = self.session.configuration.URLCredentialStorage { + let protectionSpace = NSURLProtectionSpace( + host: host, + port: URL.port?.integerValue ?? 0, + `protocol`: URL.scheme, + realm: host, + authenticationMethod: NSURLAuthenticationMethodHTTPBasic + ) + + if let credentials = credentialStorage.credentialsForProtectionSpace(protectionSpace)?.values { + for credential in credentials { + components.append("-u \(credential.user!):\(credential.password!)") + } + } else { + if let credential = delegate.credential { + components.append("-u \(credential.user!):\(credential.password!)") + } + } + } + + if session.configuration.HTTPShouldSetCookies { + if let + cookieStorage = session.configuration.HTTPCookieStorage, + cookies = cookieStorage.cookiesForURL(URL) where !cookies.isEmpty + { + let string = cookies.reduce("") { $0 + "\($1.name)=\($1.value ?? String());" } + components.append("-b \"\(string.substringToIndex(string.endIndex.predecessor()))\"") + } + } + + if let headerFields = request.allHTTPHeaderFields { + for (field, value) in headerFields { + switch field { + case "Cookie": + continue + default: + components.append("-H \"\(field): \(value)\"") + } + } + } + + if let additionalHeaders = session.configuration.HTTPAdditionalHeaders { + for (field, value) in additionalHeaders { + switch field { + case "Cookie": + continue + default: + components.append("-H \"\(field): \(value)\"") + } + } + } + + if let + HTTPBodyData = request.HTTPBody, + HTTPBody = String(data: HTTPBodyData, encoding: NSUTF8StringEncoding) + { + let escapedBody = HTTPBody.stringByReplacingOccurrencesOfString("\"", withString: "\\\"") + components.append("-d \"\(escapedBody)\"") + } + + components.append("\"\(URL.absoluteString)\"") + + return components.joinWithSeparator(" \\\n\t") + } + + /// The textual representation used when written to an output stream, in the form of a cURL command. + public var debugDescription: String { + return cURLRepresentation() + } +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/Response.swift b/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/Response.swift new file mode 100644 index 00000000000..fa2fffb3dea --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/Response.swift @@ -0,0 +1,83 @@ +// Response.swift +// +// Copyright (c) 2014–2016 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +import Foundation + +/// Used to store all response data returned from a completed `Request`. +public struct Response { + /// The URL request sent to the server. + public let request: NSURLRequest? + + /// The server's response to the URL request. + public let response: NSHTTPURLResponse? + + /// The data returned by the server. + public let data: NSData? + + /// The result of response serialization. + public let result: Result + + /** + Initializes the `Response` instance with the specified URL request, URL response, server data and response + serialization result. + + - parameter request: The URL request sent to the server. + - parameter response: The server's response to the URL request. + - parameter data: The data returned by the server. + - parameter result: The result of response serialization. + + - returns: the new `Response` instance. + */ + public init(request: NSURLRequest?, response: NSHTTPURLResponse?, data: NSData?, result: Result) { + self.request = request + self.response = response + self.data = data + self.result = result + } +} + +// MARK: - CustomStringConvertible + +extension Response: CustomStringConvertible { + /// The textual representation used when written to an output stream, which includes whether the result was a + /// success or failure. + public var description: String { + return result.debugDescription + } +} + +// MARK: - CustomDebugStringConvertible + +extension Response: CustomDebugStringConvertible { + /// The debug textual representation used when written to an output stream, which includes the URL request, the URL + /// response, the server data and the response serialization result. + public var debugDescription: String { + var output: [String] = [] + + output.append(request != nil ? "[Request]: \(request!)" : "[Request]: nil") + output.append(response != nil ? "[Response]: \(response!)" : "[Response]: nil") + output.append("[Data]: \(data?.length ?? 0) bytes") + output.append("[Result]: \(result.debugDescription)") + + return output.joinWithSeparator("\n") + } +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/ResponseSerialization.swift b/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/ResponseSerialization.swift new file mode 100644 index 00000000000..4aaacf61e31 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/ResponseSerialization.swift @@ -0,0 +1,355 @@ +// ResponseSerialization.swift +// +// Copyright (c) 2014–2016 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +import Foundation + +// MARK: ResponseSerializer + +/** + The type in which all response serializers must conform to in order to serialize a response. +*/ +public protocol ResponseSerializerType { + /// The type of serialized object to be created by this `ResponseSerializerType`. + typealias SerializedObject + + /// The type of error to be created by this `ResponseSerializer` if serialization fails. + typealias ErrorObject: ErrorType + + /** + A closure used by response handlers that takes a request, response, data and error and returns a result. + */ + var serializeResponse: (NSURLRequest?, NSHTTPURLResponse?, NSData?, NSError?) -> Result { get } +} + +// MARK: - + +/** + A generic `ResponseSerializerType` used to serialize a request, response, and data into a serialized object. +*/ +public struct ResponseSerializer: ResponseSerializerType { + /// The type of serialized object to be created by this `ResponseSerializer`. + public typealias SerializedObject = Value + + /// The type of error to be created by this `ResponseSerializer` if serialization fails. + public typealias ErrorObject = Error + + /** + A closure used by response handlers that takes a request, response, data and error and returns a result. + */ + public var serializeResponse: (NSURLRequest?, NSHTTPURLResponse?, NSData?, NSError?) -> Result + + /** + Initializes the `ResponseSerializer` instance with the given serialize response closure. + + - parameter serializeResponse: The closure used to serialize the response. + + - returns: The new generic response serializer instance. + */ + public init(serializeResponse: (NSURLRequest?, NSHTTPURLResponse?, NSData?, NSError?) -> Result) { + self.serializeResponse = serializeResponse + } +} + +// MARK: - Default + +extension Request { + + /** + Adds a handler to be called once the request has finished. + + - parameter queue: The queue on which the completion handler is dispatched. + - parameter completionHandler: The code to be executed once the request has finished. + + - returns: The request. + */ + public func response( + queue queue: dispatch_queue_t? = nil, + completionHandler: (NSURLRequest?, NSHTTPURLResponse?, NSData?, NSError?) -> Void) + -> Self + { + delegate.queue.addOperationWithBlock { + dispatch_async(queue ?? dispatch_get_main_queue()) { + completionHandler(self.request, self.response, self.delegate.data, self.delegate.error) + } + } + + return self + } + + /** + Adds a handler to be called once the request has finished. + + - parameter queue: The queue on which the completion handler is dispatched. + - parameter responseSerializer: The response serializer responsible for serializing the request, response, + and data. + - parameter completionHandler: The code to be executed once the request has finished. + + - returns: The request. + */ + public func response( + queue queue: dispatch_queue_t? = nil, + responseSerializer: T, + completionHandler: Response -> Void) + -> Self + { + delegate.queue.addOperationWithBlock { + let result = responseSerializer.serializeResponse( + self.request, + self.response, + self.delegate.data, + self.delegate.error + ) + + dispatch_async(queue ?? dispatch_get_main_queue()) { + let response = Response( + request: self.request, + response: self.response, + data: self.delegate.data, + result: result + ) + + completionHandler(response) + } + } + + return self + } +} + +// MARK: - Data + +extension Request { + + /** + Creates a response serializer that returns the associated data as-is. + + - returns: A data response serializer. + */ + public static func dataResponseSerializer() -> ResponseSerializer { + return ResponseSerializer { _, response, data, error in + guard error == nil else { return .Failure(error!) } + + if let response = response where response.statusCode == 204 { return .Success(NSData()) } + + guard let validData = data else { + let failureReason = "Data could not be serialized. Input data was nil." + let error = Error.errorWithCode(.DataSerializationFailed, failureReason: failureReason) + return .Failure(error) + } + + return .Success(validData) + } + } + + /** + Adds a handler to be called once the request has finished. + + - parameter completionHandler: The code to be executed once the request has finished. + + - returns: The request. + */ + public func responseData(completionHandler: Response -> Void) -> Self { + return response(responseSerializer: Request.dataResponseSerializer(), completionHandler: completionHandler) + } +} + +// MARK: - String + +extension Request { + + /** + Creates a response serializer that returns a string initialized from the response data with the specified + string encoding. + + - parameter encoding: The string encoding. If `nil`, the string encoding will be determined from the server + response, falling back to the default HTTP default character set, ISO-8859-1. + + - returns: A string response serializer. + */ + public static func stringResponseSerializer( + var encoding encoding: NSStringEncoding? = nil) + -> ResponseSerializer + { + return ResponseSerializer { _, response, data, error in + guard error == nil else { return .Failure(error!) } + + if let response = response where response.statusCode == 204 { return .Success("") } + + guard let validData = data else { + let failureReason = "String could not be serialized. Input data was nil." + let error = Error.errorWithCode(.StringSerializationFailed, failureReason: failureReason) + return .Failure(error) + } + + if let encodingName = response?.textEncodingName where encoding == nil { + encoding = CFStringConvertEncodingToNSStringEncoding( + CFStringConvertIANACharSetNameToEncoding(encodingName) + ) + } + + let actualEncoding = encoding ?? NSISOLatin1StringEncoding + + if let string = String(data: validData, encoding: actualEncoding) { + return .Success(string) + } else { + let failureReason = "String could not be serialized with encoding: \(actualEncoding)" + let error = Error.errorWithCode(.StringSerializationFailed, failureReason: failureReason) + return .Failure(error) + } + } + } + + /** + Adds a handler to be called once the request has finished. + + - parameter encoding: The string encoding. If `nil`, the string encoding will be determined from the + server response, falling back to the default HTTP default character set, + ISO-8859-1. + - parameter completionHandler: A closure to be executed once the request has finished. + + - returns: The request. + */ + public func responseString( + encoding encoding: NSStringEncoding? = nil, + completionHandler: Response -> Void) + -> Self + { + return response( + responseSerializer: Request.stringResponseSerializer(encoding: encoding), + completionHandler: completionHandler + ) + } +} + +// MARK: - JSON + +extension Request { + + /** + Creates a response serializer that returns a JSON object constructed from the response data using + `NSJSONSerialization` with the specified reading options. + + - parameter options: The JSON serialization reading options. `.AllowFragments` by default. + + - returns: A JSON object response serializer. + */ + public static func JSONResponseSerializer( + options options: NSJSONReadingOptions = .AllowFragments) + -> ResponseSerializer + { + return ResponseSerializer { _, response, data, error in + guard error == nil else { return .Failure(error!) } + + if let response = response where response.statusCode == 204 { return .Success(NSNull()) } + + guard let validData = data where validData.length > 0 else { + let failureReason = "JSON could not be serialized. Input data was nil or zero length." + let error = Error.errorWithCode(.JSONSerializationFailed, failureReason: failureReason) + return .Failure(error) + } + + do { + let JSON = try NSJSONSerialization.JSONObjectWithData(validData, options: options) + return .Success(JSON) + } catch { + return .Failure(error as NSError) + } + } + } + + /** + Adds a handler to be called once the request has finished. + + - parameter options: The JSON serialization reading options. `.AllowFragments` by default. + - parameter completionHandler: A closure to be executed once the request has finished. + + - returns: The request. + */ + public func responseJSON( + options options: NSJSONReadingOptions = .AllowFragments, + completionHandler: Response -> Void) + -> Self + { + return response( + responseSerializer: Request.JSONResponseSerializer(options: options), + completionHandler: completionHandler + ) + } +} + +// MARK: - Property List + +extension Request { + + /** + Creates a response serializer that returns an object constructed from the response data using + `NSPropertyListSerialization` with the specified reading options. + + - parameter options: The property list reading options. `NSPropertyListReadOptions()` by default. + + - returns: A property list object response serializer. + */ + public static func propertyListResponseSerializer( + options options: NSPropertyListReadOptions = NSPropertyListReadOptions()) + -> ResponseSerializer + { + return ResponseSerializer { _, response, data, error in + guard error == nil else { return .Failure(error!) } + + if let response = response where response.statusCode == 204 { return .Success(NSNull()) } + + guard let validData = data where validData.length > 0 else { + let failureReason = "Property list could not be serialized. Input data was nil or zero length." + let error = Error.errorWithCode(.PropertyListSerializationFailed, failureReason: failureReason) + return .Failure(error) + } + + do { + let plist = try NSPropertyListSerialization.propertyListWithData(validData, options: options, format: nil) + return .Success(plist) + } catch { + return .Failure(error as NSError) + } + } + } + + /** + Adds a handler to be called once the request has finished. + + - parameter options: The property list reading options. `0` by default. + - parameter completionHandler: A closure to be executed once the request has finished. The closure takes 3 + arguments: the URL request, the URL response, the server data and the result + produced while creating the property list. + + - returns: The request. + */ + public func responsePropertyList( + options options: NSPropertyListReadOptions = NSPropertyListReadOptions(), + completionHandler: Response -> Void) + -> Self + { + return response( + responseSerializer: Request.propertyListResponseSerializer(options: options), + completionHandler: completionHandler + ) + } +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/Result.swift b/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/Result.swift new file mode 100644 index 00000000000..a8557cabb42 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/Result.swift @@ -0,0 +1,101 @@ +// Result.swift +// +// Copyright (c) 2014–2016 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +import Foundation + +/** + Used to represent whether a request was successful or encountered an error. + + - Success: The request and all post processing operations were successful resulting in the serialization of the + provided associated value. + - Failure: The request encountered an error resulting in a failure. The associated values are the original data + provided by the server as well as the error that caused the failure. +*/ +public enum Result { + case Success(Value) + case Failure(Error) + + /// Returns `true` if the result is a success, `false` otherwise. + public var isSuccess: Bool { + switch self { + case .Success: + return true + case .Failure: + return false + } + } + + /// Returns `true` if the result is a failure, `false` otherwise. + public var isFailure: Bool { + return !isSuccess + } + + /// Returns the associated value if the result is a success, `nil` otherwise. + public var value: Value? { + switch self { + case .Success(let value): + return value + case .Failure: + return nil + } + } + + /// Returns the associated error value if the result is a failure, `nil` otherwise. + public var error: Error? { + switch self { + case .Success: + return nil + case .Failure(let error): + return error + } + } +} + +// MARK: - CustomStringConvertible + +extension Result: CustomStringConvertible { + /// The textual representation used when written to an output stream, which includes whether the result was a + /// success or failure. + public var description: String { + switch self { + case .Success: + return "SUCCESS" + case .Failure: + return "FAILURE" + } + } +} + +// MARK: - CustomDebugStringConvertible + +extension Result: CustomDebugStringConvertible { + /// The debug textual representation used when written to an output stream, which includes whether the result was a + /// success or failure in addition to the value or error. + public var debugDescription: String { + switch self { + case .Success(let value): + return "SUCCESS: \(value)" + case .Failure(let error): + return "FAILURE: \(error)" + } + } +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/ServerTrustPolicy.swift b/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/ServerTrustPolicy.swift new file mode 100644 index 00000000000..07cd848a606 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/ServerTrustPolicy.swift @@ -0,0 +1,302 @@ +// ServerTrustPolicy.swift +// +// Copyright (c) 2014–2016 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +import Foundation + +/// Responsible for managing the mapping of `ServerTrustPolicy` objects to a given host. +public class ServerTrustPolicyManager { + /// The dictionary of policies mapped to a particular host. + public let policies: [String: ServerTrustPolicy] + + /** + Initializes the `ServerTrustPolicyManager` instance with the given policies. + + Since different servers and web services can have different leaf certificates, intermediate and even root + certficates, it is important to have the flexibility to specify evaluation policies on a per host basis. This + allows for scenarios such as using default evaluation for host1, certificate pinning for host2, public key + pinning for host3 and disabling evaluation for host4. + + - parameter policies: A dictionary of all policies mapped to a particular host. + + - returns: The new `ServerTrustPolicyManager` instance. + */ + public init(policies: [String: ServerTrustPolicy]) { + self.policies = policies + } + + /** + Returns the `ServerTrustPolicy` for the given host if applicable. + + By default, this method will return the policy that perfectly matches the given host. Subclasses could override + this method and implement more complex mapping implementations such as wildcards. + + - parameter host: The host to use when searching for a matching policy. + + - returns: The server trust policy for the given host if found. + */ + public func serverTrustPolicyForHost(host: String) -> ServerTrustPolicy? { + return policies[host] + } +} + +// MARK: - + +extension NSURLSession { + private struct AssociatedKeys { + static var ManagerKey = "NSURLSession.ServerTrustPolicyManager" + } + + var serverTrustPolicyManager: ServerTrustPolicyManager? { + get { + return objc_getAssociatedObject(self, &AssociatedKeys.ManagerKey) as? ServerTrustPolicyManager + } + set (manager) { + objc_setAssociatedObject(self, &AssociatedKeys.ManagerKey, manager, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) + } + } +} + +// MARK: - ServerTrustPolicy + +/** + The `ServerTrustPolicy` evaluates the server trust generally provided by an `NSURLAuthenticationChallenge` when + connecting to a server over a secure HTTPS connection. The policy configuration then evaluates the server trust + with a given set of criteria to determine whether the server trust is valid and the connection should be made. + + Using pinned certificates or public keys for evaluation helps prevent man-in-the-middle (MITM) attacks and other + vulnerabilities. Applications dealing with sensitive customer data or financial information are strongly encouraged + to route all communication over an HTTPS connection with pinning enabled. + + - PerformDefaultEvaluation: Uses the default server trust evaluation while allowing you to control whether to + validate the host provided by the challenge. Applications are encouraged to always + validate the host in production environments to guarantee the validity of the server's + certificate chain. + + - PinCertificates: Uses the pinned certificates to validate the server trust. The server trust is + considered valid if one of the pinned certificates match one of the server certificates. + By validating both the certificate chain and host, certificate pinning provides a very + secure form of server trust validation mitigating most, if not all, MITM attacks. + Applications are encouraged to always validate the host and require a valid certificate + chain in production environments. + + - PinPublicKeys: Uses the pinned public keys to validate the server trust. The server trust is considered + valid if one of the pinned public keys match one of the server certificate public keys. + By validating both the certificate chain and host, public key pinning provides a very + secure form of server trust validation mitigating most, if not all, MITM attacks. + Applications are encouraged to always validate the host and require a valid certificate + chain in production environments. + + - DisableEvaluation: Disables all evaluation which in turn will always consider any server trust as valid. + + - CustomEvaluation: Uses the associated closure to evaluate the validity of the server trust. +*/ +public enum ServerTrustPolicy { + case PerformDefaultEvaluation(validateHost: Bool) + case PinCertificates(certificates: [SecCertificate], validateCertificateChain: Bool, validateHost: Bool) + case PinPublicKeys(publicKeys: [SecKey], validateCertificateChain: Bool, validateHost: Bool) + case DisableEvaluation + case CustomEvaluation((serverTrust: SecTrust, host: String) -> Bool) + + // MARK: - Bundle Location + + /** + Returns all certificates within the given bundle with a `.cer` file extension. + + - parameter bundle: The bundle to search for all `.cer` files. + + - returns: All certificates within the given bundle. + */ + public static func certificatesInBundle(bundle: NSBundle = NSBundle.mainBundle()) -> [SecCertificate] { + var certificates: [SecCertificate] = [] + + let paths = Set([".cer", ".CER", ".crt", ".CRT", ".der", ".DER"].map { fileExtension in + bundle.pathsForResourcesOfType(fileExtension, inDirectory: nil) + }.flatten()) + + for path in paths { + if let + certificateData = NSData(contentsOfFile: path), + certificate = SecCertificateCreateWithData(nil, certificateData) + { + certificates.append(certificate) + } + } + + return certificates + } + + /** + Returns all public keys within the given bundle with a `.cer` file extension. + + - parameter bundle: The bundle to search for all `*.cer` files. + + - returns: All public keys within the given bundle. + */ + public static func publicKeysInBundle(bundle: NSBundle = NSBundle.mainBundle()) -> [SecKey] { + var publicKeys: [SecKey] = [] + + for certificate in certificatesInBundle(bundle) { + if let publicKey = publicKeyForCertificate(certificate) { + publicKeys.append(publicKey) + } + } + + return publicKeys + } + + // MARK: - Evaluation + + /** + Evaluates whether the server trust is valid for the given host. + + - parameter serverTrust: The server trust to evaluate. + - parameter host: The host of the challenge protection space. + + - returns: Whether the server trust is valid. + */ + public func evaluateServerTrust(serverTrust: SecTrust, isValidForHost host: String) -> Bool { + var serverTrustIsValid = false + + switch self { + case let .PerformDefaultEvaluation(validateHost): + let policy = SecPolicyCreateSSL(true, validateHost ? host as CFString : nil) + SecTrustSetPolicies(serverTrust, [policy]) + + serverTrustIsValid = trustIsValid(serverTrust) + case let .PinCertificates(pinnedCertificates, validateCertificateChain, validateHost): + if validateCertificateChain { + let policy = SecPolicyCreateSSL(true, validateHost ? host as CFString : nil) + SecTrustSetPolicies(serverTrust, [policy]) + + SecTrustSetAnchorCertificates(serverTrust, pinnedCertificates) + SecTrustSetAnchorCertificatesOnly(serverTrust, true) + + serverTrustIsValid = trustIsValid(serverTrust) + } else { + let serverCertificatesDataArray = certificateDataForTrust(serverTrust) + let pinnedCertificatesDataArray = certificateDataForCertificates(pinnedCertificates) + + outerLoop: for serverCertificateData in serverCertificatesDataArray { + for pinnedCertificateData in pinnedCertificatesDataArray { + if serverCertificateData.isEqualToData(pinnedCertificateData) { + serverTrustIsValid = true + break outerLoop + } + } + } + } + case let .PinPublicKeys(pinnedPublicKeys, validateCertificateChain, validateHost): + var certificateChainEvaluationPassed = true + + if validateCertificateChain { + let policy = SecPolicyCreateSSL(true, validateHost ? host as CFString : nil) + SecTrustSetPolicies(serverTrust, [policy]) + + certificateChainEvaluationPassed = trustIsValid(serverTrust) + } + + if certificateChainEvaluationPassed { + outerLoop: for serverPublicKey in ServerTrustPolicy.publicKeysForTrust(serverTrust) as [AnyObject] { + for pinnedPublicKey in pinnedPublicKeys as [AnyObject] { + if serverPublicKey.isEqual(pinnedPublicKey) { + serverTrustIsValid = true + break outerLoop + } + } + } + } + case .DisableEvaluation: + serverTrustIsValid = true + case let .CustomEvaluation(closure): + serverTrustIsValid = closure(serverTrust: serverTrust, host: host) + } + + return serverTrustIsValid + } + + // MARK: - Private - Trust Validation + + private func trustIsValid(trust: SecTrust) -> Bool { + var isValid = false + + var result = SecTrustResultType(kSecTrustResultInvalid) + let status = SecTrustEvaluate(trust, &result) + + if status == errSecSuccess { + let unspecified = SecTrustResultType(kSecTrustResultUnspecified) + let proceed = SecTrustResultType(kSecTrustResultProceed) + + isValid = result == unspecified || result == proceed + } + + return isValid + } + + // MARK: - Private - Certificate Data + + private func certificateDataForTrust(trust: SecTrust) -> [NSData] { + var certificates: [SecCertificate] = [] + + for index in 0.. [NSData] { + return certificates.map { SecCertificateCopyData($0) as NSData } + } + + // MARK: - Private - Public Key Extraction + + private static func publicKeysForTrust(trust: SecTrust) -> [SecKey] { + var publicKeys: [SecKey] = [] + + for index in 0.. SecKey? { + var publicKey: SecKey? + + let policy = SecPolicyCreateBasicX509() + var trust: SecTrust? + let trustCreationStatus = SecTrustCreateWithCertificates(certificate, policy, &trust) + + if let trust = trust where trustCreationStatus == errSecSuccess { + publicKey = SecTrustCopyPublicKey(trust) + } + + return publicKey + } +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/Stream.swift b/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/Stream.swift new file mode 100644 index 00000000000..bc9ee450c5a --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/Stream.swift @@ -0,0 +1,180 @@ +// Stream.swift +// +// Copyright (c) 2014–2016 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +import Foundation + +#if !os(watchOS) + +@available(iOS 9.0, OSX 10.11, *) +extension Manager { + private enum Streamable { + case Stream(String, Int) + case NetService(NSNetService) + } + + private func stream(streamable: Streamable) -> Request { + var streamTask: NSURLSessionStreamTask! + + switch streamable { + case .Stream(let hostName, let port): + dispatch_sync(queue) { + streamTask = self.session.streamTaskWithHostName(hostName, port: port) + } + case .NetService(let netService): + dispatch_sync(queue) { + streamTask = self.session.streamTaskWithNetService(netService) + } + } + + let request = Request(session: session, task: streamTask) + + delegate[request.delegate.task] = request.delegate + + if startRequestsImmediately { + request.resume() + } + + return request + } + + /** + Creates a request for bidirectional streaming with the given hostname and port. + + - parameter hostName: The hostname of the server to connect to. + - parameter port: The port of the server to connect to. + + :returns: The created stream request. + */ + public func stream(hostName hostName: String, port: Int) -> Request { + return stream(.Stream(hostName, port)) + } + + /** + Creates a request for bidirectional streaming with the given `NSNetService`. + + - parameter netService: The net service used to identify the endpoint. + + - returns: The created stream request. + */ + public func stream(netService netService: NSNetService) -> Request { + return stream(.NetService(netService)) + } +} + +// MARK: - + +@available(iOS 9.0, OSX 10.11, *) +extension Manager.SessionDelegate: NSURLSessionStreamDelegate { + + // MARK: Override Closures + + /// Overrides default behavior for NSURLSessionStreamDelegate method `URLSession:readClosedForStreamTask:`. + public var streamTaskReadClosed: ((NSURLSession, NSURLSessionStreamTask) -> Void)? { + get { + return _streamTaskReadClosed as? (NSURLSession, NSURLSessionStreamTask) -> Void + } + set { + _streamTaskReadClosed = newValue + } + } + + /// Overrides default behavior for NSURLSessionStreamDelegate method `URLSession:writeClosedForStreamTask:`. + public var streamTaskWriteClosed: ((NSURLSession, NSURLSessionStreamTask) -> Void)? { + get { + return _streamTaskWriteClosed as? (NSURLSession, NSURLSessionStreamTask) -> Void + } + set { + _streamTaskWriteClosed = newValue + } + } + + /// Overrides default behavior for NSURLSessionStreamDelegate method `URLSession:betterRouteDiscoveredForStreamTask:`. + public var streamTaskBetterRouteDiscovered: ((NSURLSession, NSURLSessionStreamTask) -> Void)? { + get { + return _streamTaskBetterRouteDiscovered as? (NSURLSession, NSURLSessionStreamTask) -> Void + } + set { + _streamTaskBetterRouteDiscovered = newValue + } + } + + /// Overrides default behavior for NSURLSessionStreamDelegate method `URLSession:streamTask:didBecomeInputStream:outputStream:`. + public var streamTaskDidBecomeInputStream: ((NSURLSession, NSURLSessionStreamTask, NSInputStream, NSOutputStream) -> Void)? { + get { + return _streamTaskDidBecomeInputStream as? (NSURLSession, NSURLSessionStreamTask, NSInputStream, NSOutputStream) -> Void + } + set { + _streamTaskDidBecomeInputStream = newValue + } + } + + // MARK: Delegate Methods + + /** + Tells the delegate that the read side of the connection has been closed. + + - parameter session: The session. + - parameter streamTask: The stream task. + */ + public func URLSession(session: NSURLSession, readClosedForStreamTask streamTask: NSURLSessionStreamTask) { + streamTaskReadClosed?(session, streamTask) + } + + /** + Tells the delegate that the write side of the connection has been closed. + + - parameter session: The session. + - parameter streamTask: The stream task. + */ + public func URLSession(session: NSURLSession, writeClosedForStreamTask streamTask: NSURLSessionStreamTask) { + streamTaskWriteClosed?(session, streamTask) + } + + /** + Tells the delegate that the system has determined that a better route to the host is available. + + - parameter session: The session. + - parameter streamTask: The stream task. + */ + public func URLSession(session: NSURLSession, betterRouteDiscoveredForStreamTask streamTask: NSURLSessionStreamTask) { + streamTaskBetterRouteDiscovered?(session, streamTask) + } + + /** + Tells the delegate that the stream task has been completed and provides the unopened stream objects. + + - parameter session: The session. + - parameter streamTask: The stream task. + - parameter inputStream: The new input stream. + - parameter outputStream: The new output stream. + */ + public func URLSession( + session: NSURLSession, + streamTask: NSURLSessionStreamTask, + didBecomeInputStream inputStream: NSInputStream, + outputStream: NSOutputStream) + { + streamTaskDidBecomeInputStream?(session, streamTask, inputStream, outputStream) + } +} + +#endif diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/Upload.swift b/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/Upload.swift new file mode 100644 index 00000000000..ee6b34ced5b --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/Upload.swift @@ -0,0 +1,372 @@ +// Upload.swift +// +// Copyright (c) 2014–2016 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +import Foundation + +extension Manager { + private enum Uploadable { + case Data(NSURLRequest, NSData) + case File(NSURLRequest, NSURL) + case Stream(NSURLRequest, NSInputStream) + } + + private func upload(uploadable: Uploadable) -> Request { + var uploadTask: NSURLSessionUploadTask! + var HTTPBodyStream: NSInputStream? + + switch uploadable { + case .Data(let request, let data): + dispatch_sync(queue) { + uploadTask = self.session.uploadTaskWithRequest(request, fromData: data) + } + case .File(let request, let fileURL): + dispatch_sync(queue) { + uploadTask = self.session.uploadTaskWithRequest(request, fromFile: fileURL) + } + case .Stream(let request, let stream): + dispatch_sync(queue) { + uploadTask = self.session.uploadTaskWithStreamedRequest(request) + } + + HTTPBodyStream = stream + } + + let request = Request(session: session, task: uploadTask) + + if HTTPBodyStream != nil { + request.delegate.taskNeedNewBodyStream = { _, _ in + return HTTPBodyStream + } + } + + delegate[request.delegate.task] = request.delegate + + if startRequestsImmediately { + request.resume() + } + + return request + } + + // MARK: File + + /** + Creates a request for uploading a file to the specified URL request. + + If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned. + + - parameter URLRequest: The URL request + - parameter file: The file to upload + + - returns: The created upload request. + */ + public func upload(URLRequest: URLRequestConvertible, file: NSURL) -> Request { + return upload(.File(URLRequest.URLRequest, file)) + } + + /** + Creates a request for uploading a file to the specified URL request. + + If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned. + + - parameter method: The HTTP method. + - parameter URLString: The URL string. + - parameter headers: The HTTP headers. `nil` by default. + - parameter file: The file to upload + + - returns: The created upload request. + */ + public func upload( + method: Method, + _ URLString: URLStringConvertible, + headers: [String: String]? = nil, + file: NSURL) + -> Request + { + let mutableURLRequest = URLRequest(method, URLString, headers: headers) + return upload(mutableURLRequest, file: file) + } + + // MARK: Data + + /** + Creates a request for uploading data to the specified URL request. + + If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned. + + - parameter URLRequest: The URL request. + - parameter data: The data to upload. + + - returns: The created upload request. + */ + public func upload(URLRequest: URLRequestConvertible, data: NSData) -> Request { + return upload(.Data(URLRequest.URLRequest, data)) + } + + /** + Creates a request for uploading data to the specified URL request. + + If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned. + + - parameter method: The HTTP method. + - parameter URLString: The URL string. + - parameter headers: The HTTP headers. `nil` by default. + - parameter data: The data to upload + + - returns: The created upload request. + */ + public func upload( + method: Method, + _ URLString: URLStringConvertible, + headers: [String: String]? = nil, + data: NSData) + -> Request + { + let mutableURLRequest = URLRequest(method, URLString, headers: headers) + + return upload(mutableURLRequest, data: data) + } + + // MARK: Stream + + /** + Creates a request for uploading a stream to the specified URL request. + + If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned. + + - parameter URLRequest: The URL request. + - parameter stream: The stream to upload. + + - returns: The created upload request. + */ + public func upload(URLRequest: URLRequestConvertible, stream: NSInputStream) -> Request { + return upload(.Stream(URLRequest.URLRequest, stream)) + } + + /** + Creates a request for uploading a stream to the specified URL request. + + If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned. + + - parameter method: The HTTP method. + - parameter URLString: The URL string. + - parameter headers: The HTTP headers. `nil` by default. + - parameter stream: The stream to upload. + + - returns: The created upload request. + */ + public func upload( + method: Method, + _ URLString: URLStringConvertible, + headers: [String: String]? = nil, + stream: NSInputStream) + -> Request + { + let mutableURLRequest = URLRequest(method, URLString, headers: headers) + + return upload(mutableURLRequest, stream: stream) + } + + // MARK: MultipartFormData + + /// Default memory threshold used when encoding `MultipartFormData`. + public static let MultipartFormDataEncodingMemoryThreshold: UInt64 = 10 * 1024 * 1024 + + /** + Defines whether the `MultipartFormData` encoding was successful and contains result of the encoding as + associated values. + + - Success: Represents a successful `MultipartFormData` encoding and contains the new `Request` along with + streaming information. + - Failure: Used to represent a failure in the `MultipartFormData` encoding and also contains the encoding + error. + */ + public enum MultipartFormDataEncodingResult { + case Success(request: Request, streamingFromDisk: Bool, streamFileURL: NSURL?) + case Failure(ErrorType) + } + + /** + Encodes the `MultipartFormData` and creates a request to upload the result to the specified URL request. + + It is important to understand the memory implications of uploading `MultipartFormData`. If the cummulative + payload is small, encoding the data in-memory and directly uploading to a server is the by far the most + efficient approach. However, if the payload is too large, encoding the data in-memory could cause your app to + be terminated. Larger payloads must first be written to disk using input and output streams to keep the memory + footprint low, then the data can be uploaded as a stream from the resulting file. Streaming from disk MUST be + used for larger payloads such as video content. + + The `encodingMemoryThreshold` parameter allows Alamofire to automatically determine whether to encode in-memory + or stream from disk. If the content length of the `MultipartFormData` is below the `encodingMemoryThreshold`, + encoding takes place in-memory. If the content length exceeds the threshold, the data is streamed to disk + during the encoding process. Then the result is uploaded as data or as a stream depending on which encoding + technique was used. + + If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned. + + - parameter method: The HTTP method. + - parameter URLString: The URL string. + - parameter headers: The HTTP headers. `nil` by default. + - parameter multipartFormData: The closure used to append body parts to the `MultipartFormData`. + - parameter encodingMemoryThreshold: The encoding memory threshold in bytes. + `MultipartFormDataEncodingMemoryThreshold` by default. + - parameter encodingCompletion: The closure called when the `MultipartFormData` encoding is complete. + */ + public func upload( + method: Method, + _ URLString: URLStringConvertible, + headers: [String: String]? = nil, + multipartFormData: MultipartFormData -> Void, + encodingMemoryThreshold: UInt64 = Manager.MultipartFormDataEncodingMemoryThreshold, + encodingCompletion: (MultipartFormDataEncodingResult -> Void)?) + { + let mutableURLRequest = URLRequest(method, URLString, headers: headers) + + return upload( + mutableURLRequest, + multipartFormData: multipartFormData, + encodingMemoryThreshold: encodingMemoryThreshold, + encodingCompletion: encodingCompletion + ) + } + + /** + Encodes the `MultipartFormData` and creates a request to upload the result to the specified URL request. + + It is important to understand the memory implications of uploading `MultipartFormData`. If the cummulative + payload is small, encoding the data in-memory and directly uploading to a server is the by far the most + efficient approach. However, if the payload is too large, encoding the data in-memory could cause your app to + be terminated. Larger payloads must first be written to disk using input and output streams to keep the memory + footprint low, then the data can be uploaded as a stream from the resulting file. Streaming from disk MUST be + used for larger payloads such as video content. + + The `encodingMemoryThreshold` parameter allows Alamofire to automatically determine whether to encode in-memory + or stream from disk. If the content length of the `MultipartFormData` is below the `encodingMemoryThreshold`, + encoding takes place in-memory. If the content length exceeds the threshold, the data is streamed to disk + during the encoding process. Then the result is uploaded as data or as a stream depending on which encoding + technique was used. + + If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned. + + - parameter URLRequest: The URL request. + - parameter multipartFormData: The closure used to append body parts to the `MultipartFormData`. + - parameter encodingMemoryThreshold: The encoding memory threshold in bytes. + `MultipartFormDataEncodingMemoryThreshold` by default. + - parameter encodingCompletion: The closure called when the `MultipartFormData` encoding is complete. + */ + public func upload( + URLRequest: URLRequestConvertible, + multipartFormData: MultipartFormData -> Void, + encodingMemoryThreshold: UInt64 = Manager.MultipartFormDataEncodingMemoryThreshold, + encodingCompletion: (MultipartFormDataEncodingResult -> Void)?) + { + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { + let formData = MultipartFormData() + multipartFormData(formData) + + let URLRequestWithContentType = URLRequest.URLRequest + URLRequestWithContentType.setValue(formData.contentType, forHTTPHeaderField: "Content-Type") + + let isBackgroundSession = self.session.configuration.identifier != nil + + if formData.contentLength < encodingMemoryThreshold && !isBackgroundSession { + do { + let data = try formData.encode() + let encodingResult = MultipartFormDataEncodingResult.Success( + request: self.upload(URLRequestWithContentType, data: data), + streamingFromDisk: false, + streamFileURL: nil + ) + + dispatch_async(dispatch_get_main_queue()) { + encodingCompletion?(encodingResult) + } + } catch { + dispatch_async(dispatch_get_main_queue()) { + encodingCompletion?(.Failure(error as NSError)) + } + } + } else { + let fileManager = NSFileManager.defaultManager() + let tempDirectoryURL = NSURL(fileURLWithPath: NSTemporaryDirectory()) + let directoryURL = tempDirectoryURL.URLByAppendingPathComponent("com.alamofire.manager/multipart.form.data") + let fileName = NSUUID().UUIDString + let fileURL = directoryURL.URLByAppendingPathComponent(fileName) + + do { + try fileManager.createDirectoryAtURL(directoryURL, withIntermediateDirectories: true, attributes: nil) + try formData.writeEncodedDataToDisk(fileURL) + + dispatch_async(dispatch_get_main_queue()) { + let encodingResult = MultipartFormDataEncodingResult.Success( + request: self.upload(URLRequestWithContentType, file: fileURL), + streamingFromDisk: true, + streamFileURL: fileURL + ) + encodingCompletion?(encodingResult) + } + } catch { + dispatch_async(dispatch_get_main_queue()) { + encodingCompletion?(.Failure(error as NSError)) + } + } + } + } + } +} + +// MARK: - + +extension Request { + + // MARK: - UploadTaskDelegate + + class UploadTaskDelegate: DataTaskDelegate { + var uploadTask: NSURLSessionUploadTask? { return task as? NSURLSessionUploadTask } + var uploadProgress: ((Int64, Int64, Int64) -> Void)! + + // MARK: - NSURLSessionTaskDelegate + + // MARK: Override Closures + + var taskDidSendBodyData: ((NSURLSession, NSURLSessionTask, Int64, Int64, Int64) -> Void)? + + // MARK: Delegate Methods + + func URLSession( + session: NSURLSession, + task: NSURLSessionTask, + didSendBodyData bytesSent: Int64, + totalBytesSent: Int64, + totalBytesExpectedToSend: Int64) + { + if let taskDidSendBodyData = taskDidSendBodyData { + taskDidSendBodyData(session, task, bytesSent, totalBytesSent, totalBytesExpectedToSend) + } else { + progress.totalUnitCount = totalBytesExpectedToSend + progress.completedUnitCount = totalBytesSent + + uploadProgress?(bytesSent, totalBytesSent, totalBytesExpectedToSend) + } + } + } +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/Validation.swift b/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/Validation.swift new file mode 100644 index 00000000000..71d21e1afa6 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Alamofire/Source/Validation.swift @@ -0,0 +1,189 @@ +// Validation.swift +// +// Copyright (c) 2014–2016 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +import Foundation + +extension Request { + + /** + Used to represent whether validation was successful or encountered an error resulting in a failure. + + - Success: The validation was successful. + - Failure: The validation failed encountering the provided error. + */ + public enum ValidationResult { + case Success + case Failure(NSError) + } + + /** + A closure used to validate a request that takes a URL request and URL response, and returns whether the + request was valid. + */ + public typealias Validation = (NSURLRequest?, NSHTTPURLResponse) -> ValidationResult + + /** + Validates the request, using the specified closure. + + If validation fails, subsequent calls to response handlers will have an associated error. + + - parameter validation: A closure to validate the request. + + - returns: The request. + */ + public func validate(validation: Validation) -> Self { + delegate.queue.addOperationWithBlock { + if let + response = self.response where self.delegate.error == nil, + case let .Failure(error) = validation(self.request, response) + { + self.delegate.error = error + } + } + + return self + } + + // MARK: - Status Code + + /** + Validates that the response has a status code in the specified range. + + If validation fails, subsequent calls to response handlers will have an associated error. + + - parameter range: The range of acceptable status codes. + + - returns: The request. + */ + public func validate(statusCode acceptableStatusCode: S) -> Self { + return validate { _, response in + if acceptableStatusCode.contains(response.statusCode) { + return .Success + } else { + let failureReason = "Response status code was unacceptable: \(response.statusCode)" + return .Failure(Error.errorWithCode(.StatusCodeValidationFailed, failureReason: failureReason)) + } + } + } + + // MARK: - Content-Type + + private struct MIMEType { + let type: String + let subtype: String + + init?(_ string: String) { + let components: [String] = { + let stripped = string.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()) + let split = stripped.substringToIndex(stripped.rangeOfString(";")?.startIndex ?? stripped.endIndex) + return split.componentsSeparatedByString("/") + }() + + if let + type = components.first, + subtype = components.last + { + self.type = type + self.subtype = subtype + } else { + return nil + } + } + + func matches(MIME: MIMEType) -> Bool { + switch (type, subtype) { + case (MIME.type, MIME.subtype), (MIME.type, "*"), ("*", MIME.subtype), ("*", "*"): + return true + default: + return false + } + } + } + + /** + Validates that the response has a content type in the specified array. + + If validation fails, subsequent calls to response handlers will have an associated error. + + - parameter contentType: The acceptable content types, which may specify wildcard types and/or subtypes. + + - returns: The request. + */ + public func validate(contentType acceptableContentTypes: S) -> Self { + return validate { _, response in + guard let validData = self.delegate.data where validData.length > 0 else { return .Success } + + if let + responseContentType = response.MIMEType, + responseMIMEType = MIMEType(responseContentType) + { + for contentType in acceptableContentTypes { + if let acceptableMIMEType = MIMEType(contentType) where acceptableMIMEType.matches(responseMIMEType) { + return .Success + } + } + } else { + for contentType in acceptableContentTypes { + if let MIMEType = MIMEType(contentType) where MIMEType.type == "*" && MIMEType.subtype == "*" { + return .Success + } + } + } + + let failureReason: String + + if let responseContentType = response.MIMEType { + failureReason = ( + "Response content type \"\(responseContentType)\" does not match any acceptable " + + "content types: \(acceptableContentTypes)" + ) + } else { + failureReason = "Response content type was missing and acceptable content type does not match \"*/*\"" + } + + return .Failure(Error.errorWithCode(.ContentTypeValidationFailed, failureReason: failureReason)) + } + } + + // MARK: - Automatic + + /** + Validates that the response has a status code in the default acceptable range of 200...299, and that the content + type matches any specified in the Accept HTTP header field. + + If validation fails, subsequent calls to response handlers will have an associated error. + + - returns: The request. + */ + public func validate() -> Self { + let acceptableStatusCodes: Range = 200..<300 + let acceptableContentTypes: [String] = { + if let accept = request?.valueForHTTPHeaderField("Accept") { + return accept.componentsSeparatedByString(",") + } + + return ["*/*"] + }() + + return validate(statusCode: acceptableStatusCodes).validate(contentType: acceptableContentTypes) + } +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/OMGHTTPURLRQ/OMGFormURLEncode.h b/samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/OMGHTTPURLRQ/OMGFormURLEncode.h new file mode 120000 index 00000000000..8271dc48ed5 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/OMGHTTPURLRQ/OMGFormURLEncode.h @@ -0,0 +1 @@ +../../../OMGHTTPURLRQ/Sources/OMGFormURLEncode.h \ No newline at end of file diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/OMGHTTPURLRQ/OMGHTTPURLRQ.h b/samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/OMGHTTPURLRQ/OMGHTTPURLRQ.h new file mode 120000 index 00000000000..e0cf7ca4e47 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/OMGHTTPURLRQ/OMGHTTPURLRQ.h @@ -0,0 +1 @@ +../../../OMGHTTPURLRQ/Sources/OMGHTTPURLRQ.h \ No newline at end of file diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/OMGHTTPURLRQ/OMGUserAgent.h b/samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/OMGHTTPURLRQ/OMGUserAgent.h new file mode 120000 index 00000000000..682de9a9e3e --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/OMGHTTPURLRQ/OMGUserAgent.h @@ -0,0 +1 @@ +../../../OMGHTTPURLRQ/Sources/OMGUserAgent.h \ No newline at end of file diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/PromiseKit/AnyPromise.h b/samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/PromiseKit/AnyPromise.h new file mode 120000 index 00000000000..61ce91eb094 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/PromiseKit/AnyPromise.h @@ -0,0 +1 @@ +../../../PromiseKit/Sources/AnyPromise.h \ No newline at end of file diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/PromiseKit/CALayer+AnyPromise.h b/samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/PromiseKit/CALayer+AnyPromise.h new file mode 120000 index 00000000000..831485ea1ce --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/PromiseKit/CALayer+AnyPromise.h @@ -0,0 +1 @@ +../../../PromiseKit/Categories/QuartzCore/CALayer+AnyPromise.h \ No newline at end of file diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/PromiseKit/NSError+Cancellation.h b/samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/PromiseKit/NSError+Cancellation.h new file mode 120000 index 00000000000..7312b04bea2 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/PromiseKit/NSError+Cancellation.h @@ -0,0 +1 @@ +../../../PromiseKit/Sources/NSError+Cancellation.h \ No newline at end of file diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/PromiseKit/NSNotificationCenter+AnyPromise.h b/samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/PromiseKit/NSNotificationCenter+AnyPromise.h new file mode 120000 index 00000000000..2890a33e083 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/PromiseKit/NSNotificationCenter+AnyPromise.h @@ -0,0 +1 @@ +../../../PromiseKit/Categories/Foundation/NSNotificationCenter+AnyPromise.h \ No newline at end of file diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/PromiseKit/NSURLConnection+AnyPromise.h b/samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/PromiseKit/NSURLConnection+AnyPromise.h new file mode 120000 index 00000000000..fd8271b3404 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/PromiseKit/NSURLConnection+AnyPromise.h @@ -0,0 +1 @@ +../../../PromiseKit/Categories/Foundation/NSURLConnection+AnyPromise.h \ No newline at end of file diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/PromiseKit/PromiseKit.h b/samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/PromiseKit/PromiseKit.h new file mode 120000 index 00000000000..c941a074e11 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/PromiseKit/PromiseKit.h @@ -0,0 +1 @@ +../../../PromiseKit/Sources/PromiseKit.h \ No newline at end of file diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/PromiseKit/UIActionSheet+AnyPromise.h b/samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/PromiseKit/UIActionSheet+AnyPromise.h new file mode 120000 index 00000000000..981d4adb5e6 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/PromiseKit/UIActionSheet+AnyPromise.h @@ -0,0 +1 @@ +../../../PromiseKit/Categories/UIKit/UIActionSheet+AnyPromise.h \ No newline at end of file diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/PromiseKit/UIAlertView+AnyPromise.h b/samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/PromiseKit/UIAlertView+AnyPromise.h new file mode 120000 index 00000000000..01b78aa08ab --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/PromiseKit/UIAlertView+AnyPromise.h @@ -0,0 +1 @@ +../../../PromiseKit/Categories/UIKit/UIAlertView+AnyPromise.h \ No newline at end of file diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/PromiseKit/UIView+AnyPromise.h b/samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/PromiseKit/UIView+AnyPromise.h new file mode 120000 index 00000000000..98b020ac2c9 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/PromiseKit/UIView+AnyPromise.h @@ -0,0 +1 @@ +../../../PromiseKit/Categories/UIKit/UIView+AnyPromise.h \ No newline at end of file diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/PromiseKit/UIViewController+AnyPromise.h b/samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/PromiseKit/UIViewController+AnyPromise.h new file mode 120000 index 00000000000..3414608e9be --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/PromiseKit/UIViewController+AnyPromise.h @@ -0,0 +1 @@ +../../../PromiseKit/Categories/UIKit/UIViewController+AnyPromise.h \ No newline at end of file diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/PromiseKit/Umbrella.h b/samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/PromiseKit/Umbrella.h new file mode 120000 index 00000000000..ac976191660 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Headers/Private/PromiseKit/Umbrella.h @@ -0,0 +1 @@ +../../../PromiseKit/Sources/Umbrella.h \ No newline at end of file diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Local Podspecs/PetstoreClient.podspec.json b/samples/client/petstore/swift/SwaggerClientTests/Pods/Local Podspecs/PetstoreClient.podspec.json new file mode 100644 index 00000000000..fd3d9ad5511 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Local Podspecs/PetstoreClient.podspec.json @@ -0,0 +1,22 @@ +{ + "name": "PetstoreClient", + "platforms": { + "ios": "8.0", + "osx": "10.9" + }, + "version": "0.0.1", + "source": { + "git": "git@github.com:swagger-api/swagger-mustache.git", + "tag": "v1.0.0" + }, + "license": "Apache License, Version 2.0", + "source_files": "PetstoreClient/Classes/Swaggers/**/*.swift", + "dependencies": { + "PromiseKit": [ + "~> 3.0.0" + ], + "Alamofire": [ + "~> 3.1.4" + ] + } +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Manifest.lock b/samples/client/petstore/swift/SwaggerClientTests/Pods/Manifest.lock new file mode 100644 index 00000000000..276eaa75e70 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Manifest.lock @@ -0,0 +1,39 @@ +PODS: + - Alamofire (3.1.5) + - OMGHTTPURLRQ (3.1.1): + - OMGHTTPURLRQ/RQ (= 3.1.1) + - OMGHTTPURLRQ/FormURLEncode (3.1.1) + - OMGHTTPURLRQ/RQ (3.1.1): + - OMGHTTPURLRQ/FormURLEncode + - OMGHTTPURLRQ/UserAgent + - OMGHTTPURLRQ/UserAgent (3.1.1) + - PetstoreClient (0.0.1): + - Alamofire (~> 3.1.4) + - PromiseKit (~> 3.0.0) + - PromiseKit (3.0.2): + - PromiseKit/Foundation (= 3.0.2) + - PromiseKit/QuartzCore (= 3.0.2) + - PromiseKit/UIKit (= 3.0.2) + - PromiseKit/CorePromise (3.0.2) + - PromiseKit/Foundation (3.0.2): + - OMGHTTPURLRQ (~> 3.1.0) + - PromiseKit/CorePromise + - PromiseKit/QuartzCore (3.0.2): + - PromiseKit/CorePromise + - PromiseKit/UIKit (3.0.2): + - PromiseKit/CorePromise + +DEPENDENCIES: + - PetstoreClient (from `../`) + +EXTERNAL SOURCES: + PetstoreClient: + :path: ../ + +SPEC CHECKSUMS: + Alamofire: 5f730ba29fd113b7ddd71c1e65d0c630acf5d7b0 + OMGHTTPURLRQ: 633f98ee745aeda02345935a52eec1784cddb589 + PetstoreClient: c9a3d06cf7954479a767135676406c4922cd3c4a + PromiseKit: ab1a380f7a30cf8cce663a2411e8b3580b10313d + +COCOAPODS: 0.39.0 diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/OMGHTTPURLRQ/README.markdown b/samples/client/petstore/swift/SwaggerClientTests/Pods/OMGHTTPURLRQ/README.markdown new file mode 100644 index 00000000000..ff905517872 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/OMGHTTPURLRQ/README.markdown @@ -0,0 +1,145 @@ +# OMGHTTPURLRQ + +Vital extensions to `NSURLRequest` that Apple left out for some reason. + +```objc +NSMutableURLRequest *rq = [OMGHTTPURLRQ GET:@"http://api.com":@{@"key": @"value"}]; + +// application/x-www-form-urlencoded +NSMutableURLRequest *rq = [OMGHTTPURLRQ POST:@"http://api.com":@{@"key": @"value"}]; + +// application/json +NSMutableURLRequest *rq = [OMGHTTPURLRQ POST:@"http://api.com" JSON:@{@"key": @"value"}]; + +// PUT +NSMutableURLRequest *rq = [OMGHTTPURLRQ PUT:@"http://api.com":@{@"key": @"value"}]; + +// DELETE +NSMutableURLRequest *rq = [OMGHTTPURLRQ DELETE:@"http://api.com":@{@"key": @"value"}]; +``` + +You can then pass these to an `NSURLConnection` or `NSURLSession`. + + +## `multipart/form-data` + +OMG! Constructing multipart/form-data for POST requests is complicated, let us do it for you: + +```objc + +OMGMultipartFormData *multipartFormData = [OMGMultipartFormData new]; + +NSData *data1 = [NSData dataWithContentsOfFile:@"myimage1.png"]; +[multipartFormData addFile:data1 parameterName:@"file1" filename:@"myimage1.png" contentType:@"image/png"]; + +// Ideally you would not want to re-encode the PNG, but often it is +// tricky to avoid it. +UIImage *image2 = [UIImage imageNamed:@"image2"]; +NSData *data2 = UIImagePNGRepresentation(image2); +[multipartFormData addFile:data2 parameterName:@"file2" filename:@"myimage2.png" contentType:@"image/png"]; + +// SUPER Ideally you would not want to re-encode the JPEG as the process +// is lossy. If you image comes from the AssetLibrary you *CAN* get the +// original `NSData`. See stackoverflow.com. +UIImage *image3 = [UIImage imageNamed:@"image3"]; +NSData *data3 = UIImageJPEGRepresentation(image3); +[multipartFormData addFile:data3 parameterName:@"file2" filename:@"myimage3.jpeg" contentType:@"image/jpeg"]; + +NSMutableURLRequest *rq = [OMGHTTPURLRQ POST:url:multipartFormData]; +``` + +Now feed `rq` to `[NSURLConnection sendSynchronousRequest:returningResponse:error:`. + + +## Configuring an `NSURLSessionUploadTask` + +If you need to use `NSURLSession`’s `uploadTask:` but you have become frustrated because your endpoint expects a multipart/form-data POST request and `NSURLSession` sends the data *raw*, use this: + +```objc +id config = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:someID]; +id session = [NSURLSession sessionWithConfiguration:config delegate:someObject delegateQueue:[NSOperationQueue new]]; + +OMGMultipartFormData *multipartFormData = [OMGMultipartFormData new]; +[multipartFormData addFile:data parameterName:@"file" filename:nil contentType:nil]; + +NSURLRequest *rq = [OMGHTTPURLRQ POST:urlString:multipartFormData]; + +id path = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"upload.NSData"]; +[rq.HTTPBody writeToFile:path atomically:YES]; + +[[session uploadTaskWithRequest:rq fromFile:[NSURL fileURLWithPath:path]] resume]; +``` + + +## OMGUserAgent + +If you just need a sensible UserAgent string for your application you can `pod OMGHTTPURLRQ/UserAgent` and then: + +```objc +#import + +NSString *userAgent = OMGUserAgent(); +``` + +OMGHTTPURLRQ adds this User-Agent to all requests it generates automatically. + +So for URLRequests generated **other** than by OMGHTTPURLRQ you would do: + +```objc +[someURLRequest addValue:OMGUserAgent() forHTTPHeaderField:@"User-Agent"]; +``` + + +# Twitter Reverse Auth + +You need an OAuth library, here we use the [TDOAuth](https://github.com/tweetdeck/TDOAuth) pod. You also need +your API keys that registering at https://dev.twitter.com will provide +you. + +```objc +NSMutableURLRequest *rq = [TDOAuth URLRequestForPath:@"/oauth/request_token" POSTParameters:@{@"x_auth_mode" : @"reverse_auth"} host:@"api.twitter.com"consumerKey:APIKey consumerSecret:APISecret accessToken:nil tokenSecret:nil]; +[rq addValue:OMGUserAgent() forHTTPHeaderField:@"User-Agent"]; + +[NSURLConnection sendAsynchronousRequest:rq queue:nil completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { + id oauth = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; + SLRequest *reverseAuth = [SLRequest requestForServiceType:SLServiceTypeTwitter requestMethod:SLRequestMethodPOST URL:[NSURL URLWithString:@"https://api.twitter.com/oauth/access_token"] parameters:@{ + @"x_reverse_auth_target": APIKey, + @"x_reverse_auth_parameters": oauth + }]; + reverseAuth.account = account; + [reverseAuth performRequestWithHandler:^(NSData *data, NSHTTPURLResponse *urlResponse, NSError *error) { + id creds = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; + id credsDict = [NSMutableDictionary new]; + for (__strong id pair in [creds componentsSeparatedByString:@"&"]) { + pair = [pair componentsSeparatedByString:@"="]; + credsDict[pair[0]] = pair[1]; + } + NSLog(@"%@", credsDict); + }]; +}]; +``` + + +# License + +``` +Copyright 2014 Max Howell + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +``` \ No newline at end of file diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/OMGHTTPURLRQ/Sources/OMGFormURLEncode.h b/samples/client/petstore/swift/SwaggerClientTests/Pods/OMGHTTPURLRQ/Sources/OMGFormURLEncode.h new file mode 100644 index 00000000000..994c56494eb --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/OMGHTTPURLRQ/Sources/OMGFormURLEncode.h @@ -0,0 +1,22 @@ +#import +#import +#import + +#if __has_feature(nullability) && defined(NS_ASSUME_NONNULL_BEGIN) +NS_ASSUME_NONNULL_BEGIN +#endif + +/** + Express this dictionary as a `application/x-www-form-urlencoded` string. + + Most users would recognize the result of this transformation as the query + string in a browser bar. For our purposes it is the query string in a GET + request and the HTTP body for POST, PUT and DELETE requests. + + If the parameters dictionary is nil or empty, returns nil. +*/ +NSString *OMGFormURLEncode(NSDictionary *parameters); + +#if __has_feature(nullability) && defined(NS_ASSUME_NONNULL_END) +NS_ASSUME_NONNULL_END +#endif diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/OMGHTTPURLRQ/Sources/OMGFormURLEncode.m b/samples/client/petstore/swift/SwaggerClientTests/Pods/OMGHTTPURLRQ/Sources/OMGFormURLEncode.m new file mode 100644 index 00000000000..1014543c1a0 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/OMGHTTPURLRQ/Sources/OMGFormURLEncode.m @@ -0,0 +1,56 @@ +#import +#import "OMGFormURLEncode.h" + +static inline NSString *enc(id in, NSString *ignore) { + NSMutableCharacterSet *allowedSet = [NSMutableCharacterSet characterSetWithCharactersInString:ignore]; + [allowedSet formUnionWithCharacterSet:[NSCharacterSet URLQueryAllowedCharacterSet]]; + [allowedSet removeCharactersInString:@":/?&=;+!@#$()',*"]; + + return [[in description] stringByAddingPercentEncodingWithAllowedCharacters:allowedSet]; +} + +#define enckey(in) enc(in, @"[]") +#define encval(in) enc(in, @"") + +static NSArray *DoQueryMagic(NSString *key, id value) { + NSMutableArray *parts = [NSMutableArray new]; + + // Sort dictionary keys to ensure consistent ordering in query string, + // which is important when deserializing potentially ambiguous sequences, + // such as an array of dictionaries + #define sortDescriptor [NSSortDescriptor sortDescriptorWithKey:@"description" ascending:YES selector:@selector(compare:)] + + if ([value isKindOfClass:[NSDictionary class]]) { + NSDictionary *dictionary = value; + for (id nestedKey in [dictionary.allKeys sortedArrayUsingDescriptors:@[sortDescriptor]]) { + id recursiveKey = key ? [NSString stringWithFormat:@"%@[%@]", key, nestedKey] : nestedKey; + [parts addObjectsFromArray:DoQueryMagic(recursiveKey, dictionary[nestedKey])]; + } + } else if ([value isKindOfClass:[NSArray class]]) { + for (id nestedValue in value) + [parts addObjectsFromArray:DoQueryMagic([NSString stringWithFormat:@"%@[]", key], nestedValue)]; + } else if ([value isKindOfClass:[NSSet class]]) { + for (id obj in [value sortedArrayUsingDescriptors:@[sortDescriptor]]) + [parts addObjectsFromArray:DoQueryMagic(key, obj)]; + } else { + [parts addObjectsFromArray:[NSArray arrayWithObjects:key, value, nil]]; + } + + return parts; + + #undef sortDescriptor +} + +NSString *OMGFormURLEncode(NSDictionary *parameters) { + if (parameters.count == 0) + return @""; + NSMutableString *queryString = [NSMutableString new]; + NSEnumerator *e = DoQueryMagic(nil, parameters).objectEnumerator; + for (;;) { + id const obj = e.nextObject; + if (!obj) break; + [queryString appendFormat:@"%@=%@&", enckey(obj), encval(e.nextObject)]; + } + [queryString deleteCharactersInRange:NSMakeRange(queryString.length - 1, 1)]; + return queryString; +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/OMGHTTPURLRQ/Sources/OMGHTTPURLRQ.h b/samples/client/petstore/swift/SwaggerClientTests/Pods/OMGHTTPURLRQ/Sources/OMGHTTPURLRQ.h new file mode 100644 index 00000000000..1eb04b1ab43 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/OMGHTTPURLRQ/Sources/OMGHTTPURLRQ.h @@ -0,0 +1,64 @@ +#import + +FOUNDATION_EXPORT double OMGHTTPURLRQVersionNumber; +FOUNDATION_EXPORT const unsigned char OMGHTTPURLRQVersionString[]; + +#import +#import +#import +#import +#import "OMGFormURLEncode.h" +#import "OMGUserAgent.h" + + +#if __has_feature(nullability) && defined(NS_ASSUME_NONNULL_BEGIN) +NS_ASSUME_NONNULL_BEGIN +#else +#define nullable +#endif + +/** + The error will either be a JSON error (NSCocoaDomain :/) or in the NSURLErrorDomain + with code: NSURLErrorUnsupportedURL. +*/ +@interface OMGHTTPURLRQ : NSObject + ++ (nullable NSMutableURLRequest *)GET:(NSString *)url :(nullable NSDictionary *)parameters error:(NSError **)error; ++ (nullable NSMutableURLRequest *)POST:(NSString *)url :(nullable id)parametersOrMultipartFormData error:(NSError **)error; ++ (nullable NSMutableURLRequest *)POST:(NSString *)url JSON:(nullable id)JSONObject error:(NSError **)error; ++ (nullable NSMutableURLRequest *)PUT:(NSString *)url :(nullable NSDictionary *)parameters error:(NSError **)error; ++ (nullable NSMutableURLRequest *)PUT:(NSString *)url JSON:(nullable id)JSONObject error:(NSError **)error; ++ (nullable NSMutableURLRequest *)DELETE:(NSString *)url :(nullable NSDictionary *)parameters error:(NSError **)error; + +@end + + +/** + POST this with `OMGHTTPURLRQ`’s `-POST::` class method. +*/ +@interface OMGMultipartFormData : NSObject + +/** + The `filename` parameter is optional. The content-type is optional, and + if left `nil` will default to *octet-stream*. +*/ +- (void)addFile:(NSData *)data parameterName:(NSString *)parameterName filename:(nullable NSString *)filename contentType:(nullable NSString *)contentType; + +- (void)addText:(NSString *)text parameterName:(NSString *)parameterName; + +/** + Technically adding parameters to a multipart/form-data request is abusing + the specification. What we do is add each parameter as a text-item. Any + API that expects parameters in a multipart/form-data request will expect + the parameters to be encoded in this way. +*/ +- (void)addParameters:(NSDictionary *)parameters; + +@end + + +#if __has_feature(nullability) && defined(NS_ASSUME_NONNULL_END) +NS_ASSUME_NONNULL_END +#else +#undef nullable +#endif diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/OMGHTTPURLRQ/Sources/OMGHTTPURLRQ.m b/samples/client/petstore/swift/SwaggerClientTests/Pods/OMGHTTPURLRQ/Sources/OMGHTTPURLRQ.m new file mode 100644 index 00000000000..0854acd0eb7 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/OMGHTTPURLRQ/Sources/OMGHTTPURLRQ.m @@ -0,0 +1,172 @@ +#import +#import +#import +#import +#import +#import "OMGHTTPURLRQ.h" +#import "OMGUserAgent.h" +#import "OMGFormURLEncode.h" +#import + +static inline NSMutableURLRequest *OMGMutableURLRequest() { + NSMutableURLRequest *rq = [NSMutableURLRequest new]; + [rq setValue:OMGUserAgent() forHTTPHeaderField:@"User-Agent"]; + return rq; +} + +#define OMGInvalidURLErrorMake() \ + [NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorUnsupportedURL userInfo:@{NSLocalizedDescriptionKey: @"The provided URL was invalid."}] + + +@implementation OMGMultipartFormData { +@public + NSString *boundary; + NSMutableData *body; +} + +- (instancetype)init { + body = [NSMutableData data]; + boundary = [NSString stringWithFormat:@"------------------------%08X%08X", arc4random(), arc4random()]; + return self; +} + +- (void)add:(NSData *)payload :(NSString *)name :(NSString *)filename :(NSString *)contentType { + id ln1 = [NSString stringWithFormat:@"--%@\r\n", boundary]; + id ln2 = ({ + id s = [NSMutableString stringWithString:@"Content-Disposition: form-data; "]; + [s appendFormat:@"name=\"%@\"", name]; + if (filename.length) + [s appendFormat:@"; filename=\"%@\"", filename]; + [s appendString:@"\r\n"]; + if (contentType.length) + [s appendFormat:@"Content-Type: %@\r\n", contentType]; + [s appendString:@"\r\n"]; + s; + }); + + [body appendData:[ln1 dataUsingEncoding:NSUTF8StringEncoding]]; + [body appendData:[ln2 dataUsingEncoding:NSUTF8StringEncoding]]; + [body appendData:payload]; + [body appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; +} + +- (void)addFile:(NSData *)payload parameterName:(NSString *)name filename:(NSString *)filename contentType:(NSString *)contentType +{ + [self add:payload:name:filename:(contentType ?: @"application/octet-stream")]; +} + +- (void)addText:(NSString *)text parameterName:(NSString *)parameterName { + [self add:[text dataUsingEncoding:NSUTF8StringEncoding]:parameterName:nil:nil]; +} + +- (void)addParameters:(NSDictionary *)parameters { + for (id key in parameters) + [self addText:[parameters[key] description] parameterName:key]; +} + +@end + + + +@implementation OMGHTTPURLRQ + ++ (NSMutableURLRequest *)GET:(NSString *)urlString :(NSDictionary *)params error:(NSError **)error { + id queryString = OMGFormURLEncode(params); + if (queryString) urlString = [urlString stringByAppendingFormat:@"?%@", queryString]; + + id url = [NSURL URLWithString:urlString]; + if (!url) { + if (error) *error = OMGInvalidURLErrorMake(); + return nil; + } + + NSMutableURLRequest *rq = OMGMutableURLRequest(); + rq.HTTPMethod = @"GET"; + rq.URL = url; + return rq; +} + +static NSMutableURLRequest *OMGFormURLEncodedRequest(NSString *urlString, NSString *method, NSDictionary *parameters, NSError **error) { + id url = [NSURL URLWithString:urlString]; + if (!url) { + if (error) *error = OMGInvalidURLErrorMake(); + return nil; + } + + NSMutableURLRequest *rq = OMGMutableURLRequest(); + rq.URL = url; + rq.HTTPMethod = method; + + id queryString = OMGFormURLEncode(parameters); + NSData *data = [queryString dataUsingEncoding:NSUTF8StringEncoding]; + [rq addValue:@"8bit" forHTTPHeaderField:@"Content-Transfer-Encoding"]; + [rq addValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; + [rq addValue:@(data.length).description forHTTPHeaderField:@"Content-Length"]; + [rq setHTTPBody:data]; + + return rq; +} + ++ (NSMutableURLRequest *)POST:(NSString *)urlString :(id)body error:(NSError **)error { + if (![body isKindOfClass:[OMGMultipartFormData class]]) { + return OMGFormURLEncodedRequest(urlString, @"POST", body, error); + } else { + id url = [NSURL URLWithString:urlString]; + if (!url) { + if (error) *error = OMGInvalidURLErrorMake(); + return nil; + } + + OMGMultipartFormData *multipartFormData = (id)body; + id const charset = (NSString *)CFStringConvertEncodingToIANACharSetName(CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding)); + id const contentType = [NSString stringWithFormat:@"multipart/form-data; charset=%@; boundary=%@", charset, multipartFormData->boundary]; + + NSMutableData *data = [multipartFormData->body mutableCopy]; + id lastLine = [NSString stringWithFormat:@"\r\n--%@--\r\n", multipartFormData->boundary]; + [data appendData:[lastLine dataUsingEncoding:NSUTF8StringEncoding]]; + + NSMutableURLRequest *rq = OMGMutableURLRequest(); + [rq setURL:url]; + [rq setHTTPMethod:@"POST"]; + [rq addValue:contentType forHTTPHeaderField:@"Content-Type"]; + [rq setHTTPBody:data]; + return rq; + } +} + ++ (NSMutableURLRequest *)POST:(NSString *)urlString JSON:(id)params error:(NSError **)error { + if (error) *error = nil; + + id url = [NSURL URLWithString:urlString]; + if (!url) { + if (error) *error = OMGInvalidURLErrorMake(); + return nil; + } + + id JSONData = [NSJSONSerialization dataWithJSONObject:params options:(NSJSONWritingOptions)0 error:error]; + if (error && *error) return nil; + + NSMutableURLRequest *rq = OMGMutableURLRequest(); + [rq setURL:url]; + [rq setHTTPMethod:@"POST"]; + [rq setHTTPBody:JSONData]; + [rq setValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; + [rq setValue:@"json" forHTTPHeaderField:@"Data-Type"]; + return rq; +} + ++ (NSMutableURLRequest *)PUT:(NSString *)url :(NSDictionary *)parameters error:(NSError **)error { + return OMGFormURLEncodedRequest(url, @"PUT", parameters, error); +} + ++ (NSMutableURLRequest *)PUT:(NSString *)url JSON:(id)params error:(NSError **)error { + NSMutableURLRequest *rq = [OMGHTTPURLRQ POST:url JSON:params error:error]; + rq.HTTPMethod = @"PUT"; + return rq; +} + ++ (NSMutableURLRequest *)DELETE:(NSString *)url :(NSDictionary *)parameters error:(NSError **)error { + return OMGFormURLEncodedRequest(url, @"DELETE", parameters, error); +} + +@end diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/OMGHTTPURLRQ/Sources/OMGUserAgent.h b/samples/client/petstore/swift/SwaggerClientTests/Pods/OMGHTTPURLRQ/Sources/OMGUserAgent.h new file mode 100644 index 00000000000..75dacf4e4f5 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/OMGHTTPURLRQ/Sources/OMGUserAgent.h @@ -0,0 +1,12 @@ +#import +@class NSString; + +#if __has_feature(nullability) && defined(NS_ASSUME_NONNULL_BEGIN) +NS_ASSUME_NONNULL_BEGIN +#endif + +NSString *OMGUserAgent(); + +#if __has_feature(nullability) && defined(NS_ASSUME_NONNULL_END) +NS_ASSUME_NONNULL_END +#endif diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/OMGHTTPURLRQ/Sources/OMGUserAgent.m b/samples/client/petstore/swift/SwaggerClientTests/Pods/OMGHTTPURLRQ/Sources/OMGUserAgent.m new file mode 100644 index 00000000000..1d083117b31 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/OMGHTTPURLRQ/Sources/OMGUserAgent.m @@ -0,0 +1,19 @@ +#import +#import "OMGUserAgent.h" + +NSString *OMGUserAgent() { + static NSString *ua; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + id info = [NSBundle mainBundle].infoDictionary; + id name = info[@"CFBundleDisplayName"] ?: info[(__bridge NSString *)kCFBundleIdentifierKey]; + id vers = (__bridge id)CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), kCFBundleVersionKey) ?: info[(__bridge NSString *)kCFBundleVersionKey]; + #ifdef UIKIT_EXTERN + float scale = ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] ? [UIScreen mainScreen].scale : 1.0f); + ua = [NSString stringWithFormat:@"%@/%@ (%@; iOS %@; Scale/%0.2f)", name, vers, [UIDevice currentDevice].model, [UIDevice currentDevice].systemVersion, scale]; + #else + ua = [NSString stringWithFormat:@"%@/%@", name, vers]; + #endif + }); + return ua; +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/project.pbxproj b/samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/project.pbxproj new file mode 100644 index 00000000000..da35c633e44 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/project.pbxproj @@ -0,0 +1,1434 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 01BD61BBC475EB3369237B84FE24D3EE /* UIViewController+AnyPromise.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BA017E288BB42E06EBEE9C6E6993EAF /* UIViewController+AnyPromise.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0268F9278E32ACC1F996F4E2E45622B5 /* UIActionSheet+AnyPromise.h in Headers */ = {isa = PBXBuildFile; fileRef = 6846D22C9F0CCBC48DF833E309A8E84F /* UIActionSheet+AnyPromise.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 03F494989CC1A8857B68A317D5D6860F /* Response.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DF5FC3AF99846209C5FCE55A2E12D9A /* Response.swift */; }; + 0681ADC8BAE2C3185F13487BAAB4D9DD /* Upload.swift in Sources */ = {isa = PBXBuildFile; fileRef = CCE38472832BBCC541E646DA6C18EF9C /* Upload.swift */; }; + 06F7C0C55DF4C09C015159F6B0802EB1 /* join.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84319E048FE6DD89B905FA3A81005C5F /* join.swift */; }; + 0B34EB4425C08BB021C2D09F75C9C146 /* OMGHTTPURLRQ.h in Headers */ = {isa = PBXBuildFile; fileRef = 450166FEA2155A5821D97744A0127DF8 /* OMGHTTPURLRQ.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0BDA43D8F48C8B0D504C440046FAF681 /* Umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A8906F6D6920DF197965D1740A7E283 /* Umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0D240D796AAD10F0119A1D7AC2570AAA /* NSObject+Promise.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6EB54C331FED437583A5F01EB2757D1 /* NSObject+Promise.swift */; }; + 11C221075C5B20BDEEB3DDF8EAC99E63 /* NSNotificationCenter+AnyPromise.m in Sources */ = {isa = PBXBuildFile; fileRef = 4798BAC01B0E3F07E3BBBB07BA57F2D7 /* NSNotificationCenter+AnyPromise.m */; }; + 11EA8D6B0352FD31F520F983CFB9D993 /* UIAlertView+AnyPromise.m in Sources */ = {isa = PBXBuildFile; fileRef = F075F63EFE77F7B59FF77CBA95B9AADF /* UIAlertView+AnyPromise.m */; }; + 12348513CB81BD05B497C210905CDF65 /* UIAlertView+AnyPromise.h in Headers */ = {isa = PBXBuildFile; fileRef = 92D340D66F03F31237B70F23FE9B00D0 /* UIAlertView+AnyPromise.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 124EFF5E3C46EC88F47C52479FA6ACAF /* CALayer+AnyPromise.m in Sources */ = {isa = PBXBuildFile; fileRef = 04A22F2595054D39018E03961CA7283A /* CALayer+AnyPromise.m */; }; + 1287903F965945AEB5EFC4EE768C7B38 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FC4BF94DC4B3D8B88FC160B00931B0EC /* QuartzCore.framework */; }; + 15ECEBA1EFBD023AEA47F36524270D2C /* Models.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F0266C5AE0B23A436291F6647902086 /* Models.swift */; }; + 18FAC6B4FD3B44CB353C7A6027286100 /* NSURLConnection+AnyPromise.h in Headers */ = {isa = PBXBuildFile; fileRef = BAE48ACA10E8895BB8BF5CE8C0846B4B /* NSURLConnection+AnyPromise.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1AC7E88F0EC64D1D4E83CE7767BFD2B7 /* afterlife.swift in Sources */ = {isa = PBXBuildFile; fileRef = C476B916B763E55E4161F0B30760C4E8 /* afterlife.swift */; }; + 1CDA074C6DC95876D85E13ECF882B93A /* Pet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 284B3DE9B793FCC633E971DB1798AFAF /* Pet.swift */; }; + 1E1010EA437F154A554D04F7F3A894EC /* Promise+Properties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E0DBDE561A6C2E7AC7A24160F8A5F28 /* Promise+Properties.swift */; }; + 25FBB92AFB8F5A777CE8E40EC3B9DACA /* PetstoreClient-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 46A8E0328DC896E0893B565FE8742167 /* PetstoreClient-dummy.m */; }; + 2B38BB4603B4286FF8D7A780372E947F /* PetAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 261F03A3C73374FD19333EEA59CCD59F /* PetAPI.swift */; }; + 2C5450AC69398958CF6F7539EF7D99E5 /* Alamofire-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 30CE7341A995EF6812D71771E74CF7F7 /* Alamofire-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2D9379807BA243E1CE457D1BE963DA09 /* UserAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 552D15E0340BF58CC1922B82E864AEC9 /* UserAPI.swift */; }; + 35F6B35131F89EA23246C6508199FB05 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FB15A61DB7ABCB74565286162157C5A0 /* Foundation.framework */; }; + 3860D960E37C1257BDA54626CA592E86 /* AnyPromise.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F19945EE403F7B29D8B1939EA6D579A /* AnyPromise.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 387C7387FDC662D23D743879B6143D59 /* UIActionSheet+Promise.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD570E28B63274E742E7D1FBBD55BB41 /* UIActionSheet+Promise.swift */; }; + 3A8D316D4266A3309D0A98ED74F8A13A /* OMGUserAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = 87BC7910B8D7D31310A07C32438A8C67 /* OMGUserAgent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 443361437B359830308B93A7B98BE039 /* StoreAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A3E5E3CD673B025FD8AC260E67AB47E /* StoreAPI.swift */; }; + 46F838880F41F56ABD91796FC956B4BF /* APIHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2BAD338E56EF3CAA6E54490FE0C5DF9 /* APIHelper.swift */; }; + 48CB8E7E16443CA771E4DCFB3E0709A2 /* OMGHTTPURLRQ.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D579267FC1F163C8F04B444DAEFED0D /* OMGHTTPURLRQ.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 4C22563311AC2B52651A6525A979E076 /* UIView+AnyPromise.m in Sources */ = {isa = PBXBuildFile; fileRef = 2F0F4EDC2236E1C270DC2014181D6506 /* UIView+AnyPromise.m */; }; + 4DE5FCC41D100B113B6645EA64410F16 /* ParameterEncoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FBD351D007CF4095C98C9DFD9D83D61 /* ParameterEncoding.swift */; }; + 516D41E4D035A817CC5116C11302E408 /* AlamofireImplementations.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92734297B64DFE0EB0EDE1EA821163DB /* AlamofireImplementations.swift */; }; + 5192A7466019F9B3D7F1E987124E96BC /* OMGHTTPURLRQ-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F7EBDD2EEED520E06ACB3538B3832049 /* OMGHTTPURLRQ-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 523C1819FC864864A9715CF713DD12E9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FB15A61DB7ABCB74565286162157C5A0 /* Foundation.framework */; }; + 5480169E42C456C49BE59E273D7E0115 /* OMGFormURLEncode.h in Headers */ = {isa = PBXBuildFile; fileRef = 51ADA0B6B6B00CB0E818AA8CBC311677 /* OMGFormURLEncode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5D7EAE5725A7E750B51FD27AECB5F0FD /* join.m in Sources */ = {isa = PBXBuildFile; fileRef = 6AD59903FAA8315AD0036AC459FFB97F /* join.m */; }; + 5EE5E1CA27F3CB04A5DCF5BB90B76000 /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5412898DEB10F1983487A10453C6B9CB /* Extensions.swift */; }; + 5FFED823C0BDD412FA41B01EA47394D1 /* hang.m in Sources */ = {isa = PBXBuildFile; fileRef = F4B6A98D6DAF474045210F5A74FF1C3C /* hang.m */; }; + 60EBBACB76CD5879FB7B9B3E0AA5E2C1 /* UIViewController+AnyPromise.m in Sources */ = {isa = PBXBuildFile; fileRef = AA24C5EC82CF437D8D1FFFAB68975408 /* UIViewController+AnyPromise.m */; }; + 656BED6137A9FFA3B2DF03861F525022 /* PetstoreClient-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F681D2C508D1BA8F62893120D9343A4 /* PetstoreClient-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6A128FE350973D8A693E3F063C5E4A49 /* dispatch_promise.m in Sources */ = {isa = PBXBuildFile; fileRef = A92242715FB4C0608F8DCEBF8F3791E2 /* dispatch_promise.m */; }; + 6B0A17CD24331793D2504E0FBBAF5EB2 /* Tag.swift in Sources */ = {isa = PBXBuildFile; fileRef = 211F73A46D90346F7FC6D0D29640EE4F /* Tag.swift */; }; + 6CB84A616D7B4D189A4E94BD37621575 /* OMGUserAgent.m in Sources */ = {isa = PBXBuildFile; fileRef = E11BFB27B43B742CB5D6086C4233A909 /* OMGUserAgent.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 6D264CCBD7DAC0A530076FB1A847EEC7 /* Pods-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 894E5DA93A9F359521A89826BE6DA777 /* Pods-dummy.m */; }; + 6F63943B0E954F701F32BC7A1F4C2FEC /* OMGFormURLEncode.m in Sources */ = {isa = PBXBuildFile; fileRef = 25614E715DDC170DAFB0DF50C5503E33 /* OMGFormURLEncode.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 73FA79FDB37E5C458B996012BFB0CF04 /* PMKAlertController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C731FBFCC690050C6C08E5AC9D9DC724 /* PMKAlertController.swift */; }; + 7D7A40DBAC93241786E8C553921E8C86 /* OMGHTTPURLRQ.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3530BF15E14D1F6D7134EE67377D5C8C /* OMGHTTPURLRQ.framework */; }; + 80F496237530D382A045A29654D8C11C /* ServerTrustPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 400A6910E83F606BCD67DC11FA706697 /* ServerTrustPolicy.swift */; }; + 81A2DB65C0742D785DE7C2609CC14140 /* NSURLSession+Promise.swift in Sources */ = {isa = PBXBuildFile; fileRef = 535DF88FC12304114DEF55E4003421B2 /* NSURLSession+Promise.swift */; }; + 82971968CBDAB224212EEB4607C9FB8D /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53F8B2513042BD6DB957E8063EF895BD /* Result.swift */; }; + 8399DBEE3E2D98EB1F466132E476F4D9 /* MultipartFormData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F14E17B4D6BDF8BD3E384BE6528F744 /* MultipartFormData.swift */; }; + 857E5961D9F6E23BD86DEB613A1499C7 /* NSError+Cancellation.h in Headers */ = {isa = PBXBuildFile; fileRef = 045C1F608ADE57757E6732D721779F22 /* NSError+Cancellation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 88B3F911629C08DEEB226F3B294AAB36 /* NSNotificationCenter+Promise.swift in Sources */ = {isa = PBXBuildFile; fileRef = B93FB4BB16CFB41DCA35A8CFAD7A7FEF /* NSNotificationCenter+Promise.swift */; }; + 8C4A96A3E69C772990E3E922D0FD1BC4 /* UIView+AnyPromise.h in Headers */ = {isa = PBXBuildFile; fileRef = BCDD82DB3E6D43BA9769FCA9B744CB5E /* UIView+AnyPromise.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8D3A68D3CBD8A1D89099F704A04A04FC /* PromiseKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9042667D08D783E45394FE8B97EE6468 /* PromiseKit-dummy.m */; }; + 8E3861989641484EE3095722EC08B5A9 /* NSURLConnection+AnyPromise.m in Sources */ = {isa = PBXBuildFile; fileRef = A7F0DAACAC89A93B940BBE54E6A87E9F /* NSURLConnection+AnyPromise.m */; }; + 909B0A29022956D90C32C4AA319F75D1 /* AnyPromise.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B7E90A568681E000EF3CB0917584F3C /* AnyPromise.m */; }; + 96D99D0C2472535A169DED65CB231CD7 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FB15A61DB7ABCB74565286162157C5A0 /* Foundation.framework */; }; + 97D71F12142A541BEEF425805D51379E /* race.swift in Sources */ = {isa = PBXBuildFile; fileRef = 980FD13F87B44BFD90F8AC129BEB2E61 /* race.swift */; }; + 9CFBA896DF45B68C788F80013AC3FDBB /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A1D1571AB15108DF6F9C4FE2064E3C43 /* Alamofire.framework */; }; + A2C172FE407C0BC3478ADCA91A6C9CEC /* Manager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D51C929AC51E34493AA757180C09C3B /* Manager.swift */; }; + A3505FA2FB3067D53847AD288AC04F03 /* Download.swift in Sources */ = {isa = PBXBuildFile; fileRef = A04177B09D9596450D827FE49A36C4C4 /* Download.swift */; }; + ADEEE5F368B5D707D03E78FD75C59048 /* Promise.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D23C407A7CDBFD244D6115899F9D45D /* Promise.swift */; }; + B0FB4B01682814B9E3D32F9DC4A5E762 /* Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B476A57549D7994745E17A6DE5BE745 /* Alamofire.swift */; }; + B6D2DC3E3DA44CD382B9B425F40E11C1 /* Alamofire-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 139346EB669CBE2DE8FE506E14A2BA9C /* Alamofire-dummy.m */; }; + C75519F0450166A6F28126ECC7664E9C /* Validation.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA1AD92813B887E2D017D051B8C0E3D2 /* Validation.swift */; }; + C86881D2285095255829A578F0A85300 /* after.m in Sources */ = {isa = PBXBuildFile; fileRef = B868468092D7B2489B889A50981C9247 /* after.m */; }; + C86CE0A47FAD4C9B2929A335D62A179E /* UIViewController+Promise.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6D459D0AB2361B48F81C4D14C6D0DAA /* UIViewController+Promise.swift */; }; + CAF12A3EDA2376FFEAD4A12E413C1AAD /* UIActionSheet+AnyPromise.m in Sources */ = {isa = PBXBuildFile; fileRef = 9774D31336C85248A115B569E7D95283 /* UIActionSheet+AnyPromise.m */; }; + CB2A58CBAB5A2E63D0CB70F2697CAE87 /* when.m in Sources */ = {isa = PBXBuildFile; fileRef = 143BC30E5DDAF52A3D9578F507EC6A41 /* when.m */; }; + CD97970D21D3CB8C459FAFEF11EE60F3 /* Category.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4DF0604EDC1460935E6E445A47023A4 /* Category.swift */; }; + CE225CF07E6E385F014883D607AFA44D /* URLDataPromise.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7CE161ED0CF68954A63F30528ACAD9B /* URLDataPromise.swift */; }; + CE89E5C528D52BBCBCD23309603BA6D1 /* CALayer+AnyPromise.h in Headers */ = {isa = PBXBuildFile; fileRef = 27E0FE41D771BE8BE3F0D4F1DAD0B179 /* CALayer+AnyPromise.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D1735D6C4D574339EB49024228448459 /* UIView+Promise.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3CDA0958D6247505ECD9098D662EA74 /* UIView+Promise.swift */; }; + D1E8B31EFCBDE00F108E739AD69425C0 /* Pods-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BCC458FDD5F692BBB2BFC64BB5701FC /* Pods-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D21B7325B3642887BFBE977E021F2D26 /* ResponseSerialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD558DDCDDA1B46951548B02C34277EF /* ResponseSerialization.swift */; }; + D358A828E68E152D06FC8E35533BF00B /* OMGHTTPURLRQ-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0F36B65CF990C57DC527824ED0BA1915 /* OMGHTTPURLRQ-dummy.m */; }; + D546A4DBA3F7750F45A6F63B994C081C /* User.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B248364ABF60ACD7DB31A17DCFDFD0C /* User.swift */; }; + D75CA395D510E08C404E55F5BDAE55CE /* Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A9CB35983E4859DFFBAD8840196A094 /* Error.swift */; }; + D93596046CD3B301F4EC99A7A118C82C /* Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = 558DFECE2C740177CA6357DA71A1DFBB /* Error.swift */; }; + DBD1F4247E1C591AE4EE5531599AB170 /* NSNotificationCenter+AnyPromise.h in Headers */ = {isa = PBXBuildFile; fileRef = 3616971BAEF40302B7F2F8B1007C0B2B /* NSNotificationCenter+AnyPromise.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DD8D067A7F742F39B87FA04CE12DD118 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FB15A61DB7ABCB74565286162157C5A0 /* Foundation.framework */; }; + E2B0094FAAEA55C55AD141136F650E35 /* Order.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A545673F09F49CDD60A13B4B0AF1020 /* Order.swift */; }; + EA35E77B4F31DC3E1D224458E0BC959D /* APIs.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8072E1108951F272C003553FC8926C7 /* APIs.swift */; }; + EA67B414E392EFD2B14742F55A595596 /* after.swift in Sources */ = {isa = PBXBuildFile; fileRef = 275DA9A664C70DD40A4059090D1A00D4 /* after.swift */; }; + EA691570F0F8066651EE2A7066426384 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5A1DC80A0773C5A569348DC442EAFD1D /* UIKit.framework */; }; + EB3C88CDAF122BA763FEF85758370C7C /* UIAlertView+Promise.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA854180C132DB5511D64C82535C5FDE /* UIAlertView+Promise.swift */; }; + EB9A1F33DB49ADA09F6E7F19A2C30357 /* NSURLConnection+Promise.swift in Sources */ = {isa = PBXBuildFile; fileRef = 412985229DA7A4DF9E129B7E8F0C09BB /* NSURLConnection+Promise.swift */; }; + ED30A8B82BA1D53CBC370B1DC18DA1EB /* when.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16730DAF3E51C161D8247E473F069E71 /* when.swift */; }; + EEF6E654182421FEBC0CC202E72F71A8 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FB15A61DB7ABCB74565286162157C5A0 /* Foundation.framework */; }; + F4582E8DC1C9F362ADA4BAE9CEF8B681 /* dispatch_promise.swift in Sources */ = {isa = PBXBuildFile; fileRef = 392FA21A33296B88F790D62A4FAA4E4E /* dispatch_promise.swift */; }; + F700EAA9F9F6C1F99C83B45D05C5AD14 /* PromiseKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BFFA6FD621E9ED341AA89AEAC1604D7 /* PromiseKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F7161E50F083B2267363F243C4E4B78F /* AnyPromise.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5973BC143AE488C12FFB1E83E71F0C45 /* AnyPromise.swift */; }; + F898D4270885EF1114608E76B0C09E21 /* State.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DC63EB77B3791891517B98CAA115DE8 /* State.swift */; }; + FB0B33F03AC2BC8A7FC7FD912C12CC22 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A112EF8BB3933C1C1E42F11B3DD3B02A /* PromiseKit.framework */; }; + FC14480CECE872865A9C6E584F886DA3 /* Request.swift in Sources */ = {isa = PBXBuildFile; fileRef = 133C5287CFDCB3B67578A7B1221E132C /* Request.swift */; }; + FEF0D7653948988B804226129471C1EC /* Stream.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A8F373B23E0F7FB68B0BA71D92D1C60 /* Stream.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 014385BD85FA83B60A03ADE9E8844F33 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 2FD913B4E24277823983BABFDB071664; + remoteInfo = PetstoreClient; + }; + 4BED27A854EA6600536518D29BBB3670 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 432ECC54282C84882B482CCB4CF227FC; + remoteInfo = Alamofire; + }; + 769630CDAAA8C24AA5B4C81A85C45AC8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 432ECC54282C84882B482CCB4CF227FC; + remoteInfo = Alamofire; + }; + 8059767A82D94C9F7F7C16D030819C4E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 190ACD3A51BC90B85EADB13E9CDD207B; + remoteInfo = OMGHTTPURLRQ; + }; + 9AD20158D23CE70A2A91E5B7859090C3 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 190ACD3A51BC90B85EADB13E9CDD207B; + remoteInfo = OMGHTTPURLRQ; + }; + B5FB8931CDF8801206EDD2FEF94793BF /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 25EDA9CFC641C69402B3857A2C4A39F0; + remoteInfo = PromiseKit; + }; + ECAC5E4454026C822004659466983ADD /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 25EDA9CFC641C69402B3857A2C4A39F0; + remoteInfo = PromiseKit; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 045C1F608ADE57757E6732D721779F22 /* NSError+Cancellation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSError+Cancellation.h"; path = "Sources/NSError+Cancellation.h"; sourceTree = ""; }; + 04A22F2595054D39018E03961CA7283A /* CALayer+AnyPromise.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "CALayer+AnyPromise.m"; path = "Categories/QuartzCore/CALayer+AnyPromise.m"; sourceTree = ""; }; + 0A545673F09F49CDD60A13B4B0AF1020 /* Order.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Order.swift; sourceTree = ""; }; + 0A8906F6D6920DF197965D1740A7E283 /* Umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Umbrella.h; path = Sources/Umbrella.h; sourceTree = ""; }; + 0BA017E288BB42E06EBEE9C6E6993EAF /* UIViewController+AnyPromise.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIViewController+AnyPromise.h"; path = "Categories/UIKit/UIViewController+AnyPromise.h"; sourceTree = ""; }; + 0F36B65CF990C57DC527824ED0BA1915 /* OMGHTTPURLRQ-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "OMGHTTPURLRQ-dummy.m"; sourceTree = ""; }; + 122D5005A81832479161CD1D223C573A /* PromiseKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "PromiseKit-prefix.pch"; sourceTree = ""; }; + 133C5287CFDCB3B67578A7B1221E132C /* Request.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Request.swift; path = Source/Request.swift; sourceTree = ""; }; + 139346EB669CBE2DE8FE506E14A2BA9C /* Alamofire-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Alamofire-dummy.m"; sourceTree = ""; }; + 141F0B43C42CE92856BBA8F8D98481DB /* Alamofire.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Alamofire.xcconfig; sourceTree = ""; }; + 143BC30E5DDAF52A3D9578F507EC6A41 /* when.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = when.m; path = Sources/when.m; sourceTree = ""; }; + 16730DAF3E51C161D8247E473F069E71 /* when.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = when.swift; path = Sources/when.swift; sourceTree = ""; }; + 16D7C901D915C251DEBA27AC1EF57E34 /* OMGHTTPURLRQ.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = OMGHTTPURLRQ.xcconfig; sourceTree = ""; }; + 1A3E5E3CD673B025FD8AC260E67AB47E /* StoreAPI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StoreAPI.swift; sourceTree = ""; }; + 1B7E90A568681E000EF3CB0917584F3C /* AnyPromise.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AnyPromise.m; path = Sources/AnyPromise.m; sourceTree = ""; }; + 1F19945EE403F7B29D8B1939EA6D579A /* AnyPromise.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AnyPromise.h; path = Sources/AnyPromise.h; sourceTree = ""; }; + 1FBD351D007CF4095C98C9DFD9D83D61 /* ParameterEncoding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ParameterEncoding.swift; path = Source/ParameterEncoding.swift; sourceTree = ""; }; + 211F73A46D90346F7FC6D0D29640EE4F /* Tag.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Tag.swift; sourceTree = ""; }; + 24C79ED4B5226F263307B22E96E88F9F /* OMGHTTPURLRQ.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = OMGHTTPURLRQ.modulemap; sourceTree = ""; }; + 25614E715DDC170DAFB0DF50C5503E33 /* OMGFormURLEncode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OMGFormURLEncode.m; path = Sources/OMGFormURLEncode.m; sourceTree = ""; }; + 261F03A3C73374FD19333EEA59CCD59F /* PetAPI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PetAPI.swift; sourceTree = ""; }; + 275DA9A664C70DD40A4059090D1A00D4 /* after.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = after.swift; path = Sources/after.swift; sourceTree = ""; }; + 27E0FE41D771BE8BE3F0D4F1DAD0B179 /* CALayer+AnyPromise.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "CALayer+AnyPromise.h"; path = "Categories/QuartzCore/CALayer+AnyPromise.h"; sourceTree = ""; }; + 284B3DE9B793FCC633E971DB1798AFAF /* Pet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Pet.swift; sourceTree = ""; }; + 2BCC458FDD5F692BBB2BFC64BB5701FC /* Pods-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-umbrella.h"; sourceTree = ""; }; + 2D51C929AC51E34493AA757180C09C3B /* Manager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Manager.swift; path = Source/Manager.swift; sourceTree = ""; }; + 2F0F4EDC2236E1C270DC2014181D6506 /* UIView+AnyPromise.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+AnyPromise.m"; path = "Categories/UIKit/UIView+AnyPromise.m"; sourceTree = ""; }; + 30CE7341A995EF6812D71771E74CF7F7 /* Alamofire-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-umbrella.h"; sourceTree = ""; }; + 3530BF15E14D1F6D7134EE67377D5C8C /* OMGHTTPURLRQ.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = OMGHTTPURLRQ.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 3616971BAEF40302B7F2F8B1007C0B2B /* NSNotificationCenter+AnyPromise.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSNotificationCenter+AnyPromise.h"; path = "Categories/Foundation/NSNotificationCenter+AnyPromise.h"; sourceTree = ""; }; + 392FA21A33296B88F790D62A4FAA4E4E /* dispatch_promise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = dispatch_promise.swift; path = Sources/dispatch_promise.swift; sourceTree = ""; }; + 3950B63B8EB1B9CD8FC31CDA8CC2E7C7 /* Alamofire-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-prefix.pch"; sourceTree = ""; }; + 3BFFA6FD621E9ED341AA89AEAC1604D7 /* PromiseKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PromiseKit.h; path = Sources/PromiseKit.h; sourceTree = ""; }; + 3CE589B7B1FE57084403D25DC49528B5 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 3D23C407A7CDBFD244D6115899F9D45D /* Promise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Promise.swift; path = Sources/Promise.swift; sourceTree = ""; }; + 400A6910E83F606BCD67DC11FA706697 /* ServerTrustPolicy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ServerTrustPolicy.swift; path = Source/ServerTrustPolicy.swift; sourceTree = ""; }; + 412985229DA7A4DF9E129B7E8F0C09BB /* NSURLConnection+Promise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSURLConnection+Promise.swift"; path = "Categories/Foundation/NSURLConnection+Promise.swift"; sourceTree = ""; }; + 450166FEA2155A5821D97744A0127DF8 /* OMGHTTPURLRQ.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OMGHTTPURLRQ.h; path = Sources/OMGHTTPURLRQ.h; sourceTree = ""; }; + 46A8E0328DC896E0893B565FE8742167 /* PetstoreClient-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "PetstoreClient-dummy.m"; sourceTree = ""; }; + 4798BAC01B0E3F07E3BBBB07BA57F2D7 /* NSNotificationCenter+AnyPromise.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSNotificationCenter+AnyPromise.m"; path = "Categories/Foundation/NSNotificationCenter+AnyPromise.m"; sourceTree = ""; }; + 51ADA0B6B6B00CB0E818AA8CBC311677 /* OMGFormURLEncode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OMGFormURLEncode.h; path = Sources/OMGFormURLEncode.h; sourceTree = ""; }; + 535DF88FC12304114DEF55E4003421B2 /* NSURLSession+Promise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSURLSession+Promise.swift"; path = "Categories/Foundation/NSURLSession+Promise.swift"; sourceTree = ""; }; + 53F8B2513042BD6DB957E8063EF895BD /* Result.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Result.swift; path = Source/Result.swift; sourceTree = ""; }; + 5412898DEB10F1983487A10453C6B9CB /* Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Extensions.swift; sourceTree = ""; }; + 552D15E0340BF58CC1922B82E864AEC9 /* UserAPI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UserAPI.swift; sourceTree = ""; }; + 558DFECE2C740177CA6357DA71A1DFBB /* Error.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Error.swift; path = Sources/Error.swift; sourceTree = ""; }; + 5973BC143AE488C12FFB1E83E71F0C45 /* AnyPromise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnyPromise.swift; path = Sources/AnyPromise.swift; sourceTree = ""; }; + 5A1DC80A0773C5A569348DC442EAFD1D /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; + 5B248364ABF60ACD7DB31A17DCFDFD0C /* User.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = User.swift; sourceTree = ""; }; + 5CA1C154DFC54DFFB12A754B9A0BBDFC /* OMGHTTPURLRQ.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = OMGHTTPURLRQ.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5DF5FC3AF99846209C5FCE55A2E12D9A /* Response.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Response.swift; path = Source/Response.swift; sourceTree = ""; }; + 5F14E17B4D6BDF8BD3E384BE6528F744 /* MultipartFormData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultipartFormData.swift; path = Source/MultipartFormData.swift; sourceTree = ""; }; + 6846D22C9F0CCBC48DF833E309A8E84F /* UIActionSheet+AnyPromise.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIActionSheet+AnyPromise.h"; path = "Categories/UIKit/UIActionSheet+AnyPromise.h"; sourceTree = ""; }; + 6AD59903FAA8315AD0036AC459FFB97F /* join.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = join.m; path = Sources/join.m; sourceTree = ""; }; + 792D14AC86CD98AA9C31373287E0F353 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 79A9DEDC89FE8336BF5FEDAAF75BF7FC /* Pods.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Pods.modulemap; sourceTree = ""; }; + 7E0DBDE561A6C2E7AC7A24160F8A5F28 /* Promise+Properties.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Promise+Properties.swift"; path = "Sources/Promise+Properties.swift"; sourceTree = ""; }; + 84319E048FE6DD89B905FA3A81005C5F /* join.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = join.swift; path = Sources/join.swift; sourceTree = ""; }; + 8749F40CC17CE0C26C36B0F431A9C8F0 /* Alamofire.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Alamofire.modulemap; sourceTree = ""; }; + 87B213035BAC5F75386F62D3C75D2342 /* Pods-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-acknowledgements.plist"; sourceTree = ""; }; + 87BC7910B8D7D31310A07C32438A8C67 /* OMGUserAgent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OMGUserAgent.h; path = Sources/OMGUserAgent.h; sourceTree = ""; }; + 894E5DA93A9F359521A89826BE6DA777 /* Pods-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-dummy.m"; sourceTree = ""; }; + 8A8F373B23E0F7FB68B0BA71D92D1C60 /* Stream.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Stream.swift; path = Source/Stream.swift; sourceTree = ""; }; + 8A9CB35983E4859DFFBAD8840196A094 /* Error.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Error.swift; path = Source/Error.swift; sourceTree = ""; }; + 8B476A57549D7994745E17A6DE5BE745 /* Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Alamofire.swift; path = Source/Alamofire.swift; sourceTree = ""; }; + 8DC63EB77B3791891517B98CAA115DE8 /* State.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = State.swift; path = Sources/State.swift; sourceTree = ""; }; + 8F0266C5AE0B23A436291F6647902086 /* Models.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Models.swift; sourceTree = ""; }; + 9042667D08D783E45394FE8B97EE6468 /* PromiseKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "PromiseKit-dummy.m"; sourceTree = ""; }; + 92734297B64DFE0EB0EDE1EA821163DB /* AlamofireImplementations.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AlamofireImplementations.swift; sourceTree = ""; }; + 92D340D66F03F31237B70F23FE9B00D0 /* UIAlertView+AnyPromise.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIAlertView+AnyPromise.h"; path = "Categories/UIKit/UIAlertView+AnyPromise.h"; sourceTree = ""; }; + 9774D31336C85248A115B569E7D95283 /* UIActionSheet+AnyPromise.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIActionSheet+AnyPromise.m"; path = "Categories/UIKit/UIActionSheet+AnyPromise.m"; sourceTree = ""; }; + 977577C045EDA9D9D1F46E2598D19FC7 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.debug.xcconfig; sourceTree = ""; }; + 980FD13F87B44BFD90F8AC129BEB2E61 /* race.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = race.swift; path = Sources/race.swift; sourceTree = ""; }; + 9D579267FC1F163C8F04B444DAEFED0D /* OMGHTTPURLRQ.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OMGHTTPURLRQ.m; path = Sources/OMGHTTPURLRQ.m; sourceTree = ""; }; + 9F681D2C508D1BA8F62893120D9343A4 /* PetstoreClient-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "PetstoreClient-umbrella.h"; sourceTree = ""; }; + A04177B09D9596450D827FE49A36C4C4 /* Download.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Download.swift; path = Source/Download.swift; sourceTree = ""; }; + A112EF8BB3933C1C1E42F11B3DD3B02A /* PromiseKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PromiseKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A1D1571AB15108DF6F9C4FE2064E3C43 /* Alamofire.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A7F0DAACAC89A93B940BBE54E6A87E9F /* NSURLConnection+AnyPromise.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSURLConnection+AnyPromise.m"; path = "Categories/Foundation/NSURLConnection+AnyPromise.m"; sourceTree = ""; }; + A92242715FB4C0608F8DCEBF8F3791E2 /* dispatch_promise.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = dispatch_promise.m; path = Sources/dispatch_promise.m; sourceTree = ""; }; + AA24C5EC82CF437D8D1FFFAB68975408 /* UIViewController+AnyPromise.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIViewController+AnyPromise.m"; path = "Categories/UIKit/UIViewController+AnyPromise.m"; sourceTree = ""; }; + AB4DA378490493502B34B20D4B12325B /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + B3A144887C8B13FD888B76AB096B0CA1 /* PetstoreClient-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "PetstoreClient-prefix.pch"; sourceTree = ""; }; + B868468092D7B2489B889A50981C9247 /* after.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = after.m; path = Sources/after.m; sourceTree = ""; }; + B93FB4BB16CFB41DCA35A8CFAD7A7FEF /* NSNotificationCenter+Promise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSNotificationCenter+Promise.swift"; path = "Categories/Foundation/NSNotificationCenter+Promise.swift"; sourceTree = ""; }; + B9E21DC1171D712B2D2307EE5034D99E /* OMGHTTPURLRQ-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "OMGHTTPURLRQ-prefix.pch"; sourceTree = ""; }; + BA6428E9F66FD5A23C0A2E06ED26CD2F /* Podfile */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + BAE48ACA10E8895BB8BF5CE8C0846B4B /* NSURLConnection+AnyPromise.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURLConnection+AnyPromise.h"; path = "Categories/Foundation/NSURLConnection+AnyPromise.h"; sourceTree = ""; }; + BCDD82DB3E6D43BA9769FCA9B744CB5E /* UIView+AnyPromise.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+AnyPromise.h"; path = "Categories/UIKit/UIView+AnyPromise.h"; sourceTree = ""; }; + C476B916B763E55E4161F0B30760C4E8 /* afterlife.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = afterlife.swift; path = Categories/Foundation/afterlife.swift; sourceTree = ""; }; + C731FBFCC690050C6C08E5AC9D9DC724 /* PMKAlertController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PMKAlertController.swift; path = Categories/UIKit/PMKAlertController.swift; sourceTree = ""; }; + CA1AD92813B887E2D017D051B8C0E3D2 /* Validation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Validation.swift; path = Source/Validation.swift; sourceTree = ""; }; + CA854180C132DB5511D64C82535C5FDE /* UIAlertView+Promise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIAlertView+Promise.swift"; path = "Categories/UIKit/UIAlertView+Promise.swift"; sourceTree = ""; }; + CBC0F7C552B739C909B650A0F42F7F38 /* Pods-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-resources.sh"; sourceTree = ""; }; + CC49FF2A84C0E0E9349747D94036B728 /* PromiseKit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = PromiseKit.xcconfig; sourceTree = ""; }; + CCE38472832BBCC541E646DA6C18EF9C /* Upload.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Upload.swift; path = Source/Upload.swift; sourceTree = ""; }; + CDC4DD7DB9F4C34A288BECA73BC13B57 /* PromiseKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = PromiseKit.modulemap; sourceTree = ""; }; + D0405803033A2A777B8E4DFA0C1800ED /* Pods-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-acknowledgements.markdown"; sourceTree = ""; }; + D2BAD338E56EF3CAA6E54490FE0C5DF9 /* APIHelper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = APIHelper.swift; sourceTree = ""; }; + D4248CF20178C57CEFEFAAF453C0DC75 /* PromiseKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PromiseKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D4DF0604EDC1460935E6E445A47023A4 /* Category.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Category.swift; sourceTree = ""; }; + D6D459D0AB2361B48F81C4D14C6D0DAA /* UIViewController+Promise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIViewController+Promise.swift"; path = "Categories/UIKit/UIViewController+Promise.swift"; sourceTree = ""; }; + D6EB54C331FED437583A5F01EB2757D1 /* NSObject+Promise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSObject+Promise.swift"; path = "Categories/Foundation/NSObject+Promise.swift"; sourceTree = ""; }; + D8072E1108951F272C003553FC8926C7 /* APIs.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = APIs.swift; sourceTree = ""; }; + D931A99C6B5A8E0F69C818C6ECC3C44F /* Pods.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DA312349A49333542E6F4B36B329960E /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.release.xcconfig; sourceTree = ""; }; + DADAB10704E49D6B9E18F59F995BB88F /* PetstoreClient.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = PetstoreClient.xcconfig; sourceTree = ""; }; + E11BFB27B43B742CB5D6086C4233A909 /* OMGUserAgent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OMGUserAgent.m; path = Sources/OMGUserAgent.m; sourceTree = ""; }; + E160B50E4D11692AA38E74C897D69C61 /* PetstoreClient.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PetstoreClient.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E3CDA0958D6247505ECD9098D662EA74 /* UIView+Promise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+Promise.swift"; path = "Categories/UIKit/UIView+Promise.swift"; sourceTree = ""; }; + E3D1141B63DF38660CD6F3AC588A782B /* PetstoreClient.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = PetstoreClient.modulemap; sourceTree = ""; }; + E7CE161ED0CF68954A63F30528ACAD9B /* URLDataPromise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLDataPromise.swift; path = Sources/URLDataPromise.swift; sourceTree = ""; }; + E7F21354943D9F42A70697D5A5EF72E9 /* Pods-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-frameworks.sh"; sourceTree = ""; }; + E8446514FBAD26C0E18F24A5715AEF67 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + EBC4140FCBB5B4D3A955B1608C165C04 /* Alamofire.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F075F63EFE77F7B59FF77CBA95B9AADF /* UIAlertView+AnyPromise.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIAlertView+AnyPromise.m"; path = "Categories/UIKit/UIAlertView+AnyPromise.m"; sourceTree = ""; }; + F0D4E00A8974E74325E9E53D456F9AD4 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + F4B6A98D6DAF474045210F5A74FF1C3C /* hang.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = hang.m; path = Sources/hang.m; sourceTree = ""; }; + F7EBDD2EEED520E06ACB3538B3832049 /* OMGHTTPURLRQ-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "OMGHTTPURLRQ-umbrella.h"; sourceTree = ""; }; + FB15A61DB7ABCB74565286162157C5A0 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + FC4BF94DC4B3D8B88FC160B00931B0EC /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; + FD558DDCDDA1B46951548B02C34277EF /* ResponseSerialization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ResponseSerialization.swift; path = Source/ResponseSerialization.swift; sourceTree = ""; }; + FD570E28B63274E742E7D1FBBD55BB41 /* UIActionSheet+Promise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIActionSheet+Promise.swift"; path = "Categories/UIKit/UIActionSheet+Promise.swift"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 9792A6BDBB07FB15453527B4370E3086 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 35F6B35131F89EA23246C6508199FB05 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A5AE1D340C4A0691EC28EEA8241C9FCD /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 96D99D0C2472535A169DED65CB231CD7 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B9EC7146E2607203CE4A5678AE249144 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + EEF6E654182421FEBC0CC202E72F71A8 /* Foundation.framework in Frameworks */, + 7D7A40DBAC93241786E8C553921E8C86 /* OMGHTTPURLRQ.framework in Frameworks */, + 1287903F965945AEB5EFC4EE768C7B38 /* QuartzCore.framework in Frameworks */, + EA691570F0F8066651EE2A7066426384 /* UIKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + FA26D2C7E461A1BBD50054579AFE2F7C /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + DD8D067A7F742F39B87FA04CE12DD118 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + FC8C7ACC9E4D7F04E9223A734BF57FFB /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 9CFBA896DF45B68C788F80013AC3FDBB /* Alamofire.framework in Frameworks */, + 523C1819FC864864A9715CF713DD12E9 /* Foundation.framework in Frameworks */, + FB0B33F03AC2BC8A7FC7FD912C12CC22 /* PromiseKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 07467E828160702D1DB7EC2F492C337C /* UserAgent */ = { + isa = PBXGroup; + children = ( + 87BC7910B8D7D31310A07C32438A8C67 /* OMGUserAgent.h */, + E11BFB27B43B742CB5D6086C4233A909 /* OMGUserAgent.m */, + ); + name = UserAgent; + sourceTree = ""; + }; + 1322FED69118C64DAD026CAF7F4C38C6 /* Models */ = { + isa = PBXGroup; + children = ( + D4DF0604EDC1460935E6E445A47023A4 /* Category.swift */, + 0A545673F09F49CDD60A13B4B0AF1020 /* Order.swift */, + 284B3DE9B793FCC633E971DB1798AFAF /* Pet.swift */, + 211F73A46D90346F7FC6D0D29640EE4F /* Tag.swift */, + 5B248364ABF60ACD7DB31A17DCFDFD0C /* User.swift */, + ); + path = Models; + sourceTree = ""; + }; + 1D2330E920AD5F6E4655BE449D006A77 /* Support Files */ = { + isa = PBXGroup; + children = ( + AB4DA378490493502B34B20D4B12325B /* Info.plist */, + 24C79ED4B5226F263307B22E96E88F9F /* OMGHTTPURLRQ.modulemap */, + 16D7C901D915C251DEBA27AC1EF57E34 /* OMGHTTPURLRQ.xcconfig */, + 0F36B65CF990C57DC527824ED0BA1915 /* OMGHTTPURLRQ-dummy.m */, + B9E21DC1171D712B2D2307EE5034D99E /* OMGHTTPURLRQ-prefix.pch */, + F7EBDD2EEED520E06ACB3538B3832049 /* OMGHTTPURLRQ-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/OMGHTTPURLRQ"; + sourceTree = ""; + }; + 22F52349E1BE90FC6E064DAAC9EA9612 /* Development Pods */ = { + isa = PBXGroup; + children = ( + E9F8459055B900A58FB97600A53E5D1C /* PetstoreClient */, + ); + name = "Development Pods"; + sourceTree = ""; + }; + 75D98FF52E597A11900E131B6C4E1ADA /* Pods */ = { + isa = PBXGroup; + children = ( + E8446514FBAD26C0E18F24A5715AEF67 /* Info.plist */, + 79A9DEDC89FE8336BF5FEDAAF75BF7FC /* Pods.modulemap */, + D0405803033A2A777B8E4DFA0C1800ED /* Pods-acknowledgements.markdown */, + 87B213035BAC5F75386F62D3C75D2342 /* Pods-acknowledgements.plist */, + 894E5DA93A9F359521A89826BE6DA777 /* Pods-dummy.m */, + E7F21354943D9F42A70697D5A5EF72E9 /* Pods-frameworks.sh */, + CBC0F7C552B739C909B650A0F42F7F38 /* Pods-resources.sh */, + 2BCC458FDD5F692BBB2BFC64BB5701FC /* Pods-umbrella.h */, + 977577C045EDA9D9D1F46E2598D19FC7 /* Pods.debug.xcconfig */, + DA312349A49333542E6F4B36B329960E /* Pods.release.xcconfig */, + ); + name = Pods; + path = "Target Support Files/Pods"; + sourceTree = ""; + }; + 76DC20E0A9F8CDC0E47176B58A9C5BD5 /* Foundation */ = { + isa = PBXGroup; + children = ( + C476B916B763E55E4161F0B30760C4E8 /* afterlife.swift */, + 3616971BAEF40302B7F2F8B1007C0B2B /* NSNotificationCenter+AnyPromise.h */, + 4798BAC01B0E3F07E3BBBB07BA57F2D7 /* NSNotificationCenter+AnyPromise.m */, + B93FB4BB16CFB41DCA35A8CFAD7A7FEF /* NSNotificationCenter+Promise.swift */, + D6EB54C331FED437583A5F01EB2757D1 /* NSObject+Promise.swift */, + BAE48ACA10E8895BB8BF5CE8C0846B4B /* NSURLConnection+AnyPromise.h */, + A7F0DAACAC89A93B940BBE54E6A87E9F /* NSURLConnection+AnyPromise.m */, + 412985229DA7A4DF9E129B7E8F0C09BB /* NSURLConnection+Promise.swift */, + 535DF88FC12304114DEF55E4003421B2 /* NSURLSession+Promise.swift */, + ); + name = Foundation; + sourceTree = ""; + }; + 7DB346D0F39D3F0E887471402A8071AB = { + isa = PBXGroup; + children = ( + BA6428E9F66FD5A23C0A2E06ED26CD2F /* Podfile */, + 22F52349E1BE90FC6E064DAAC9EA9612 /* Development Pods */, + E85F5154C248966A1EC7B7B6EACB20CF /* Frameworks */, + CF22FA3EE19C3EC42FEBA1247EB70D85 /* Pods */, + D6592B983C64CE2427DF9CF38F4BD1C1 /* Products */, + B7B80995527643776607AFFA75B91E24 /* Targets Support Files */, + ); + sourceTree = ""; + }; + 7DFF028D9F7D443B2361EBEDACC99624 /* OMGHTTPURLRQ */ = { + isa = PBXGroup; + children = ( + 8FCF5C41226503429E7875DF4CA4D36E /* FormURLEncode */, + A00A425F2E132E8FF4DE929E7DF9CC1E /* RQ */, + 1D2330E920AD5F6E4655BE449D006A77 /* Support Files */, + 07467E828160702D1DB7EC2F492C337C /* UserAgent */, + ); + path = OMGHTTPURLRQ; + sourceTree = ""; + }; + 81B1E3A8E00502B38EACDE3617A7A73B /* Support Files */ = { + isa = PBXGroup; + children = ( + 792D14AC86CD98AA9C31373287E0F353 /* Info.plist */, + CDC4DD7DB9F4C34A288BECA73BC13B57 /* PromiseKit.modulemap */, + CC49FF2A84C0E0E9349747D94036B728 /* PromiseKit.xcconfig */, + 9042667D08D783E45394FE8B97EE6468 /* PromiseKit-dummy.m */, + 122D5005A81832479161CD1D223C573A /* PromiseKit-prefix.pch */, + ); + name = "Support Files"; + path = "../Target Support Files/PromiseKit"; + sourceTree = ""; + }; + 83C3888E1F7B1FC86D9CBF3B74DC2896 /* QuartzCore */ = { + isa = PBXGroup; + children = ( + 27E0FE41D771BE8BE3F0D4F1DAD0B179 /* CALayer+AnyPromise.h */, + 04A22F2595054D39018E03961CA7283A /* CALayer+AnyPromise.m */, + ); + name = QuartzCore; + sourceTree = ""; + }; + 8EA2A359F1831ACBB15BAAEA04D6FB95 /* UIKit */ = { + isa = PBXGroup; + children = ( + C731FBFCC690050C6C08E5AC9D9DC724 /* PMKAlertController.swift */, + 6846D22C9F0CCBC48DF833E309A8E84F /* UIActionSheet+AnyPromise.h */, + 9774D31336C85248A115B569E7D95283 /* UIActionSheet+AnyPromise.m */, + FD570E28B63274E742E7D1FBBD55BB41 /* UIActionSheet+Promise.swift */, + 92D340D66F03F31237B70F23FE9B00D0 /* UIAlertView+AnyPromise.h */, + F075F63EFE77F7B59FF77CBA95B9AADF /* UIAlertView+AnyPromise.m */, + CA854180C132DB5511D64C82535C5FDE /* UIAlertView+Promise.swift */, + BCDD82DB3E6D43BA9769FCA9B744CB5E /* UIView+AnyPromise.h */, + 2F0F4EDC2236E1C270DC2014181D6506 /* UIView+AnyPromise.m */, + E3CDA0958D6247505ECD9098D662EA74 /* UIView+Promise.swift */, + 0BA017E288BB42E06EBEE9C6E6993EAF /* UIViewController+AnyPromise.h */, + AA24C5EC82CF437D8D1FFFAB68975408 /* UIViewController+AnyPromise.m */, + D6D459D0AB2361B48F81C4D14C6D0DAA /* UIViewController+Promise.swift */, + ); + name = UIKit; + sourceTree = ""; + }; + 8F6D133867EE63820DFB7E83F4C51252 /* Support Files */ = { + isa = PBXGroup; + children = ( + F0D4E00A8974E74325E9E53D456F9AD4 /* Info.plist */, + E3D1141B63DF38660CD6F3AC588A782B /* PetstoreClient.modulemap */, + DADAB10704E49D6B9E18F59F995BB88F /* PetstoreClient.xcconfig */, + 46A8E0328DC896E0893B565FE8742167 /* PetstoreClient-dummy.m */, + B3A144887C8B13FD888B76AB096B0CA1 /* PetstoreClient-prefix.pch */, + 9F681D2C508D1BA8F62893120D9343A4 /* PetstoreClient-umbrella.h */, + ); + name = "Support Files"; + path = "SwaggerClientTests/Pods/Target Support Files/PetstoreClient"; + sourceTree = ""; + }; + 8FCF5C41226503429E7875DF4CA4D36E /* FormURLEncode */ = { + isa = PBXGroup; + children = ( + 51ADA0B6B6B00CB0E818AA8CBC311677 /* OMGFormURLEncode.h */, + 25614E715DDC170DAFB0DF50C5503E33 /* OMGFormURLEncode.m */, + ); + name = FormURLEncode; + sourceTree = ""; + }; + 99640BFBD45FFAD70A89B868F85EFA36 /* Alamofire */ = { + isa = PBXGroup; + children = ( + 8B476A57549D7994745E17A6DE5BE745 /* Alamofire.swift */, + A04177B09D9596450D827FE49A36C4C4 /* Download.swift */, + 8A9CB35983E4859DFFBAD8840196A094 /* Error.swift */, + 2D51C929AC51E34493AA757180C09C3B /* Manager.swift */, + 5F14E17B4D6BDF8BD3E384BE6528F744 /* MultipartFormData.swift */, + 1FBD351D007CF4095C98C9DFD9D83D61 /* ParameterEncoding.swift */, + 133C5287CFDCB3B67578A7B1221E132C /* Request.swift */, + 5DF5FC3AF99846209C5FCE55A2E12D9A /* Response.swift */, + FD558DDCDDA1B46951548B02C34277EF /* ResponseSerialization.swift */, + 53F8B2513042BD6DB957E8063EF895BD /* Result.swift */, + 400A6910E83F606BCD67DC11FA706697 /* ServerTrustPolicy.swift */, + 8A8F373B23E0F7FB68B0BA71D92D1C60 /* Stream.swift */, + CCE38472832BBCC541E646DA6C18EF9C /* Upload.swift */, + CA1AD92813B887E2D017D051B8C0E3D2 /* Validation.swift */, + 9E101A4CE6D982647EED5C067C563BED /* Support Files */, + ); + path = Alamofire; + sourceTree = ""; + }; + 9E101A4CE6D982647EED5C067C563BED /* Support Files */ = { + isa = PBXGroup; + children = ( + 8749F40CC17CE0C26C36B0F431A9C8F0 /* Alamofire.modulemap */, + 141F0B43C42CE92856BBA8F8D98481DB /* Alamofire.xcconfig */, + 139346EB669CBE2DE8FE506E14A2BA9C /* Alamofire-dummy.m */, + 3950B63B8EB1B9CD8FC31CDA8CC2E7C7 /* Alamofire-prefix.pch */, + 30CE7341A995EF6812D71771E74CF7F7 /* Alamofire-umbrella.h */, + 3CE589B7B1FE57084403D25DC49528B5 /* Info.plist */, + ); + name = "Support Files"; + path = "../Target Support Files/Alamofire"; + sourceTree = ""; + }; + A00A425F2E132E8FF4DE929E7DF9CC1E /* RQ */ = { + isa = PBXGroup; + children = ( + 450166FEA2155A5821D97744A0127DF8 /* OMGHTTPURLRQ.h */, + 9D579267FC1F163C8F04B444DAEFED0D /* OMGHTTPURLRQ.m */, + ); + name = RQ; + sourceTree = ""; + }; + AD94092456F8ABCB18F74CAC75AD85DE /* Classes */ = { + isa = PBXGroup; + children = ( + F64549CFCC17C7AC6479508BE180B18D /* Swaggers */, + ); + path = Classes; + sourceTree = ""; + }; + B7B80995527643776607AFFA75B91E24 /* Targets Support Files */ = { + isa = PBXGroup; + children = ( + 75D98FF52E597A11900E131B6C4E1ADA /* Pods */, + ); + name = "Targets Support Files"; + sourceTree = ""; + }; + BEACE1971060500B96701CBC3F667BAE /* CorePromise */ = { + isa = PBXGroup; + children = ( + B868468092D7B2489B889A50981C9247 /* after.m */, + 275DA9A664C70DD40A4059090D1A00D4 /* after.swift */, + 1F19945EE403F7B29D8B1939EA6D579A /* AnyPromise.h */, + 1B7E90A568681E000EF3CB0917584F3C /* AnyPromise.m */, + 5973BC143AE488C12FFB1E83E71F0C45 /* AnyPromise.swift */, + A92242715FB4C0608F8DCEBF8F3791E2 /* dispatch_promise.m */, + 392FA21A33296B88F790D62A4FAA4E4E /* dispatch_promise.swift */, + 558DFECE2C740177CA6357DA71A1DFBB /* Error.swift */, + F4B6A98D6DAF474045210F5A74FF1C3C /* hang.m */, + 6AD59903FAA8315AD0036AC459FFB97F /* join.m */, + 84319E048FE6DD89B905FA3A81005C5F /* join.swift */, + 045C1F608ADE57757E6732D721779F22 /* NSError+Cancellation.h */, + 3D23C407A7CDBFD244D6115899F9D45D /* Promise.swift */, + 7E0DBDE561A6C2E7AC7A24160F8A5F28 /* Promise+Properties.swift */, + 3BFFA6FD621E9ED341AA89AEAC1604D7 /* PromiseKit.h */, + 980FD13F87B44BFD90F8AC129BEB2E61 /* race.swift */, + 8DC63EB77B3791891517B98CAA115DE8 /* State.swift */, + 0A8906F6D6920DF197965D1740A7E283 /* Umbrella.h */, + E7CE161ED0CF68954A63F30528ACAD9B /* URLDataPromise.swift */, + 143BC30E5DDAF52A3D9578F507EC6A41 /* when.m */, + 16730DAF3E51C161D8247E473F069E71 /* when.swift */, + ); + name = CorePromise; + sourceTree = ""; + }; + CF22FA3EE19C3EC42FEBA1247EB70D85 /* Pods */ = { + isa = PBXGroup; + children = ( + 99640BFBD45FFAD70A89B868F85EFA36 /* Alamofire */, + 7DFF028D9F7D443B2361EBEDACC99624 /* OMGHTTPURLRQ */, + D9FC474F1DB94FC75B3AAC120F0D4AB7 /* PromiseKit */, + ); + name = Pods; + sourceTree = ""; + }; + D6592B983C64CE2427DF9CF38F4BD1C1 /* Products */ = { + isa = PBXGroup; + children = ( + EBC4140FCBB5B4D3A955B1608C165C04 /* Alamofire.framework */, + 5CA1C154DFC54DFFB12A754B9A0BBDFC /* OMGHTTPURLRQ.framework */, + E160B50E4D11692AA38E74C897D69C61 /* PetstoreClient.framework */, + D931A99C6B5A8E0F69C818C6ECC3C44F /* Pods.framework */, + D4248CF20178C57CEFEFAAF453C0DC75 /* PromiseKit.framework */, + ); + name = Products; + sourceTree = ""; + }; + D9FC474F1DB94FC75B3AAC120F0D4AB7 /* PromiseKit */ = { + isa = PBXGroup; + children = ( + BEACE1971060500B96701CBC3F667BAE /* CorePromise */, + 76DC20E0A9F8CDC0E47176B58A9C5BD5 /* Foundation */, + 83C3888E1F7B1FC86D9CBF3B74DC2896 /* QuartzCore */, + 81B1E3A8E00502B38EACDE3617A7A73B /* Support Files */, + 8EA2A359F1831ACBB15BAAEA04D6FB95 /* UIKit */, + ); + path = PromiseKit; + sourceTree = ""; + }; + E73D9BF152C59F341559DE62A3143721 /* PetstoreClient */ = { + isa = PBXGroup; + children = ( + AD94092456F8ABCB18F74CAC75AD85DE /* Classes */, + ); + path = PetstoreClient; + sourceTree = ""; + }; + E85F5154C248966A1EC7B7B6EACB20CF /* Frameworks */ = { + isa = PBXGroup; + children = ( + A1D1571AB15108DF6F9C4FE2064E3C43 /* Alamofire.framework */, + 3530BF15E14D1F6D7134EE67377D5C8C /* OMGHTTPURLRQ.framework */, + A112EF8BB3933C1C1E42F11B3DD3B02A /* PromiseKit.framework */, + E8D8DAC96ED2B9203F380FB45F6DBE39 /* iOS */, + ); + name = Frameworks; + sourceTree = ""; + }; + E8D8DAC96ED2B9203F380FB45F6DBE39 /* iOS */ = { + isa = PBXGroup; + children = ( + FB15A61DB7ABCB74565286162157C5A0 /* Foundation.framework */, + FC4BF94DC4B3D8B88FC160B00931B0EC /* QuartzCore.framework */, + 5A1DC80A0773C5A569348DC442EAFD1D /* UIKit.framework */, + ); + name = iOS; + sourceTree = ""; + }; + E9F8459055B900A58FB97600A53E5D1C /* PetstoreClient */ = { + isa = PBXGroup; + children = ( + E73D9BF152C59F341559DE62A3143721 /* PetstoreClient */, + 8F6D133867EE63820DFB7E83F4C51252 /* Support Files */, + ); + name = PetstoreClient; + path = ../..; + sourceTree = ""; + }; + F64549CFCC17C7AC6479508BE180B18D /* Swaggers */ = { + isa = PBXGroup; + children = ( + 92734297B64DFE0EB0EDE1EA821163DB /* AlamofireImplementations.swift */, + D2BAD338E56EF3CAA6E54490FE0C5DF9 /* APIHelper.swift */, + D8072E1108951F272C003553FC8926C7 /* APIs.swift */, + 5412898DEB10F1983487A10453C6B9CB /* Extensions.swift */, + 8F0266C5AE0B23A436291F6647902086 /* Models.swift */, + F92EFB558CBA923AB1CFA22F708E315A /* APIs */, + 1322FED69118C64DAD026CAF7F4C38C6 /* Models */, + ); + path = Swaggers; + sourceTree = ""; + }; + F92EFB558CBA923AB1CFA22F708E315A /* APIs */ = { + isa = PBXGroup; + children = ( + 261F03A3C73374FD19333EEA59CCD59F /* PetAPI.swift */, + 1A3E5E3CD673B025FD8AC260E67AB47E /* StoreAPI.swift */, + 552D15E0340BF58CC1922B82E864AEC9 /* UserAPI.swift */, + ); + path = APIs; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 09D29D14882ADDDA216809ED16917D07 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 3860D960E37C1257BDA54626CA592E86 /* AnyPromise.h in Headers */, + CE89E5C528D52BBCBCD23309603BA6D1 /* CALayer+AnyPromise.h in Headers */, + 857E5961D9F6E23BD86DEB613A1499C7 /* NSError+Cancellation.h in Headers */, + DBD1F4247E1C591AE4EE5531599AB170 /* NSNotificationCenter+AnyPromise.h in Headers */, + 18FAC6B4FD3B44CB353C7A6027286100 /* NSURLConnection+AnyPromise.h in Headers */, + F700EAA9F9F6C1F99C83B45D05C5AD14 /* PromiseKit.h in Headers */, + 0268F9278E32ACC1F996F4E2E45622B5 /* UIActionSheet+AnyPromise.h in Headers */, + 12348513CB81BD05B497C210905CDF65 /* UIAlertView+AnyPromise.h in Headers */, + 8C4A96A3E69C772990E3E922D0FD1BC4 /* UIView+AnyPromise.h in Headers */, + 01BD61BBC475EB3369237B84FE24D3EE /* UIViewController+AnyPromise.h in Headers */, + 0BDA43D8F48C8B0D504C440046FAF681 /* Umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2835BFBD2FEFE3E2844CFC1B10201EA4 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 656BED6137A9FFA3B2DF03861F525022 /* PetstoreClient-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5F7B61281F714E2A64A51E80A2C9C062 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 2C5450AC69398958CF6F7539EF7D99E5 /* Alamofire-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7E1332ABD911123D7A873D6D87E2F182 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + D1E8B31EFCBDE00F108E739AD69425C0 /* Pods-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 8EC2461DE4442A7991319873E6012164 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 5480169E42C456C49BE59E273D7E0115 /* OMGFormURLEncode.h in Headers */, + 5192A7466019F9B3D7F1E987124E96BC /* OMGHTTPURLRQ-umbrella.h in Headers */, + 0B34EB4425C08BB021C2D09F75C9C146 /* OMGHTTPURLRQ.h in Headers */, + 3A8D316D4266A3309D0A98ED74F8A13A /* OMGUserAgent.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 190ACD3A51BC90B85EADB13E9CDD207B /* OMGHTTPURLRQ */ = { + isa = PBXNativeTarget; + buildConfigurationList = 620A8F6BEDF449F55F08EDB4CDBF60A2 /* Build configuration list for PBXNativeTarget "OMGHTTPURLRQ" */; + buildPhases = ( + 44321F32F148EB47FF23494889576DF5 /* Sources */, + 9792A6BDBB07FB15453527B4370E3086 /* Frameworks */, + 8EC2461DE4442A7991319873E6012164 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = OMGHTTPURLRQ; + productName = OMGHTTPURLRQ; + productReference = 5CA1C154DFC54DFFB12A754B9A0BBDFC /* OMGHTTPURLRQ.framework */; + productType = "com.apple.product-type.framework"; + }; + 25EDA9CFC641C69402B3857A2C4A39F0 /* PromiseKit */ = { + isa = PBXNativeTarget; + buildConfigurationList = 03DDC7D7BA248863E8493F462ABAD118 /* Build configuration list for PBXNativeTarget "PromiseKit" */; + buildPhases = ( + 1541E3035B9D2A7EED16C98953A8CEB6 /* Sources */, + B9EC7146E2607203CE4A5678AE249144 /* Frameworks */, + 09D29D14882ADDDA216809ED16917D07 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + C893B48B47F4A7541102DAAFECFC50F2 /* PBXTargetDependency */, + ); + name = PromiseKit; + productName = PromiseKit; + productReference = D4248CF20178C57CEFEFAAF453C0DC75 /* PromiseKit.framework */; + productType = "com.apple.product-type.framework"; + }; + 2FD913B4E24277823983BABFDB071664 /* PetstoreClient */ = { + isa = PBXNativeTarget; + buildConfigurationList = B5E28E2093F917340AF5AAA0FCE5E37D /* Build configuration list for PBXNativeTarget "PetstoreClient" */; + buildPhases = ( + 0DDA01F58E1381BEA0D7FB759B75A456 /* Sources */, + FC8C7ACC9E4D7F04E9223A734BF57FFB /* Frameworks */, + 2835BFBD2FEFE3E2844CFC1B10201EA4 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + FC9E3FF49D9B636B2925749B2D51A5D3 /* PBXTargetDependency */, + FAC5685F6C40E5D74404831646CBC453 /* PBXTargetDependency */, + ); + name = PetstoreClient; + productName = PetstoreClient; + productReference = E160B50E4D11692AA38E74C897D69C61 /* PetstoreClient.framework */; + productType = "com.apple.product-type.framework"; + }; + 432ECC54282C84882B482CCB4CF227FC /* Alamofire */ = { + isa = PBXNativeTarget; + buildConfigurationList = 8B2B2DA2F7F80D41B1FDB5FACFA4B3DE /* Build configuration list for PBXNativeTarget "Alamofire" */; + buildPhases = ( + EF659EFF40D426A3A32A82CDB98CC6EE /* Sources */, + A5AE1D340C4A0691EC28EEA8241C9FCD /* Frameworks */, + 5F7B61281F714E2A64A51E80A2C9C062 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Alamofire; + productName = Alamofire; + productReference = EBC4140FCBB5B4D3A955B1608C165C04 /* Alamofire.framework */; + productType = "com.apple.product-type.framework"; + }; + 7A5DBD588D2CC1C0CB1C42D4ED613FE4 /* Pods */ = { + isa = PBXNativeTarget; + buildConfigurationList = 8CB3C5DF3F4B6413A6F2D003B58CCF32 /* Build configuration list for PBXNativeTarget "Pods" */; + buildPhases = ( + 91F4D6732A1613C9660866E34445A67B /* Sources */, + FA26D2C7E461A1BBD50054579AFE2F7C /* Frameworks */, + 7E1332ABD911123D7A873D6D87E2F182 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + 64142DAEC5D96F7E876BBE00917C0E9D /* PBXTargetDependency */, + F74DEE1C89F05CC835997330B0E3B7C1 /* PBXTargetDependency */, + 2673248EF608AB8375FABCFDA8141072 /* PBXTargetDependency */, + 5433AD51A3DC696530C96B8A7D78ED7D /* PBXTargetDependency */, + ); + name = Pods; + productName = Pods; + productReference = D931A99C6B5A8E0F69C818C6ECC3C44F /* Pods.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0700; + LastUpgradeCheck = 0700; + }; + buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 7DB346D0F39D3F0E887471402A8071AB; + productRefGroup = D6592B983C64CE2427DF9CF38F4BD1C1 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 432ECC54282C84882B482CCB4CF227FC /* Alamofire */, + 190ACD3A51BC90B85EADB13E9CDD207B /* OMGHTTPURLRQ */, + 2FD913B4E24277823983BABFDB071664 /* PetstoreClient */, + 7A5DBD588D2CC1C0CB1C42D4ED613FE4 /* Pods */, + 25EDA9CFC641C69402B3857A2C4A39F0 /* PromiseKit */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + 0DDA01F58E1381BEA0D7FB759B75A456 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 516D41E4D035A817CC5116C11302E408 /* AlamofireImplementations.swift in Sources */, + 46F838880F41F56ABD91796FC956B4BF /* APIHelper.swift in Sources */, + EA35E77B4F31DC3E1D224458E0BC959D /* APIs.swift in Sources */, + CD97970D21D3CB8C459FAFEF11EE60F3 /* Category.swift in Sources */, + 5EE5E1CA27F3CB04A5DCF5BB90B76000 /* Extensions.swift in Sources */, + 15ECEBA1EFBD023AEA47F36524270D2C /* Models.swift in Sources */, + E2B0094FAAEA55C55AD141136F650E35 /* Order.swift in Sources */, + 1CDA074C6DC95876D85E13ECF882B93A /* Pet.swift in Sources */, + 2B38BB4603B4286FF8D7A780372E947F /* PetAPI.swift in Sources */, + 25FBB92AFB8F5A777CE8E40EC3B9DACA /* PetstoreClient-dummy.m in Sources */, + 443361437B359830308B93A7B98BE039 /* StoreAPI.swift in Sources */, + 6B0A17CD24331793D2504E0FBBAF5EB2 /* Tag.swift in Sources */, + D546A4DBA3F7750F45A6F63B994C081C /* User.swift in Sources */, + 2D9379807BA243E1CE457D1BE963DA09 /* UserAPI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1541E3035B9D2A7EED16C98953A8CEB6 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + C86881D2285095255829A578F0A85300 /* after.m in Sources */, + EA67B414E392EFD2B14742F55A595596 /* after.swift in Sources */, + 1AC7E88F0EC64D1D4E83CE7767BFD2B7 /* afterlife.swift in Sources */, + 909B0A29022956D90C32C4AA319F75D1 /* AnyPromise.m in Sources */, + F7161E50F083B2267363F243C4E4B78F /* AnyPromise.swift in Sources */, + 124EFF5E3C46EC88F47C52479FA6ACAF /* CALayer+AnyPromise.m in Sources */, + 6A128FE350973D8A693E3F063C5E4A49 /* dispatch_promise.m in Sources */, + F4582E8DC1C9F362ADA4BAE9CEF8B681 /* dispatch_promise.swift in Sources */, + D93596046CD3B301F4EC99A7A118C82C /* Error.swift in Sources */, + 5FFED823C0BDD412FA41B01EA47394D1 /* hang.m in Sources */, + 5D7EAE5725A7E750B51FD27AECB5F0FD /* join.m in Sources */, + 06F7C0C55DF4C09C015159F6B0802EB1 /* join.swift in Sources */, + 11C221075C5B20BDEEB3DDF8EAC99E63 /* NSNotificationCenter+AnyPromise.m in Sources */, + 88B3F911629C08DEEB226F3B294AAB36 /* NSNotificationCenter+Promise.swift in Sources */, + 0D240D796AAD10F0119A1D7AC2570AAA /* NSObject+Promise.swift in Sources */, + 8E3861989641484EE3095722EC08B5A9 /* NSURLConnection+AnyPromise.m in Sources */, + EB9A1F33DB49ADA09F6E7F19A2C30357 /* NSURLConnection+Promise.swift in Sources */, + 81A2DB65C0742D785DE7C2609CC14140 /* NSURLSession+Promise.swift in Sources */, + 73FA79FDB37E5C458B996012BFB0CF04 /* PMKAlertController.swift in Sources */, + 1E1010EA437F154A554D04F7F3A894EC /* Promise+Properties.swift in Sources */, + ADEEE5F368B5D707D03E78FD75C59048 /* Promise.swift in Sources */, + 8D3A68D3CBD8A1D89099F704A04A04FC /* PromiseKit-dummy.m in Sources */, + 97D71F12142A541BEEF425805D51379E /* race.swift in Sources */, + F898D4270885EF1114608E76B0C09E21 /* State.swift in Sources */, + CAF12A3EDA2376FFEAD4A12E413C1AAD /* UIActionSheet+AnyPromise.m in Sources */, + 387C7387FDC662D23D743879B6143D59 /* UIActionSheet+Promise.swift in Sources */, + 11EA8D6B0352FD31F520F983CFB9D993 /* UIAlertView+AnyPromise.m in Sources */, + EB3C88CDAF122BA763FEF85758370C7C /* UIAlertView+Promise.swift in Sources */, + 4C22563311AC2B52651A6525A979E076 /* UIView+AnyPromise.m in Sources */, + D1735D6C4D574339EB49024228448459 /* UIView+Promise.swift in Sources */, + 60EBBACB76CD5879FB7B9B3E0AA5E2C1 /* UIViewController+AnyPromise.m in Sources */, + C86CE0A47FAD4C9B2929A335D62A179E /* UIViewController+Promise.swift in Sources */, + CE225CF07E6E385F014883D607AFA44D /* URLDataPromise.swift in Sources */, + CB2A58CBAB5A2E63D0CB70F2697CAE87 /* when.m in Sources */, + ED30A8B82BA1D53CBC370B1DC18DA1EB /* when.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 44321F32F148EB47FF23494889576DF5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6F63943B0E954F701F32BC7A1F4C2FEC /* OMGFormURLEncode.m in Sources */, + D358A828E68E152D06FC8E35533BF00B /* OMGHTTPURLRQ-dummy.m in Sources */, + 48CB8E7E16443CA771E4DCFB3E0709A2 /* OMGHTTPURLRQ.m in Sources */, + 6CB84A616D7B4D189A4E94BD37621575 /* OMGUserAgent.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 91F4D6732A1613C9660866E34445A67B /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6D264CCBD7DAC0A530076FB1A847EEC7 /* Pods-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EF659EFF40D426A3A32A82CDB98CC6EE /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B6D2DC3E3DA44CD382B9B425F40E11C1 /* Alamofire-dummy.m in Sources */, + B0FB4B01682814B9E3D32F9DC4A5E762 /* Alamofire.swift in Sources */, + A3505FA2FB3067D53847AD288AC04F03 /* Download.swift in Sources */, + D75CA395D510E08C404E55F5BDAE55CE /* Error.swift in Sources */, + A2C172FE407C0BC3478ADCA91A6C9CEC /* Manager.swift in Sources */, + 8399DBEE3E2D98EB1F466132E476F4D9 /* MultipartFormData.swift in Sources */, + 4DE5FCC41D100B113B6645EA64410F16 /* ParameterEncoding.swift in Sources */, + FC14480CECE872865A9C6E584F886DA3 /* Request.swift in Sources */, + 03F494989CC1A8857B68A317D5D6860F /* Response.swift in Sources */, + D21B7325B3642887BFBE977E021F2D26 /* ResponseSerialization.swift in Sources */, + 82971968CBDAB224212EEB4607C9FB8D /* Result.swift in Sources */, + 80F496237530D382A045A29654D8C11C /* ServerTrustPolicy.swift in Sources */, + FEF0D7653948988B804226129471C1EC /* Stream.swift in Sources */, + 0681ADC8BAE2C3185F13487BAAB4D9DD /* Upload.swift in Sources */, + C75519F0450166A6F28126ECC7664E9C /* Validation.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 2673248EF608AB8375FABCFDA8141072 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = PetstoreClient; + target = 2FD913B4E24277823983BABFDB071664 /* PetstoreClient */; + targetProxy = 014385BD85FA83B60A03ADE9E8844F33 /* PBXContainerItemProxy */; + }; + 5433AD51A3DC696530C96B8A7D78ED7D /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = PromiseKit; + target = 25EDA9CFC641C69402B3857A2C4A39F0 /* PromiseKit */; + targetProxy = B5FB8931CDF8801206EDD2FEF94793BF /* PBXContainerItemProxy */; + }; + 64142DAEC5D96F7E876BBE00917C0E9D /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Alamofire; + target = 432ECC54282C84882B482CCB4CF227FC /* Alamofire */; + targetProxy = 769630CDAAA8C24AA5B4C81A85C45AC8 /* PBXContainerItemProxy */; + }; + C893B48B47F4A7541102DAAFECFC50F2 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = OMGHTTPURLRQ; + target = 190ACD3A51BC90B85EADB13E9CDD207B /* OMGHTTPURLRQ */; + targetProxy = 8059767A82D94C9F7F7C16D030819C4E /* PBXContainerItemProxy */; + }; + F74DEE1C89F05CC835997330B0E3B7C1 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = OMGHTTPURLRQ; + target = 190ACD3A51BC90B85EADB13E9CDD207B /* OMGHTTPURLRQ */; + targetProxy = 9AD20158D23CE70A2A91E5B7859090C3 /* PBXContainerItemProxy */; + }; + FAC5685F6C40E5D74404831646CBC453 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = PromiseKit; + target = 25EDA9CFC641C69402B3857A2C4A39F0 /* PromiseKit */; + targetProxy = ECAC5E4454026C822004659466983ADD /* PBXContainerItemProxy */; + }; + FC9E3FF49D9B636B2925749B2D51A5D3 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Alamofire; + target = 432ECC54282C84882B482CCB4CF227FC /* Alamofire */; + targetProxy = 4BED27A854EA6600536518D29BBB3670 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 0D12EBEB35AC8FA740B275C8105F9152 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 141F0B43C42CE92856BBA8F8D98481DB /* Alamofire.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/Alamofire/Alamofire-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Alamofire/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/Alamofire/Alamofire.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = Alamofire; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 10966F49AC953FB6BFDCBF072AF5B251 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = DADAB10704E49D6B9E18F59F995BB88F /* PetstoreClient.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/PetstoreClient/PetstoreClient-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/PetstoreClient/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/PetstoreClient/PetstoreClient.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = PetstoreClient; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 1361791756A3908370041AE99E5CF772 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 977577C045EDA9D9D1F46E2598D19FC7 /* Pods.debug.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + INFOPLIST_FILE = "Target Support Files/Pods/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods/Pods.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_NAME = Pods; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 28973E73A6075E48EBE277098505D118 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 141F0B43C42CE92856BBA8F8D98481DB /* Alamofire.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/Alamofire/Alamofire-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Alamofire/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/Alamofire/Alamofire.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_NAME = Alamofire; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 4D5CD4E08FD8D405881C59A5535E6CE8 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 16D7C901D915C251DEBA27AC1EF57E34 /* OMGHTTPURLRQ.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/OMGHTTPURLRQ/OMGHTTPURLRQ-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/OMGHTTPURLRQ/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/OMGHTTPURLRQ/OMGHTTPURLRQ.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = OMGHTTPURLRQ; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 7B7ACBE5930AD378A2346DC89BAD1027 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = CC49FF2A84C0E0E9349747D94036B728 /* PromiseKit.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/PromiseKit/PromiseKit-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/PromiseKit/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/PromiseKit/PromiseKit.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_NAME = PromiseKit; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 819D3D3D508154D9CFF3CE30C13E000E /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 16D7C901D915C251DEBA27AC1EF57E34 /* OMGHTTPURLRQ.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/OMGHTTPURLRQ/OMGHTTPURLRQ-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/OMGHTTPURLRQ/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/OMGHTTPURLRQ/OMGHTTPURLRQ.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_NAME = OMGHTTPURLRQ; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 8D1534490D941DCA47C62AC4314182AF /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.2; + ONLY_ACTIVE_ARCH = YES; + STRIP_INSTALLED_PRODUCT = NO; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Debug; + }; + 94652EA7B5323CE393BCE396E7262170 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = DADAB10704E49D6B9E18F59F995BB88F /* PetstoreClient.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/PetstoreClient/PetstoreClient-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/PetstoreClient/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/PetstoreClient/PetstoreClient.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_NAME = PetstoreClient; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + ADB2280332CE02FCD777CC987CD4E28A /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = CC49FF2A84C0E0E9349747D94036B728 /* PromiseKit.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/PromiseKit/PromiseKit-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/PromiseKit/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/PromiseKit/PromiseKit.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = PromiseKit; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + C5A18280E9321A9268D1C80B7DA43967 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_PREPROCESSOR_DEFINITIONS = "RELEASE=1"; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.2; + STRIP_INSTALLED_PRODUCT = NO; + SYMROOT = "${SRCROOT}/../build"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + D3F110D6C2483BBC023DA8D6DFC525C3 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = DA312349A49333542E6F4B36B329960E /* Pods.release.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + INFOPLIST_FILE = "Target Support Files/Pods/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods/Pods.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_NAME = Pods; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 03DDC7D7BA248863E8493F462ABAD118 /* Build configuration list for PBXNativeTarget "PromiseKit" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7B7ACBE5930AD378A2346DC89BAD1027 /* Debug */, + ADB2280332CE02FCD777CC987CD4E28A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 8D1534490D941DCA47C62AC4314182AF /* Debug */, + C5A18280E9321A9268D1C80B7DA43967 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 620A8F6BEDF449F55F08EDB4CDBF60A2 /* Build configuration list for PBXNativeTarget "OMGHTTPURLRQ" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 819D3D3D508154D9CFF3CE30C13E000E /* Debug */, + 4D5CD4E08FD8D405881C59A5535E6CE8 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 8B2B2DA2F7F80D41B1FDB5FACFA4B3DE /* Build configuration list for PBXNativeTarget "Alamofire" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 28973E73A6075E48EBE277098505D118 /* Debug */, + 0D12EBEB35AC8FA740B275C8105F9152 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 8CB3C5DF3F4B6413A6F2D003B58CCF32 /* Build configuration list for PBXNativeTarget "Pods" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1361791756A3908370041AE99E5CF772 /* Debug */, + D3F110D6C2483BBC023DA8D6DFC525C3 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + B5E28E2093F917340AF5AAA0FCE5E37D /* Build configuration list for PBXNativeTarget "PetstoreClient" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 94652EA7B5323CE393BCE396E7262170 /* Debug */, + 10966F49AC953FB6BFDCBF072AF5B251 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcshareddata/xcschemes/PetstoreClient.xcscheme b/samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcshareddata/xcschemes/PetstoreClient.xcscheme new file mode 100644 index 00000000000..6308eaa4680 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcshareddata/xcschemes/PetstoreClient.xcscheme @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcuserdata/jaz.xcuserdatad/xcschemes/Alamofire.xcscheme b/samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcuserdata/jaz.xcuserdatad/xcschemes/Alamofire.xcscheme new file mode 100644 index 00000000000..9a6985c1537 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcuserdata/jaz.xcuserdatad/xcschemes/Alamofire.xcscheme @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcuserdata/jaz.xcuserdatad/xcschemes/OMGHTTPURLRQ.xcscheme b/samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcuserdata/jaz.xcuserdatad/xcschemes/OMGHTTPURLRQ.xcscheme new file mode 100644 index 00000000000..7861441461f --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcuserdata/jaz.xcuserdatad/xcschemes/OMGHTTPURLRQ.xcscheme @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcuserdata/jaz.xcuserdatad/xcschemes/Pods.xcscheme b/samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcuserdata/jaz.xcuserdatad/xcschemes/Pods.xcscheme new file mode 100644 index 00000000000..ff29468da01 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcuserdata/jaz.xcuserdatad/xcschemes/Pods.xcscheme @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcuserdata/jaz.xcuserdatad/xcschemes/PromiseKit.xcscheme b/samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcuserdata/jaz.xcuserdatad/xcschemes/PromiseKit.xcscheme new file mode 100644 index 00000000000..ccfb329c2ca --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcuserdata/jaz.xcuserdatad/xcschemes/PromiseKit.xcscheme @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcuserdata/jaz.xcuserdatad/xcschemes/xcschememanagement.plist b/samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcuserdata/jaz.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 00000000000..c5687742d6a --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcuserdata/jaz.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,62 @@ + + + + + SchemeUserState + + Alamofire.xcscheme + + isShown + + + OMGHTTPURLRQ.xcscheme + + isShown + + + PetstoreClient.xcscheme + + isShown + + + Pods.xcscheme + + isShown + + + PromiseKit.xcscheme + + isShown + + + + SuppressBuildableAutocreation + + 190ACD3A51BC90B85EADB13E9CDD207B + + primary + + + 25EDA9CFC641C69402B3857A2C4A39F0 + + primary + + + 2FD913B4E24277823983BABFDB071664 + + primary + + + 432ECC54282C84882B482CCB4CF227FC + + primary + + + 7A5DBD588D2CC1C0CB1C42D4ED613FE4 + + primary + + + + + diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/Foundation/NSNotificationCenter+AnyPromise.h b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/Foundation/NSNotificationCenter+AnyPromise.h new file mode 100644 index 00000000000..8eb38bd815e --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/Foundation/NSNotificationCenter+AnyPromise.h @@ -0,0 +1,43 @@ +#import +#import + + +/** + To import the `NSNotificationCenter` category: + + use_frameworks! + pod "PromiseKit/Foundation" + + Or `NSNotificationCenter` is one of the categories imported by the umbrella pod: + + use_frameworks! + pod "PromiseKit" + + And then in your sources: + + #import +*/ +@interface NSNotificationCenter (PromiseKit) +/** + Observe the named notification once. + + [NSNotificationCenter once:UIKeyboardWillShowNotification].then(^(id note, id userInfo){ + UIViewAnimationCurve curve = [userInfo[UIKeyboardAnimationCurveUserInfoKey] integerValue]; + CGFloat duration = [userInfo[UIKeyboardAnimationDurationUserInfoKey] floatValue]; + + return [UIView promiseWithDuration:duration delay:0.0 options:(curve << 16) animations:^{ + + }]; + }); + + @warning *Important* Promises only resolve once. If you need your block to execute more than once then use `-addObserverForName:object:queue:usingBlock:`. + + @param notificationName The name of the notification for which to register the observer. + + @return A promise that fulfills with two parameters: + + 1. The NSNotification object. + 2. The NSNotification’s userInfo property. +*/ ++ (AnyPromise *)once:(NSString *)notificationName; +@end diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/Foundation/NSNotificationCenter+AnyPromise.m b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/Foundation/NSNotificationCenter+AnyPromise.m new file mode 100644 index 00000000000..642d966eaa3 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/Foundation/NSNotificationCenter+AnyPromise.m @@ -0,0 +1,18 @@ +#import +#import +#import +#import "NSNotificationCenter+AnyPromise.h" + + +@implementation NSNotificationCenter (PromiseKit) + ++ (AnyPromise *)once:(NSString *)name { + return [AnyPromise promiseWithResolverBlock:^(PMKResolver resolve) { + __block id identifier = [[NSNotificationCenter defaultCenter] addObserverForName:name object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) { + [[NSNotificationCenter defaultCenter] removeObserver:identifier name:name object:nil]; + resolve(PMKManifold(note, note.userInfo)); + }]; + }]; +} + +@end diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/Foundation/NSNotificationCenter+Promise.swift b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/Foundation/NSNotificationCenter+Promise.swift new file mode 100644 index 00000000000..578dce008c2 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/Foundation/NSNotificationCenter+Promise.swift @@ -0,0 +1,51 @@ +import Foundation.NSNotification +#if !COCOAPODS +import PromiseKit +#endif + +/** + To import the `NSNotificationCenter` category: + + use_frameworks! + pod "PromiseKit/Foundation" + + Or `NSNotificationCenter` is one of the categories imported by the umbrella pod: + + use_frameworks! + pod "PromiseKit" + + And then in your sources: + + import PromiseKit +*/ +extension NSNotificationCenter { + public class func once(name: String) -> NotificationPromise { + return NSNotificationCenter.defaultCenter().once(name) + } + + public func once(name: String) -> NotificationPromise { + let (promise, fulfill) = NotificationPromise.go() + let id = addObserverForName(name, object: nil, queue: nil, usingBlock: fulfill) + promise.then(on: zalgo) { _ in self.removeObserver(id) } + return promise + } +} + +public class NotificationPromise: Promise<[NSObject: AnyObject]> { + private let (parentPromise, parentFulfill, _) = Promise.pendingPromise() + + public func asNotification() -> Promise { + return parentPromise + } + + private class func go() -> (NotificationPromise, (NSNotification) -> Void) { + var fulfill: (([NSObject: AnyObject]) -> Void)! + let promise = NotificationPromise { f, _ in fulfill = f } + promise.parentPromise.then { fulfill($0.userInfo ?? [:]) } + return (promise, promise.parentFulfill) + } + + private override init(@noescape resolvers: (fulfill: ([NSObject: AnyObject]) -> Void, reject: (ErrorType) -> Void) throws -> Void) { + super.init(resolvers: resolvers) + } +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/Foundation/NSObject+Promise.swift b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/Foundation/NSObject+Promise.swift new file mode 100644 index 00000000000..4d5d35db4ab --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/Foundation/NSObject+Promise.swift @@ -0,0 +1,67 @@ +import Foundation +#if !COCOAPODS +import PromiseKit +#endif + +/** + To import the `NSObject` category: + + use_frameworks! + pod "PromiseKit/Foundation" + + Or `NSObject` is one of the categories imported by the umbrella pod: + + use_frameworks! + pod "PromiseKit" + + And then in your sources: + + import PromiseKit +*/ +extension NSObject { + /** + @return A promise that resolves when the provided keyPath changes. + + @warning *Important* The promise must not outlive the object under observation. + + @see Apple’s KVO documentation. + */ + public func observe(keyPath: String) -> Promise { + let (promise, fulfill, reject) = Promise.pendingPromise() + let proxy = KVOProxy(observee: self, keyPath: keyPath) { obj in + if let obj = obj as? T { + fulfill(obj) + } else { + let info = [NSLocalizedDescriptionKey: "The observed property was not of the requested type."] + reject(NSError(domain: PMKErrorDomain, code: PMKInvalidUsageError, userInfo: info)) + } + } + proxy.retainCycle = proxy + return promise + } +} + +private class KVOProxy: NSObject { + var retainCycle: KVOProxy? + let fulfill: (AnyObject?) -> Void + + init(observee: NSObject, keyPath: String, resolve: (AnyObject?) -> Void) { + fulfill = resolve + super.init() + observee.addObserver(self, forKeyPath: keyPath, options: NSKeyValueObservingOptions.New, context: pointer) + } + + override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer) { + if let change = change where context == pointer { + defer { retainCycle = nil } + fulfill(change[NSKeyValueChangeNewKey]) + if let object = object, keyPath = keyPath { + object.removeObserver(self, forKeyPath: keyPath) + } + } + } + + private lazy var pointer: UnsafeMutablePointer = { + return UnsafeMutablePointer(Unmanaged.passUnretained(self).toOpaque()) + }() +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/Foundation/NSURLConnection+AnyPromise.h b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/Foundation/NSURLConnection+AnyPromise.h new file mode 100644 index 00000000000..986431f31a9 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/Foundation/NSURLConnection+AnyPromise.h @@ -0,0 +1,215 @@ +#import +#import +#import +#import + +/** + To import the `NSURLConnection` category: + + use_frameworks! + pod "PromiseKit/Foundation" + + Or `NSURLConnection` is one of the categories imported by the umbrella pod: + + use_frameworks! + pod "PromiseKit" + + And then in your sources: + + #import + + PromiseKit automatically deserializes the raw HTTP data response into the + appropriate rich data type based on the mime type the server provides. + Thus if the response is JSON you will get the deserialized JSON response. + PromiseKit supports decoding into strings, JSON and UIImages. + + However if your server does not provide a rich content-type, you will + just get `NSData`. This is rare, but a good example we came across was + downloading files from Dropbox. + + PromiseKit goes to quite some lengths to provide good `NSError` objects + for error conditions at all stages of the HTTP to rich-data type + pipeline. We provide the following additional `userInfo` keys as + appropriate: + + - `PMKURLErrorFailingDataKey` + - `PMKURLErrorFailingStringKey` + - `PMKURLErrorFailingURLResponseKey` + + PromiseKit uses [OMGHTTPURLRQ](https://github.com/mxcl/OMGHTTPURLRQ) to + make its HTTP requests. PromiseKit only provides a convenience layer + above OMGHTTPURLRQ, thus if you need more power (eg. a multipartFormData + POST), use OMGHTTPURLRQ to generate the `NSURLRequest` and then pass + that request to `+promise:`. + + @see https://github.com/mxcl/OMGHTTPURLRQ +*/ +@interface NSURLConnection (PromiseKit) + +/** + Makes a GET request to the provided URL. + + [NSURLConnection GET:@"http://placekitten.com/320/320"].then(^(UIImage *img){ + // PromiseKit decodes the image (if it’s an image) + }); + + @param urlStringFormatOrURL The `NSURL` or string format to request. + + @return A promise that fulfills with three parameters: + + 1) The deserialized data response. + 2) The `NSHTTPURLResponse`. + 3) The raw `NSData` response. +*/ ++ (AnyPromise *)GET:(id)urlStringFormatOrURL, ...; + +/** + Makes a GET request with the provided query parameters. + + id url = @"http://jsonplaceholder.typicode.com/comments"; + id params = @{@"postId": @1}; + [NSURLConnection GET:url query:params].then(^(NSDictionary *jsonResponse){ + // PromiseKit decodes the JSON dictionary (if it’s JSON) + }); + + @param urlString The `NSURL` or URL string format to request. + + @param parameters The parameters to be encoded as the query string for the GET request. + + @return A promise that fulfills with three parameters: + + 1) The deserialized data response. + 2) The `NSHTTPURLResponse`. + 3) The raw `NSData` response. +*/ ++ (AnyPromise *)GET:(NSString *)urlString query:(NSDictionary *)parameters; + +/** + Makes a POST request to the provided URL passing form URL encoded + parameters. + + Form URL-encoding is the standard way to POST on the Internet, so + probably this is what you want. If it doesn’t work, try the `+POST:JSON` + variant. + + id url = @"http://jsonplaceholder.typicode.com/posts"; + id params = @{@"title": @"foo", @"body": @"bar", @"userId": @1}; + [NSURLConnection POST:url formURLEncodedParameters:params].then(^(NSDictionary *jsonResponse){ + // PromiseKit decodes the JSON dictionary (if it’s JSON) + }); + + @param urlString The URL to request. + + @param parameters The parameters to be form URL-encoded and passed as the POST body. + + @return A promise that fulfills with three parameters: + + 1) The deserialized data response. + 2) The `NSHTTPURLResponse`. + 3) The raw `NSData` response. +*/ ++ (AnyPromise *)POST:(NSString *)urlString formURLEncodedParameters:(NSDictionary *)parameters; + +/** + Makes a POST request to the provided URL passing JSON encoded parameters. + + Most web servers nowadays support POST with either JSON or form + URL-encoding. If in doubt try form URL-encoded parameters first. + + id url = @"http://jsonplaceholder.typicode.com/posts"; + id params = @{@"title": @"foo", @"body": @"bar", @"userId": @1}; + [NSURLConnection POST:url JSON:params].then(^(NSDictionary *jsonResponse){ + // PromiseKit decodes the JSON dictionary (if it’s JSON) + }); + + @param urlString The URL to request. + + @param JSONParameters The parameters to be JSON encoded and passed as the POST body. + + @return A promise that fulfills with three parameters: + + 1) The deserialized data response. + 2) The `NSHTTPURLResponse`. + 3) The raw `NSData` response. +*/ ++ (AnyPromise *)POST:(NSString *)urlString JSON:(NSDictionary *)JSONParameters; + +/** + Makes a PUT request to the provided URL passing form URL-encoded + parameters. + + id url = @"http://jsonplaceholder.typicode.com/posts/1"; + id params = @{@"id": @1, @"title": @"foo", @"body": @"bar", @"userId": @1}; + [NSURLConnection PUT:url formURLEncodedParameters:params].then(^(NSDictionary *jsonResponse){ + // PromiseKit decodes the JSON dictionary (if it’s JSON) + }); + + @param urlString The URL to request. + + @param parameters The parameters to be form URL-encoded and passed as the HTTP body. + + @return A promise that fulfills with three parameters: + + 1) The deserialized data response. + 2) The `NSHTTPURLResponse`. + 3) The raw `NSData` response. +*/ ++ (AnyPromise *)PUT:(NSString *)urlString formURLEncodedParameters:(NSDictionary *)params; + +/** + Makes a DELETE request to the provided URL passing form URL-encoded + parameters. + + id url = @"http://jsonplaceholder.typicode.com/posts/1"; + id params = nil; + [NSURLConnection DELETE:url formURLEncodedParameters:params].then(^(NSDictionary *jsonResponse){ + // PromiseKit decodes the JSON dictionary (if it’s JSON) + }); + + @param urlString The URL to request. + + @param parameters The parameters to be form URL-encoded and passed as the HTTP body. + + @return A promise that fulfills with three parameters: + + 1) The deserialized data response. + 2) The `NSHTTPURLResponse`. + 3) The raw `NSData` response. +*/ ++ (AnyPromise *)DELETE:(NSString *)urlString formURLEncodedParameters:(NSDictionary *)params; + +/** + Makes an HTTP request using the parameters specified by the provided URL + request. + + This variant is less convenient, but provides you complete control over + your `NSURLRequest`. Often this is necessary if your API requires + authentication in the HTTP headers. + + Also, for example, if you need to send a multipart form request then + PromiseKit provides no convenience method for this, however using + OMGHTTPURLRQ (a dependency of this category), we can accomplish our + requirements: + + OMGMultipartFormData *multipartFormData = [OMGMultipartFormData new]; + + NSData *data1 = [NSData dataWithContentsOfFile:@"myimage1.png"]; + [multipartFormData addFile:data1 parameterName:@"file1" filename:@"myimage1.png" contentType:@"image/png"]; + + NSMutableURLRequest *rq = [OMGHTTPURLRQ POST:url:multipartFormData]; + + [NSURLConnection promise:rq].then(^(id response){ + //… + }); + + @param request The URL request. + + @return A promise that fulfills with three parameters: + + 1) The deserialized data response. + 2) The `NSHTTPURLResponse`. + 3) The raw `NSData` response. +*/ ++ (AnyPromise *)promise:(NSURLRequest *)request; + +@end diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/Foundation/NSURLConnection+AnyPromise.m b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/Foundation/NSURLConnection+AnyPromise.m new file mode 100644 index 00000000000..862ef0fbfde --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/Foundation/NSURLConnection+AnyPromise.m @@ -0,0 +1,178 @@ +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import "NSURLConnection+AnyPromise.h" +#import +#import +#import + + +@implementation NSURLConnection (PromiseKit) + ++ (AnyPromise *)GET:(id)urlFormat, ... { + if ([urlFormat isKindOfClass:[NSString class]]) { + va_list arguments; + va_start(arguments, urlFormat); + urlFormat = [[NSString alloc] initWithFormat:urlFormat arguments:arguments]; + va_end(arguments); + } else if ([urlFormat isKindOfClass:[NSURL class]]) { + NSMutableURLRequest *rq = [[NSMutableURLRequest alloc] initWithURL:urlFormat]; + [rq setValue:OMGUserAgent() forHTTPHeaderField:@"User-Agent"]; + return [self promise:rq]; + } else { + urlFormat = [urlFormat description]; + } + id err; + id rq = [OMGHTTPURLRQ GET:urlFormat:nil error:&err]; + if (err) return [AnyPromise promiseWithValue:err]; + return [self promise:rq]; +} + ++ (AnyPromise *)GET:(NSString *)url query:(NSDictionary *)params { + id err; + id rq = [OMGHTTPURLRQ GET:url:params error:&err]; + if (err) return [AnyPromise promiseWithValue:err]; + return [self promise:rq]; +} + ++ (AnyPromise *)POST:(NSString *)url formURLEncodedParameters:(NSDictionary *)params { + id err; + id rq = [OMGHTTPURLRQ POST:url:params error:&err]; + if (err) return [AnyPromise promiseWithValue:err]; + return [self promise:rq]; +} + ++ (AnyPromise *)POST:(NSString *)urlString JSON:(NSDictionary *)params { + id err; + id rq = [OMGHTTPURLRQ POST:urlString JSON:params error:&err]; + if (err) [AnyPromise promiseWithValue:err]; + return [self promise:rq]; +} + ++ (AnyPromise *)PUT:(NSString *)url formURLEncodedParameters:(NSDictionary *)params { + id err; + id rq = [OMGHTTPURLRQ PUT:url:params error:&err]; + if (err) [AnyPromise promiseWithValue:err]; + return [self promise:rq]; + +} + ++ (AnyPromise *)DELETE:(NSString *)url formURLEncodedParameters:(NSDictionary *)params { + id err; + id rq = [OMGHTTPURLRQ DELETE:url :params error:&err]; + if (err) [AnyPromise promiseWithValue:err]; + return [self promise:rq]; +} + ++ (AnyPromise *)promise:(NSURLRequest *)rq { + static id q = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + q = [NSOperationQueue new]; + }); + + return [AnyPromise promiseWithResolverBlock:^(PMKResolver resolve) { + [NSURLConnection sendAsynchronousRequest:rq queue:q completionHandler:^(id rsp, id data, id urlError) { + assert(![NSThread isMainThread]); + + PMKResolver fulfiller = ^(id responseObject){ + resolve(PMKManifold(responseObject, rsp, data)); + }; + PMKResolver rejecter = ^(NSError *error){ + id userInfo = error.userInfo.mutableCopy ?: [NSMutableDictionary new]; + if (data) userInfo[PMKURLErrorFailingDataKey] = data; + if (rsp) userInfo[PMKURLErrorFailingURLResponseKey] = rsp; + error = [NSError errorWithDomain:error.domain code:error.code userInfo:userInfo]; + resolve(error); + }; + + NSStringEncoding (^stringEncoding)() = ^NSStringEncoding{ + id encodingName = [rsp textEncodingName]; + if (encodingName) { + CFStringEncoding encoding = CFStringConvertIANACharSetNameToEncoding((CFStringRef)encodingName); + if (encoding != kCFStringEncodingInvalidId) + return CFStringConvertEncodingToNSStringEncoding(encoding); + } + return NSUTF8StringEncoding; + }; + + if (urlError) { + rejecter(urlError); + } else if (![rsp isKindOfClass:[NSHTTPURLResponse class]]) { + fulfiller(data); + } else if ([rsp statusCode] < 200 || [rsp statusCode] >= 300) { + id info = @{ + NSLocalizedDescriptionKey: @"The server returned a bad HTTP response code", + NSURLErrorFailingURLStringErrorKey: rq.URL.absoluteString, + NSURLErrorFailingURLErrorKey: rq.URL + }; + id err = [NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorBadServerResponse userInfo:info]; + rejecter(err); + } else if (PMKHTTPURLResponseIsJSON(rsp)) { + // work around ever-so-common Rails workaround: https://github.com/rails/rails/issues/1742 + if ([rsp expectedContentLength] == 1 && [data isEqualToData:[NSData dataWithBytes:" " length:1]]) + return fulfiller(nil); + + NSError *err = nil; + id json = [NSJSONSerialization JSONObjectWithData:data options:PMKJSONDeserializationOptions error:&err]; + if (!err) { + fulfiller(json); + } else { + id userInfo = err.userInfo.mutableCopy; + if (data) { + NSString *string = [[NSString alloc] initWithData:data encoding:stringEncoding()]; + if (string) + userInfo[PMKURLErrorFailingStringKey] = string; + } + long long length = [rsp expectedContentLength]; + id bytes = length <= 0 ? @"" : [NSString stringWithFormat:@"%lld bytes", length]; + id fmt = @"The server claimed a %@ JSON response, but decoding failed with: %@"; + userInfo[NSLocalizedDescriptionKey] = [NSString stringWithFormat:fmt, bytes, userInfo[NSLocalizedDescriptionKey]]; + err = [NSError errorWithDomain:err.domain code:err.code userInfo:userInfo]; + rejecter(err); + } + #ifdef UIKIT_EXTERN + } else if (PMKHTTPURLResponseIsImage(rsp)) { + UIImage *image = [[UIImage alloc] initWithData:data]; + image = [[UIImage alloc] initWithCGImage:[image CGImage] scale:image.scale orientation:image.imageOrientation]; + if (image) + fulfiller(image); + else { + id info = @{ + NSLocalizedDescriptionKey: @"The server returned invalid image data", + NSURLErrorFailingURLStringErrorKey: rq.URL.absoluteString, + NSURLErrorFailingURLErrorKey: rq.URL + }; + id err = [NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorCannotDecodeContentData userInfo:info]; + rejecter(err); + } + #endif + } else if (PMKHTTPURLResponseIsText(rsp)) { + id str = [[NSString alloc] initWithData:data encoding:stringEncoding()]; + if (str) + fulfiller(str); + else { + id info = @{ + NSLocalizedDescriptionKey: @"The server returned invalid string data", + NSURLErrorFailingURLStringErrorKey: rq.URL.absoluteString, + NSURLErrorFailingURLErrorKey: rq.URL + }; + id err = [NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorCannotDecodeContentData userInfo:info]; + rejecter(err); + } + } else + fulfiller(data); + }]; + }]; + + #undef fulfiller +} + +@end diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/Foundation/NSURLConnection+Promise.swift b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/Foundation/NSURLConnection+Promise.swift new file mode 100644 index 00000000000..dc1fe39eacb --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/Foundation/NSURLConnection+Promise.swift @@ -0,0 +1,74 @@ +import Foundation +import OMGHTTPURLRQ +#if !COCOAPODS +import PromiseKit +#endif + +/** + To import the `NSURLConnection` category: + + use_frameworks! + pod "PromiseKit/Foundation" + + Or `NSURLConnection` is one of the categories imported by the umbrella pod: + + use_frameworks! + pod "PromiseKit" + + And then in your sources: + + import PromiseKit +*/ +extension NSURLConnection { + public class func GET(URL: String, query: [NSObject:AnyObject]? = nil) -> URLDataPromise { + return go(try OMGHTTPURLRQ.GET(URL, query)) + } + + public class func POST(URL: String, formData: [NSObject:AnyObject]? = nil) -> URLDataPromise { + return go(try OMGHTTPURLRQ.POST(URL, formData)) + } + + public class func POST(URL: String, JSON: [NSObject:AnyObject]) -> URLDataPromise { + return go(try OMGHTTPURLRQ.POST(URL, JSON: JSON)) + } + + public class func POST(URL: String, multipartFormData: OMGMultipartFormData) -> URLDataPromise { + return go(try OMGHTTPURLRQ.POST(URL, multipartFormData)) + } + + public class func PUT(URL: String, formData: [NSObject:AnyObject]? = nil) -> URLDataPromise { + return go(try OMGHTTPURLRQ.PUT(URL, formData)) + } + + public class func PUT(URL: String, JSON: [NSObject:AnyObject]) -> URLDataPromise { + return go(try OMGHTTPURLRQ.PUT(URL, JSON: JSON)) + } + + public class func DELETE(URL: String) -> URLDataPromise { + return go(try OMGHTTPURLRQ.DELETE(URL, nil)) + } + + public class func promise(request: NSURLRequest) -> URLDataPromise { + return go(request) + } +} + +private func go(@autoclosure body: () throws -> NSURLRequest) -> URLDataPromise { + do { + var request = try body() + + if request.valueForHTTPHeaderField("User-Agent") == nil { + let rq = request.mutableCopy() as! NSMutableURLRequest + rq.setValue(OMGUserAgent(), forHTTPHeaderField: "User-Agent") + request = rq + } + + return URLDataPromise.go(request) { completionHandler in + NSURLConnection.sendAsynchronousRequest(request, queue: Q, completionHandler: { completionHandler($1, $0, $2) }) + } + } catch { + return URLDataPromise(error: error) + } +} + +private let Q = NSOperationQueue() diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/Foundation/NSURLSession+Promise.swift b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/Foundation/NSURLSession+Promise.swift new file mode 100644 index 00000000000..4da6c2867af --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/Foundation/NSURLSession+Promise.swift @@ -0,0 +1,71 @@ +import Foundation +import OMGHTTPURLRQ +#if !COCOAPODS +import PromiseKit +#endif + +//TODO cancellation + +/** + To import the `NSURLConnection` category: + + use_frameworks! + pod "PromiseKit/Foundation" + + Or `NSURLConnection` is one of the categories imported by the umbrella pod: + + use_frameworks! + pod "PromiseKit" + + And then in your sources: + + import PromiseKit + + We provide convenience categories for the `sharedSession`, or + an instance method `promise`. If you need more complicated behavior + we recommend wrapping that usage in a Promise initializer. +*/ +extension NSURLSession { + public class func GET(URL: String, query: [NSObject: AnyObject]? = nil) -> URLDataPromise { + return start(try OMGHTTPURLRQ.GET(URL, query)) + } + + public class func POST(URL: String, formData: [NSObject: AnyObject]? = nil) -> URLDataPromise { + return start(try OMGHTTPURLRQ.POST(URL, formData)) + } + + public class func POST(URL: String, multipartFormData: OMGMultipartFormData) -> URLDataPromise { + return start(try OMGHTTPURLRQ.POST(URL, multipartFormData)) + } + + public class func PUT(URL: String) -> URLDataPromise { + return start(try OMGHTTPURLRQ.PUT(URL, nil)) + } + + public class func DELETE(URL: String) -> URLDataPromise { + return start(try OMGHTTPURLRQ.DELETE(URL, nil)) + } + + public func promise(request: NSURLRequest) -> URLDataPromise { + return start(request, session: self) + } +} + +private func start(@autoclosure body: () throws -> NSURLRequest, session: NSURLSession = NSURLSession.sharedSession()) -> URLDataPromise { + do { + var request = try body() + + if request.valueForHTTPHeaderField("User-Agent") == nil { + let rq = request.mutableCopy() as! NSMutableURLRequest + rq.setValue(OMGUserAgent(), forHTTPHeaderField: "User-Agent") + request = rq + } + + return URLDataPromise.go(request) { completionHandler in + let task = session.dataTaskWithRequest(request, completionHandler: completionHandler) + task.resume() + } + } catch { + return URLDataPromise(error: error) + } +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/Foundation/afterlife.swift b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/Foundation/afterlife.swift new file mode 100644 index 00000000000..06d5aa5c825 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/Foundation/afterlife.swift @@ -0,0 +1,29 @@ +import Foundation +#if !COCOAPODS +import PromiseKit +#endif + +/** + @return A promise that resolves when the provided object deallocates + + @warning *Important* The promise is not guarenteed to resolve immediately + when the provided object is deallocated. So you cannot write code that + depends on exact timing. +*/ +public func after(life object: NSObject) -> Promise { + var reaper = objc_getAssociatedObject(object, &handle) as? GrimReaper + if reaper == nil { + reaper = GrimReaper() + objc_setAssociatedObject(object, &handle, reaper, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) + } + return reaper!.promise +} + +private var handle: UInt8 = 0 + +private class GrimReaper: NSObject { + deinit { + fulfill() + } + let (promise, fulfill, _) = Promise.pendingPromise() +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/QuartzCore/CALayer+AnyPromise.h b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/QuartzCore/CALayer+AnyPromise.h new file mode 100644 index 00000000000..184d559cf59 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/QuartzCore/CALayer+AnyPromise.h @@ -0,0 +1,40 @@ +// +// CALayer+AnyPromise.h +// +// Created by María Patricia Montalvo Dzib on 24/11/14. +// Copyright (c) 2014 Aluxoft SCP. All rights reserved. +// + +#import +#import + +/** + To import the `CALayer` category: + + use_frameworks! + pod "PromiseKit/QuartzCore" + + Or `CALayer` is one of the categories imported by the umbrella pod: + + use_frameworks! + pod "PromiseKit" + + And then in your sources: + + #import +*/ +@interface CALayer (PromiseKit) + +/** + Add the specified animation object to the layer’s render tree. + + @return A promise that thens two parameters: + + 1. `@YES` if the animation progressed entirely to completion. + 2. The `CAAnimation` object. + + @see addAnimation:forKey +*/ +- (AnyPromise *)promiseAnimation:(CAAnimation *)animation forKey:(NSString *)key; + +@end diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/QuartzCore/CALayer+AnyPromise.m b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/QuartzCore/CALayer+AnyPromise.m new file mode 100644 index 00000000000..2a0d6aae60f --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/QuartzCore/CALayer+AnyPromise.m @@ -0,0 +1,39 @@ +// +// CALayer+PromiseKit.m +// +// Created by María Patricia Montalvo Dzib on 24/11/14. +// Copyright (c) 2014 Aluxoft SCP. All rights reserved. +// + +#import +#import "CALayer+AnyPromise.h" + + +@interface PMKCAAnimationDelegate : NSObject { +@public + PMKResolver resolve; + CAAnimation *animation; +} +@end + +@implementation PMKCAAnimationDelegate + +- (void)animationDidStop:(CAAnimation *)ignoreOrRetainCycleHappens finished:(BOOL)flag { + resolve(PMKManifold(@(flag), animation)); + animation.delegate = nil; +} + +@end + + + +@implementation CALayer (PromiseKit) + +- (AnyPromise *)promiseAnimation:(CAAnimation *)animation forKey:(NSString *)key { + PMKCAAnimationDelegate *d = animation.delegate = [PMKCAAnimationDelegate new]; + d->animation = animation; + [self addAnimation:animation forKey:key]; + return [[AnyPromise alloc] initWithResolver:&d->resolve]; +} + +@end diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/PMKAlertController.swift b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/PMKAlertController.swift new file mode 100644 index 00000000000..835b3633c48 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/PMKAlertController.swift @@ -0,0 +1,75 @@ +import UIKit +#if !COCOAPODS +import PromiseKit +#endif + +//TODO tests +//TODO NSCoding + +/** + A “promisable” UIAlertController. + + UIAlertController is not a suitable API for an extension; it has closure + handlers on its main API for each button and an extension would have to + either replace all these when the controller is presented or force you to + use an extended addAction method, which would be easy to forget part of + the time. Hence we provide a facade pattern that can be promised. + + let alert = PMKAlertController("OHAI") + let sup = alert.addActionWithTitle("SUP") + let bye = alert.addActionWithTitle("BYE") + promiseViewController(alert).then { action in + switch action { + case is sup: + //… + case is bye: + //… + } + } +*/ +public class PMKAlertController { + public var title: String? { return UIAlertController.title } + public var message: String? { return UIAlertController.message } + public var preferredStyle: UIAlertControllerStyle { return UIAlertController.preferredStyle } + public var actions: [UIAlertAction] { return UIAlertController.actions } + public var textFields: [UITextField]? { return UIAlertController.textFields } + + public required init(title: String?, message: String? = nil, preferredStyle: UIAlertControllerStyle = .Alert) { + UIAlertController = UIKit.UIAlertController(title: title, message: message, preferredStyle: preferredStyle) + } + + public func addActionWithTitle(title: String, style: UIAlertActionStyle = .Default) -> UIAlertAction { + let action = UIAlertAction(title: title, style: style) { action in + if style != UIAlertActionStyle.Cancel { + self.fulfill(action) + } else { + self.reject(Error.Cancelled) + } + } + UIAlertController.addAction(action) + return action + } + + public func addTextFieldWithConfigurationHandler(configurationHandler: ((UITextField) -> Void)?) { + UIAlertController.addTextFieldWithConfigurationHandler(configurationHandler) + } + + private let UIAlertController: UIKit.UIAlertController + private let (promise, fulfill, reject) = Promise.pendingPromise() + private var retainCycle: PMKAlertController? + + public enum Error: ErrorType { + case Cancelled + } +} + +extension UIViewController { + public func promiseViewController(vc: PMKAlertController, animated: Bool = true, completion: (() -> Void)? = nil) -> Promise { + vc.retainCycle = vc + presentViewController(vc.UIAlertController, animated: true, completion: nil) + vc.promise.always { _ -> Void in + vc.retainCycle = nil + } + return vc.promise + } +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIActionSheet+AnyPromise.h b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIActionSheet+AnyPromise.h new file mode 100644 index 00000000000..d7739fe9adf --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIActionSheet+AnyPromise.h @@ -0,0 +1,42 @@ +#import +#import + +/** + To import the `UIActionSheet` category: + + use_frameworks! + pod "PromiseKit/UIKit" + + Or `UIKit` is one of the categories imported by the umbrella pod: + + use_frameworks! + pod "PromiseKit" + + And then in your sources: + + #import +*/ +@interface UIActionSheet (PromiseKit) + +/** + Displays the action sheet originating from the specified view. + + UIActionSheet *sheet = [UIActionSheet new]; + sheet.title = @"OHAI"; + [sheet addButtonWithTitle:@"OK"]; + [sheet promiseInView:nil].then(^(NSNumber *dismissedButtonIndex){ + //… + }); + + @param view The view from which the action sheet originates. + + @warning *Important* If a cancelButtonIndex is set the promise will be *cancelled* if that button is pressed. Cancellation in PromiseKit has special behavior, see the relevant documentation for more details. + + @return A promise that fulfills with two parameters: + + 1) The index (NSNumber) of the button that was tapped to dismiss the sheet. + 2) This action sheet. +*/ +- (AnyPromise *)promiseInView:(UIView *)view; + +@end diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIActionSheet+AnyPromise.m b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIActionSheet+AnyPromise.m new file mode 100644 index 00000000000..5c8751ae47c --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIActionSheet+AnyPromise.m @@ -0,0 +1,41 @@ +#import +#import "UIActionSheet+AnyPromise.h" + + +@interface PMKActionSheetDelegate : NSObject { +@public + id retainCycle; + PMKResolver resolve; +} +@end + + +@implementation PMKActionSheetDelegate + +- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex { + if (buttonIndex == actionSheet.cancelButtonIndex) { + resolve([NSError cancelledError]); + } else { + resolve(PMKManifold(@(buttonIndex), actionSheet)); + } + retainCycle = nil; +} + +@end + + +@implementation UIActionSheet (PromiseKit) + +- (AnyPromise *)promiseInView:(UIView *)view { + PMKActionSheetDelegate *d = [PMKActionSheetDelegate new]; + d->retainCycle = self.delegate = d; + [self showInView:view]; + + if (self.numberOfButtons == 1 && self.cancelButtonIndex == 0) { + NSLog(@"PromiseKit: An action sheet is being promised with a single button that is set as the cancelButtonIndex. The promise *will* be cancelled which may result in unexpected behavior. See http://promisekit.org/PromiseKit-2.0-Released/ for cancellation documentation."); + } + + return [[AnyPromise alloc] initWithResolver:&d->resolve]; +} + +@end diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIActionSheet+Promise.swift b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIActionSheet+Promise.swift new file mode 100644 index 00000000000..3b4bf6b9b68 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIActionSheet+Promise.swift @@ -0,0 +1,59 @@ +import UIKit.UIActionSheet +#if !COCOAPODS +import PromiseKit +#endif + +/** + To import the `UIActionSheet` category: + + use_frameworks! + pod "PromiseKit/UIKit" + + Or `UIKit` is one of the categories imported by the umbrella pod: + + use_frameworks! + pod "PromiseKit" + + And then in your sources: + + import PromiseKit +*/ +extension UIActionSheet { + public func promiseInView(view: UIView) -> Promise { + let proxy = PMKActionSheetDelegate() + delegate = proxy + proxy.retainCycle = proxy + showInView(view) + + if numberOfButtons == 1 && cancelButtonIndex == 0 { + NSLog("PromiseKit: An action sheet is being promised with a single button that is set as the cancelButtonIndex. The promise *will* be cancelled which may result in unexpected behavior. See http://promisekit.org/PromiseKit-2.0-Released/ for cancellation documentation.") + } + + return proxy.promise + } + + public enum Error: CancellableErrorType { + case Cancelled + + public var cancelled: Bool { + switch self { + case .Cancelled: return true + } + } + } +} + +private class PMKActionSheetDelegate: NSObject, UIActionSheetDelegate { + let (promise, fulfill, reject) = Promise.pendingPromise() + var retainCycle: NSObject? + + @objc func actionSheet(actionSheet: UIActionSheet, didDismissWithButtonIndex buttonIndex: Int) { + defer { retainCycle = nil } + + if buttonIndex != actionSheet.cancelButtonIndex { + fulfill(buttonIndex) + } else { + reject(UIActionSheet.Error.Cancelled) + } + } +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIAlertView+AnyPromise.h b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIAlertView+AnyPromise.h new file mode 100644 index 00000000000..744e8e25bec --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIAlertView+AnyPromise.h @@ -0,0 +1,40 @@ +#import +#import + +/** + To import the `UIAlertView` category: + + use_frameworks! + pod "PromiseKit/UIKit" + + Or `UIKit` is one of the categories imported by the umbrella pod: + + use_frameworks! + pod "PromiseKit" + + And then in your sources: + + #import +*/ +@interface UIAlertView (PromiseKit) + +/** + Displays the alert view. + + UIAlertView *alert = [UIAlertView new]; + alert.title = @"OHAI"; + [alert addButtonWithTitle:@"OK"]; + [alert promise].then(^(NSNumber *dismissedButtonIndex){ + //… + }); + + @warning *Important* If a cancelButtonIndex is set the promise will be *cancelled* if that button is pressed. Cancellation in PromiseKit has special behavior, see the relevant documentation for more details. + + @return A promise the fulfills with two parameters: + + 1) The index of the button that was tapped to dismiss the alert. + 2) This alert view. +*/ +- (AnyPromise *)promise; + +@end diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIAlertView+AnyPromise.m b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIAlertView+AnyPromise.m new file mode 100644 index 00000000000..ea77443b900 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIAlertView+AnyPromise.m @@ -0,0 +1,41 @@ +#import +#import "UIAlertView+AnyPromise.h" + + +@interface PMKAlertViewDelegate : NSObject { +@public + PMKResolver resolve; + id retainCycle; +} +@end + + +@implementation PMKAlertViewDelegate + +- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex { + if (buttonIndex != alertView.cancelButtonIndex) { + resolve(PMKManifold(@(buttonIndex), alertView)); + } else { + resolve([NSError cancelledError]); + } + retainCycle = nil; +} + +@end + + +@implementation UIAlertView (PromiseKit) + +- (AnyPromise *)promise { + PMKAlertViewDelegate *d = [PMKAlertViewDelegate new]; + d->retainCycle = self.delegate = d; + [self show]; + + if (self.numberOfButtons == 1 && self.cancelButtonIndex == 0) { + NSLog(@"PromiseKit: An alert view is being promised with a single button that is set as the cancelButtonIndex. The promise *will* be cancelled which may result in unexpected behavior. See http://promisekit.org/PromiseKit-2.0-Released/ for cancellation documentation."); + } + + return [[AnyPromise alloc] initWithResolver:&d->resolve]; +} + +@end diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIAlertView+Promise.swift b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIAlertView+Promise.swift new file mode 100644 index 00000000000..1af023c4b0a --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIAlertView+Promise.swift @@ -0,0 +1,58 @@ +import Foundation +import UIKit.UIAlertView +#if !COCOAPODS +import PromiseKit +#endif + +/** + To import the `UIActionSheet` category: + + use_frameworks! + pod "PromiseKit/UIKit" + + Or `UIKit` is one of the categories imported by the umbrella pod: + + use_frameworks! + pod "PromiseKit" + + And then in your sources: + + import PromiseKit +*/ +extension UIAlertView { + public func promise() -> Promise { + let proxy = PMKAlertViewDelegate() + delegate = proxy + proxy.retainCycle = proxy + show() + + if numberOfButtons == 1 && cancelButtonIndex == 0 { + NSLog("PromiseKit: An alert view is being promised with a single button that is set as the cancelButtonIndex. The promise *will* be cancelled which may result in unexpected behavior. See http://promisekit.org/PromiseKit-2.0-Released/ for cancellation documentation.") + } + + return proxy.promise + } + + public enum Error: CancellableErrorType { + case Cancelled + + public var cancelled: Bool { + switch self { + case .Cancelled: return true + } + } + } +} + +private class PMKAlertViewDelegate: NSObject, UIAlertViewDelegate { + let (promise, fulfill, reject) = Promise.pendingPromise() + var retainCycle: NSObject? + + @objc func alertView(alertView: UIAlertView, didDismissWithButtonIndex buttonIndex: Int) { + if buttonIndex != alertView.cancelButtonIndex { + fulfill(buttonIndex) + } else { + reject(UIAlertView.Error.Cancelled) + } + } +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIView+AnyPromise.h b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIView+AnyPromise.h new file mode 100644 index 00000000000..5f019c78fb9 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIView+AnyPromise.h @@ -0,0 +1,80 @@ +#import +#import + +// Created by Masafumi Yoshida on 2014/07/11. +// Copyright (c) 2014年 DeNA. All rights reserved. + +/** + To import the `UIView` category: + + use_frameworks! + pod "PromiseKit/UIKit" + + Or `UIKit` is one of the categories imported by the umbrella pod: + + use_frameworks! + pod "PromiseKit" + + And then in your sources: + + #import +*/ +@interface UIView (PromiseKit) + +/** + Animate changes to one or more views using the specified duration. + + @param duration The total duration of the animations, measured in + seconds. If you specify a negative value or 0, the changes are made + without animating them. + + @param animations A block object containing the changes to commit to the + views. + + @return A promise that fulfills with a boolean NSNumber indicating + whether or not the animations actually finished. +*/ ++ (AnyPromise *)promiseWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations; + +/** + Animate changes to one or more views using the specified duration, delay, + options, and completion handler. + + @param duration The total duration of the animations, measured in + seconds. If you specify a negative value or 0, the changes are made + without animating them. + + @param delay The amount of time (measured in seconds) to wait before + beginning the animations. Specify a value of 0 to begin the animations + immediately. + + @param options A mask of options indicating how you want to perform the + animations. For a list of valid constants, see UIViewAnimationOptions. + + @param animations A block object containing the changes to commit to the + views. + + @return A promise that fulfills with a boolean NSNumber indicating + whether or not the animations actually finished. +*/ ++ (AnyPromise *)promiseWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations; + +/** + Performs a view animation using a timing curve corresponding to the + motion of a physical spring. + + @return A promise that fulfills with a boolean NSNumber indicating + whether or not the animations actually finished. +*/ ++ (AnyPromise *)promiseWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay usingSpringWithDamping:(CGFloat)dampingRatio initialSpringVelocity:(CGFloat)velocity options:(UIViewAnimationOptions)options animations:(void (^)(void))animations; + +/** + Creates an animation block object that can be used to set up + keyframe-based animations for the current view. + + @return A promise that fulfills with a boolean NSNumber indicating + whether or not the animations actually finished. +*/ ++ (AnyPromise *)promiseWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewKeyframeAnimationOptions)options keyframeAnimations:(void (^)(void))animations; + +@end diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIView+AnyPromise.m b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIView+AnyPromise.m new file mode 100644 index 00000000000..04ee940358c --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIView+AnyPromise.m @@ -0,0 +1,64 @@ +// +// UIView+PromiseKit_UIAnimation.m +// YahooDenaStudy +// +// Created by Masafumi Yoshida on 2014/07/11. +// Copyright (c) 2014年 DeNA. All rights reserved. +// + +#import +#import "UIView+AnyPromise.h" + + +#define CopyPasta \ + NSAssert([NSThread isMainThread], @"UIKit animation must be performed on the main thread"); \ + \ + if (![NSThread isMainThread]) { \ + id error = [NSError errorWithDomain:PMKErrorDomain code:PMKInvalidUsageError userInfo:@{NSLocalizedDescriptionKey: @"Animation was attempted on a background thread"}]; \ + return [AnyPromise promiseWithValue:error]; \ + } \ + \ + PMKResolver resolve = nil; \ + AnyPromise *promise = [[AnyPromise alloc] initWithResolver:&resolve]; + + +@implementation UIView (PromiseKit) + ++ (AnyPromise *)promiseWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations { + return [self promiseWithDuration:duration delay:0 options:0 animations:animations]; +} + ++ (AnyPromise *)promiseWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void(^)(void))animations +{ + CopyPasta; + + [UIView animateWithDuration:duration delay:delay options:options animations:animations completion:^(BOOL finished) { + resolve(@(finished)); + }]; + + return promise; +} + ++ (AnyPromise *)promiseWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay usingSpringWithDamping:(CGFloat)dampingRatio initialSpringVelocity:(CGFloat)velocity options:(UIViewAnimationOptions)options animations:(void(^)(void))animations +{ + CopyPasta; + + [UIView animateWithDuration:duration delay:delay usingSpringWithDamping:dampingRatio initialSpringVelocity:velocity options:options animations:animations completion:^(BOOL finished) { + resolve(@(finished)); + }]; + + return promise; +} + ++ (AnyPromise *)promiseWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewKeyframeAnimationOptions)options keyframeAnimations:(void(^)(void))animations +{ + CopyPasta; + + [UIView animateKeyframesWithDuration:duration delay:delay options:options animations:animations completion:^(BOOL finished) { + resolve(@(finished)); + }]; + + return promise; +} + +@end diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIView+Promise.swift b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIView+Promise.swift new file mode 100644 index 00000000000..387fe61978a --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIView+Promise.swift @@ -0,0 +1,48 @@ +import UIKit.UIView +#if !COCOAPODS +import PromiseKit +#endif + +/** + To import the `UIView` category: + + use_frameworks! + pod "PromiseKit/UIKit" + + Or `UIKit` is one of the categories imported by the umbrella pod: + + use_frameworks! + pod "PromiseKit" + + And then in your sources: + + import PromiseKit +*/ +extension UIView { + /** + Animate changes to one or more views using the specified duration, delay, + options, and completion handler. + + @param duration The total duration of the animations, measured in + seconds. If you specify a negative value or 0, the changes are made + without animating them. + + @param delay The amount of time (measured in seconds) to wait before + beginning the animations. Specify a value of 0 to begin the animations + immediately. + + @param options A mask of options indicating how you want to perform the + animations. For a list of valid constants, see UIViewAnimationOptions. + + @param animations A block object containing the changes to commit to the + views. + + @return A promise that fulfills with a boolean NSNumber indicating + whether or not the animations actually finished. + */ + public class func animate(duration duration: NSTimeInterval = 0.3, delay: NSTimeInterval = 0, options: UIViewAnimationOptions = UIViewAnimationOptions(), animations: () -> Void) -> Promise { + return Promise { fulfill, _ in + self.animateWithDuration(duration, delay: delay, options: options, animations: animations, completion: fulfill) + } + } +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIViewController+AnyPromise.h b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIViewController+AnyPromise.h new file mode 100644 index 00000000000..4508d0c9445 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIViewController+AnyPromise.h @@ -0,0 +1,90 @@ +#import +#import + +/** + To import the `UIViewController` category: + + use_frameworks! + pod "PromiseKit/UIKit" + + Or `UIKit` is one of the categories imported by the umbrella pod: + + use_frameworks! + pod "PromiseKit" + + And then in your sources: + + #import +*/ +@interface UIViewController (PromiseKit) + +/** + Presents a view controller modally. + + If the view controller is one of the following: + + - MFMailComposeViewController + - MFMessageComposeViewController + - UIImagePickerController + - SLComposeViewController + + Then PromiseKit presents the view controller returning a promise that is + resolved as per the documentation for those classes. Eg. if you present a + `UIImagePickerController` the view controller will be presented for you + and the returned promise will resolve with the media the user selected. + + [self promiseViewController:[MFMailComposeViewController new] animated:YES completion:nil].then(^{ + //… + }); + + Otherwise PromiseKit expects your view controller to implement a + `promise` property. This promise will be returned from this method and + presentation and dismissal of the presented view controller will be + managed for you. + + @interface MyViewController: UIViewController + @property (readonly) AnyPromise *promise; + @end + + @implementation MyViewController { + PMKResolver resolve; + } + + - (void)viewDidLoad { + _promise = [AnyPromise promiseWithResolver:&resolve]; + } + + - (void)later { + resolve(@"some fulfilled value"); + } + + @end + + + + [self promiseViewController:[MyViewController new] aniamted:YES completion:nil].then(^(id value){ + // value == @"some fulfilled value" + }); + + @return A promise that can be resolved by the presented view controller. +*/ +- (AnyPromise *)promiseViewController:(UIViewController *)vc animated:(BOOL)animated completion:(void (^)(void))block; + +@end + + + +@interface UIViewController (PMKUnavailable) + +#define PMKRationale \ + "The promiseViewController system has been rennovated: the fullfil and " \ + "reject category methods have been removed due to runtime safety " \ + "concerns and instead you should implement a -promise property on your " \ + "view controller subclass. @see promiseViewController:animated:completion:" + +- (void)fulfill:(id)value __attribute__((unavailable(PMKRationale))); +- (void)reject:(NSError *)value __attribute__((unavailable(PMKRationale))); + +#undef PMKRationale + +@end diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIViewController+AnyPromise.m b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIViewController+AnyPromise.m new file mode 100644 index 00000000000..3dede063bfc --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIViewController+AnyPromise.m @@ -0,0 +1,130 @@ +#import +#import +#import +#import "UIViewController+AnyPromise.h" + +@interface PMKGenericDelegate : NSObject { +@public + PMKResolver resolve; +} ++ (instancetype)delegateWithPromise:(AnyPromise **)promise; +@end + + +@implementation UIViewController (PromiseKit) + +- (AnyPromise *)promiseViewController:(UIViewController *)vc animated:(BOOL)animated completion:(void (^)(void))block +{ + id vc2present = vc; + AnyPromise *promise = nil; + + if ([vc isKindOfClass:NSClassFromString(@"MFMailComposeViewController")]) { + PMKGenericDelegate *delegate = [PMKGenericDelegate delegateWithPromise:&promise]; + [vc setValue:delegate forKey:@"mailComposeDelegate"]; + } + else if ([vc isKindOfClass:NSClassFromString(@"MFMessageComposeViewController")]) { + PMKGenericDelegate *delegate = [PMKGenericDelegate delegateWithPromise:&promise]; + [vc setValue:delegate forKey:@"messageComposeDelegate"]; + } + else if ([vc isKindOfClass:NSClassFromString(@"UIImagePickerController")]) { + PMKGenericDelegate *delegate = [PMKGenericDelegate delegateWithPromise:&promise]; + ((UIImagePickerController *)vc).delegate = delegate; + } + else if ([vc isKindOfClass:NSClassFromString(@"SLComposeViewController")]) { + PMKResolver resolve; + promise = [[AnyPromise alloc] initWithResolver:&resolve]; + [vc setValue:^(NSInteger result){ + if (result == 0) { + resolve([NSError cancelledError]); + } else { + resolve(@(result)); + } + } forKey:@"completionHandler"]; + } + else if ([vc isKindOfClass:[UINavigationController class]]) + vc = [(id)vc viewControllers].firstObject; + + if (!vc) { + id userInfo = @{NSLocalizedDescriptionKey: @"nil or effective nil passed to promiseViewController"}; + id err = [NSError errorWithDomain:PMKErrorDomain code:PMKInvalidUsageError userInfo:userInfo]; + return [AnyPromise promiseWithValue:err]; + } + + if (!promise) { + if (![vc respondsToSelector:NSSelectorFromString(@"promise")]) { + id userInfo = @{NSLocalizedDescriptionKey: @"ViewController is not promisable"}; + id err = [NSError errorWithDomain:PMKErrorDomain code:PMKInvalidUsageError userInfo:userInfo]; + return [AnyPromise promiseWithValue:err]; + } + + promise = [vc valueForKey:@"promise"]; + + if (![promise isKindOfClass:[AnyPromise class]]) { + id userInfo = @{NSLocalizedDescriptionKey: @"The promise property is nil or not of type AnyPromise"}; + id err = [NSError errorWithDomain:PMKErrorDomain code:PMKInvalidUsageError userInfo:userInfo]; + return [AnyPromise promiseWithValue:err]; + } + } + + if (!promise.pending) + return promise; + + [self presentViewController:vc2present animated:animated completion:block]; + + promise.finally(^{ + //TODO can we be more specific? + [self dismissViewControllerAnimated:animated completion:nil]; + }); + + return promise; +} + +@end + + + +@implementation PMKGenericDelegate { + id retainCycle; +} + ++ (instancetype)delegateWithPromise:(AnyPromise **)promise; { + PMKGenericDelegate *d = [PMKGenericDelegate new]; + d->retainCycle = d; + *promise = [[AnyPromise alloc] initWithResolver:&d->resolve]; + return d; +} + +- (void)mailComposeController:(id)controller didFinishWithResult:(int)result error:(NSError *)error { + if (error != nil) { + resolve(error); + } else if (result == 0) { + resolve([NSError cancelledError]); + } else { + resolve(@(result)); + } + retainCycle = nil; +} + +- (void)messageComposeViewController:(id)controller didFinishWithResult:(int)result { + if (result == 2) { + id userInfo = @{NSLocalizedDescriptionKey: @"The user’s attempt to save or send the message was unsuccessful."}; + id error = [NSError errorWithDomain:PMKErrorDomain code:PMKOperationFailed userInfo:userInfo]; + resolve(error); + } else { + resolve(@(result)); + } + retainCycle = nil; +} + +- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { + id img = info[UIImagePickerControllerEditedImage] ?: info[UIImagePickerControllerOriginalImage]; + resolve(PMKManifold(img, info)); + retainCycle = nil; +} + +- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker { + resolve([NSError cancelledError]); + retainCycle = nil; +} + +@end diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIViewController+Promise.swift b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIViewController+Promise.swift new file mode 100644 index 00000000000..1277560d571 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Categories/UIKit/UIViewController+Promise.swift @@ -0,0 +1,136 @@ +import Foundation.NSError +import UIKit +#if !COCOAPODS +import PromiseKit +#endif + +/** + To import this `UIViewController` category: + + use_frameworks! + pod "PromiseKit/UIKit" + + Or `UIKit` is one of the categories imported by the umbrella pod: + + use_frameworks! + pod "PromiseKit" + + And then in your sources: + + import PromiseKit +*/ +extension UIViewController { + + public enum Error: ErrorType { + case NavigationControllerEmpty + case NoImageFound + case NotPromisable + case NotGenericallyPromisable + case NilPromisable + } + + public func promiseViewController(vc: UIViewController, animated: Bool = true, completion: (() -> Void)? = nil) -> Promise { + + let p: Promise = promise(vc) + if p.pending { + presentViewController(vc, animated: animated, completion: completion) + p.always { + self.dismissViewControllerAnimated(animated, completion: nil) + } + } + + return p + } + + public func promiseViewController(nc: UINavigationController, animated: Bool = true, completion:(()->Void)? = nil) -> Promise { + if let vc = nc.viewControllers.first { + let p: Promise = promise(vc) + if p.pending { + presentViewController(nc, animated: animated, completion: completion) + p.always { + self.dismissViewControllerAnimated(animated, completion: nil) + } + } + return p + } else { + return Promise(error: Error.NavigationControllerEmpty) + } + } + + public func promiseViewController(vc: UIImagePickerController, animated: Bool = true, completion: (() -> Void)? = nil) -> Promise { + let proxy = UIImagePickerControllerProxy() + vc.delegate = proxy + vc.mediaTypes = ["public.image"] // this promise can only resolve with a UIImage + presentViewController(vc, animated: animated, completion: completion) + return proxy.promise.then(on: zalgo) { info -> UIImage in + if let img = info[UIImagePickerControllerEditedImage] as? UIImage { + return img + } + if let img = info[UIImagePickerControllerOriginalImage] as? UIImage { + return img + } + throw Error.NoImageFound + }.always { + self.dismissViewControllerAnimated(animated, completion: nil) + } + } +} + +@objc public protocol Promisable { + /** + Provide a promise for promiseViewController here. + + The resulting property must be annotated with @objc. + + Obviously return a Promise. There is an issue with generics and Swift and + protocols currently so we couldn't specify that. + */ + var promise: AnyObject! { get } +} + +private func promise(vc: UIViewController) -> Promise { + if !vc.conformsToProtocol(Promisable) { + return Promise(error: UIViewController.Error.NotPromisable) + } else if let promise = vc.valueForKeyPath("promise") as? Promise { + return promise + } else if let _: AnyObject = vc.valueForKeyPath("promise") { + return Promise(error: UIViewController.Error.NotGenericallyPromisable) + } else { + return Promise(error: UIViewController.Error.NilPromisable) + } +} + + +// internal scope because used by ALAssetsLibrary extension +@objc class UIImagePickerControllerProxy: NSObject, UIImagePickerControllerDelegate, UINavigationControllerDelegate { + let (promise, fulfill, reject) = Promise<[NSObject : AnyObject]>.pendingPromise() + var retainCycle: AnyObject? + + required override init() { + super.init() + retainCycle = self + } + + func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { + fulfill(info) + retainCycle = nil + } + + func imagePickerControllerDidCancel(picker: UIImagePickerController) { + reject(UIImagePickerController.Error.Cancelled) + retainCycle = nil + } +} + + +extension UIImagePickerController { + public enum Error: CancellableErrorType { + case Cancelled + + public var cancelled: Bool { + switch self { + case .Cancelled: return true + } + } + } +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/README.markdown b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/README.markdown new file mode 100644 index 00000000000..a12107caf98 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/README.markdown @@ -0,0 +1,120 @@ +![PromiseKit](http://methylblue.com/junk/PMKBanner.png) + +Modern development is highly asynchronous: isn’t it about time we had tools that made programming asynchronously powerful, easy and delightful? + +```swift +UIApplication.sharedApplication().networkActivityIndicatorVisible = true + +when(fetchImage(), getLocation()).then { image, location in + self.imageView.image = image; + self.label.text = "Buy your cat a house in \(location)" +}.always { + UIApplication.sharedApplication().networkActivityIndicatorVisible = false +}.error { error in + UIAlertView(…).show() +} +``` + +PromiseKit is a thoughtful and complete implementation of promises for iOS and OS X with first-class support for **both** Objective-C *and* Swift. + +[![Join the chat at https://gitter.im/mxcl/PromiseKit](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/mxcl/PromiseKit?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) ![](https://img.shields.io/cocoapods/v/PromiseKit.svg?label=Current%20Release) [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg)](https://github.com/Carthage/Carthage) + + +# Which PromiseKit Should I Use? + +If you are writing a library, **use PromiseKit 1.6**. This is because PromiseKit > 2 breaks everytime Swift changes. While Swift is in flux it is not feasible to depend on a library that will break every time Xcode updates. + +If you are making an app then PromiseKit 3 is the best PromiseKit, you may have to make some fixes when Xcode updates, but probably you will be OK as long as you update PromiseKit when Xcode updates. + +PromiseKit 1 and 3 can be installed in parallel if necessary, but CocoaPods will not support this. + +Once Swift becomes ABI or API stable we can all just move to the latest PromiseKit. + +Thus we intend to support PromiseKit 1.x for longer than expected. + + +# PromiseKit 3 + +In Swift 2.0 `catch` and `defer` became reserved keywords mandating we rename our functions with these names. This forced a major semantic version change on PromiseKit and thus we took the opportunity to make other minor (source compatability breaking) improvements. + +Thus if you cannot afford to adapt to PromiseKit 3 but still want to use Xcode-7.0/Swift-2.0 we provide a [minimal changes branch] where `catch` and `defer` are renamed `catch_` and `defer_` and all other changes are the bare minimum to make PromiseKit 2 compile against Swift 2. + +If you still are using Xcode 6 and Swift 1.2 then use PromiseKit 2. + +[minimal changes branch]: https://github.com/mxcl/PromiseKit/tree/swift-2.0-minimal-changes + +# PromiseKit 2 + +PromiseKit 2 contains many interesting and important additions. Check out our our [release announcement](http://promisekit.org/PromiseKit-2.0-Released/) for full details. + +# PromiseKit 1 + +The original, nice to use with Objective-C, less nice to use with Swift, hence PromiseKit 2. + + +# How To Get Started + +* Check out the complete, comprehensive [PromiseKit documentation](http://promisekit.org). +* Read the [API documentation](http://cocoadocs.org/docsets/PromiseKit/), (note the documentation is not 100% currently as CocoaDocs is not good with Swift, you may have better luck reading the comments in the sources). +* [Integrate](http://promisekit.org/getting-started) promises into your existing projects. + +## Quick Start Guide + +### CocoaPods + +```ruby +use_frameworks! + +pod "PromiseKit", "~> 2.0" +``` + +### Carthage +```ruby +github "mxcl/PromiseKit" ~> 2.0 +``` + +*Note*: In order to avoid linking nearly all system frameworks with PromiseKit, the convenience categories have not been included with the Carthage framework . You must manually copy the categories you need in from the Carthage checkout. + +### Standalone Distributions + +* [iOS 8 & OS X 10.9 Frameworks](https://github.com/mxcl/PromiseKit/releases/download/2.2.2/PromiseKit-2.2.2.zip) (Binaries) + +*Please note*, the preferred way to integrate PromiseKit is CocoaPods or Carthage. + +### iOS 7 And Below + +Neither CocoaPods or Carthage will install PromiseKit 2 for an iOS 7 target. Your options are: + + 1. `pod "PromiseKit", "~> 1.5"` †‡ + 2. Use our [iOS 7 EZ-Bake](https://github.com/PromiseKit/EZiOS7) + 3. Download our pre-built static framework (coming soon!) + +† There is no Swift support with PromiseKit 1.x installed via CocoaPods.
‡ PromiseKit 1.x will work as far back as iOS 5 if required. + + +# Donations + +PromiseKit is hundreds of hours of work almost completely by just me: [Max Howell](https://twitter.com/mxcl). I thoroughly enjoyed making PromiseKit, but nevertheless if you have found it useful then your bitcoin will give me a warm fuzzy feeling from my head right down to my toes: 1JDbV5zuym3jFw4kBCc5Z758maUD8e4dKR. + + +# License + +Copyright 2015, Max Howell; + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/AnyPromise+Private.h b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/AnyPromise+Private.h new file mode 100644 index 00000000000..77376cc1c8c --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/AnyPromise+Private.h @@ -0,0 +1,47 @@ +@import Foundation.NSError; +@import Foundation.NSPointerArray; + +#if TARGET_OS_IPHONE + #define NSPointerArrayMake(N) ({ \ + NSPointerArray *aa = [NSPointerArray strongObjectsPointerArray]; \ + aa.count = N; \ + aa; \ + }) +#else + static inline NSPointerArray * __nonnull NSPointerArrayMake(NSUInteger count) { + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wdeprecated-declarations" + NSPointerArray *aa = [[NSPointerArray class] respondsToSelector:@selector(strongObjectsPointerArray)] + ? [NSPointerArray strongObjectsPointerArray] + : [NSPointerArray pointerArrayWithStrongObjects]; + #pragma clang diagnostic pop + aa.count = count; + return aa; + } +#endif + +#define IsError(o) [o isKindOfClass:[NSError class]] +#define IsPromise(o) [o isKindOfClass:[AnyPromise class]] + +#import "AnyPromise.h" + +@interface AnyPromise (Swift) +- (void)pipe:(void (^ __nonnull)(id __nonnull))body; +- (AnyPromise * __nonnull)initWithBridge:(void (^ __nonnull)(PMKResolver __nonnull))resolver; +@end + +extern NSError * __nullable PMKProcessUnhandledException(id __nonnull thrown); + +// TODO really this is not valid, we should instead nest the errors with NSUnderlyingError +// since a special error subclass may be being used and we may not set it up correctly +// with our copy +#define NSErrorSupplement(_err, supplements) ({ \ + NSError *err = _err; \ + id userInfo = err.userInfo.mutableCopy ?: [NSMutableArray new]; \ + [userInfo addEntriesFromDictionary:supplements]; \ + [[[err class] alloc] initWithDomain:err.domain code:err.code userInfo:userInfo]; \ +}) + +@interface NSError (PMKUnhandledErrorHandler) +- (void)pmk_consume; +@end diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/AnyPromise.h b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/AnyPromise.h new file mode 100644 index 00000000000..ec224bb1208 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/AnyPromise.h @@ -0,0 +1,268 @@ +#import +#import +#import +#import "Umbrella.h" + +typedef void (^PMKResolver)(id __nullable); + +typedef NS_ENUM(NSInteger, PMKCatchPolicy) { + PMKCatchPolicyAllErrors, + PMKCatchPolicyAllErrorsExceptCancellation +}; + + +/** + @see AnyPromise.swift +*/ +@interface AnyPromise (objc) + +/** + The provided block is executed when its receiver is resolved. + + If you provide a block that takes a parameter, the value of the receiver will be passed as that parameter. + + @param block The block that is executed when the receiver is resolved. + + [NSURLConnection GET:url].then(^(NSData *data){ + // do something with data + }); + + @return A new promise that is resolved with the value returned from the provided block. For example: + + [NSURLConnection GET:url].then(^(NSData *data){ + return data.length; + }).then(^(NSNumber *number){ + //… + }); + + @warning *Important* The block passed to `then` may take zero, one, two or three arguments, and return an object or return nothing. This flexibility is why the method signature for then is `id`, which means you will not get completion for the block parameter, and must type it yourself. It is safe to type any block syntax here, so to start with try just: `^{}`. + + @warning *Important* If an exception is thrown inside your block, or you return an `NSError` object the next `Promise` will be rejected. See `catch` for documentation on error handling. + + @warning *Important* `then` is always executed on the main queue. + + @see thenOn + @see thenInBackground +*/ +- (AnyPromise * __nonnull (^ __nonnull)(id __nonnull))then; + + +/** + The provided block is executed on the default queue when the receiver is fulfilled. + + This method is provided as a convenience for `thenOn`. + + @see then + @see thenOn +*/ +- (AnyPromise * __nonnull(^ __nonnull)(id __nonnull))thenInBackground; + +/** + The provided block is executed on the dispatch queue of your choice when the receiver is fulfilled. + + @see then + @see thenInBackground +*/ +- (AnyPromise * __nonnull(^ __nonnull)(dispatch_queue_t __nonnull, id __nonnull))thenOn; + +#ifndef __cplusplus +/** + The provided block is executed when the receiver is rejected. + + Provide a block of form `^(NSError *){}` or simply `^{}`. The parameter has type `id` to give you the freedom to choose either. + + The provided block always runs on the main queue. + + @warning *Note* Cancellation errors are not caught. + + @warning *Note* Since catch is a c++ keyword, this method is not availble in Objective-C++ files. Instead use catchWithPolicy. + + @see catchWithPolicy +*/ +- (AnyPromise * __nonnull(^ __nonnull)(id __nonnull))catch; +#endif + +/** + The provided block is executed when the receiver is rejected with the specified policy. + + @param policy The policy with which to catch. Either for all errors, or all errors *except* cancellation errors. + + @see catch +*/ +- (AnyPromise * __nonnull(^ __nonnull)(PMKCatchPolicy, id __nonnull))catchWithPolicy; + +/** + The provided block is executed when the receiver is resolved. + + The provided block always runs on the main queue. + + @see finallyOn +*/ +- (AnyPromise * __nonnull(^ __nonnull)(dispatch_block_t __nonnull))finally; + +/** + The provided block is executed on the dispatch queue of your choice when the receiver is resolved. + + @see finally + */ +- (AnyPromise * __nonnull(^ __nonnull)(dispatch_queue_t __nonnull, dispatch_block_t __nonnull))finallyOn; + +/** + The value of the asynchronous task this promise represents. + + A promise has `nil` value if the asynchronous task it represents has not + finished. If the value is `nil` the promise is still `pending`. + + @warning *Note* Our Swift variant’s value property returns nil if the + promise is rejected where AnyPromise will return the error object. This + fits with the pattern where AnyPromise is not strictly typed and is more + dynamic, but you should be aware of the distinction. + + @return If `resolved`, the object that was used to resolve this promise; + if `pending`, nil. +*/ +- (id __nullable)value; + +/** + Creates a resolved promise. + + When developing your own promise systems, it is ocassionally useful to be able to return an already resolved promise. + + @param value The value with which to resolve this promise. Passing an `NSError` will cause the promise to be rejected, otherwise the promise will be fulfilled. + + @return A resolved promise. +*/ ++ (instancetype __nonnull)promiseWithValue:(id __nullable)value; + +/** + Create a new promise that resolves with the provided block. + + Use this method when wrapping asynchronous code that does *not* use + promises so that this code can be used in promise chains. + + If `resolve` is called with an `NSError` object, the promise is + rejected, otherwise the promise is fulfilled. + + Don’t use this method if you already have promises! Instead, just + return your promise. + + Should you need to fulfill a promise but have no sensical value to use: + your promise is a `void` promise: fulfill with `nil`. + + The block you pass is executed immediately on the calling thread. + + @param block The provided block is immediately executed, inside the block + call `resolve` to resolve this promise and cause any attached handlers to + execute. If you are wrapping a delegate-based system, we recommend + instead to use: promiseWithResolver: + + @return A new promise. + + @warning *Important* Resolving a promise with `nil` fulfills it. + + @see http://promisekit.org/sealing-your-own-promises/ + @see http://promisekit.org/wrapping-delegation/ +*/ ++ (instancetype __nonnull)promiseWithResolverBlock:(void (^ __nonnull)(PMKResolver __nonnull resolve))resolverBlock; + +/** + Create a new promise with an associated resolver. + + Use this method when wrapping asynchronous code that does *not* use + promises so that this code can be used in promise chains. Generally, + prefer resolverWithBlock: as the resulting code is more elegant. + + PMKResolver resolve; + AnyPromise *promise = [AnyPromise promiseWithResolver:&resolve]; + + // later + resolve(@"foo"); + + @param resolver A reference to a block pointer of PMKResolver type. + You can then call your resolver to resolve this promise. + + @return A new promise. + + @warning *Important* The resolver strongly retains the promise. + + @see promiseWithResolverBlock: +*/ +- (instancetype __nonnull)initWithResolver:(PMKResolver __strong __nonnull * __nonnull)resolver; + +@end + + + +@interface AnyPromise (Unavailable) + +- (instancetype __nonnull)init __attribute__((unavailable("It is illegal to create an unresolvable promise."))); ++ (instancetype __nonnull)new __attribute__((unavailable("It is illegal to create an unresolvable promise."))); + +@end + + + +typedef void (^PMKAdapter)(id __nullable, NSError * __nullable); +typedef void (^PMKIntegerAdapter)(NSInteger, NSError * __nullable); +typedef void (^PMKBooleanAdapter)(BOOL, NSError * __nullable); + +@interface AnyPromise (Adapters) + +/** + Create a new promise by adapting an existing asynchronous system. + + The pattern of a completion block that passes two parameters, the first + the result and the second an `NSError` object is so common that we + provide this convenience adapter to make wrapping such systems more + elegant. + + return [PMKPromise promiseWithAdapter:^(PMKAdapter adapter){ + PFQuery *query = [PFQuery …]; + [query findObjectsInBackgroundWithBlock:adapter]; + }]; + + @warning *Important* If both parameters are nil, the promise fulfills, + if both are non-nil the promise rejects. This is per the convention. + + @see http://promisekit.org/sealing-your-own-promises/ + */ ++ (instancetype __nonnull)promiseWithAdapterBlock:(void (^ __nonnull)(PMKAdapter __nonnull adapter))block; + +/** + Create a new promise by adapting an existing asynchronous system. + + Adapts asynchronous systems that complete with `^(NSInteger, NSError *)`. + NSInteger will cast to enums provided the enum has been wrapped with + `NS_ENUM`. All of Apple’s enums are, so if you find one that hasn’t you + may need to make a pull-request. + + @see promiseWithAdapter + */ ++ (instancetype __nonnull)promiseWithIntegerAdapterBlock:(void (^ __nonnull)(PMKIntegerAdapter __nonnull adapter))block; + +/** + Create a new promise by adapting an existing asynchronous system. + + Adapts asynchronous systems that complete with `^(BOOL, NSError *)`. + + @see promiseWithAdapter + */ ++ (instancetype __nonnull)promiseWithBooleanAdapterBlock:(void (^ __nonnull)(PMKBooleanAdapter __nonnull adapter))block; + +@end + + + +/** + Whenever resolving a promise you may resolve with a tuple, eg. + returning from a `then` or `catch` handler or resolving a new promise. + + Consumers of your Promise are not compelled to consume any arguments and + in fact will often only consume the first parameter. Thus ensure the + order of parameters is: from most-important to least-important. + + Currently PromiseKit limits you to THREE parameters to the manifold. +*/ +#define PMKManifold(...) __PMKManifold(__VA_ARGS__, 3, 2, 1) +#define __PMKManifold(_1, _2, _3, N, ...) __PMKArrayWithCount(N, _1, _2, _3) +extern id __nonnull __PMKArrayWithCount(NSUInteger, ...); diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/AnyPromise.m b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/AnyPromise.m new file mode 100644 index 00000000000..bcda12caba8 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/AnyPromise.m @@ -0,0 +1,154 @@ +#import "AnyPromise.h" +#import "AnyPromise+Private.h" +@import Foundation.NSKeyValueCoding; +#import "PMKCallVariadicBlock.m" + +NSString *const PMKErrorDomain = @"PMKErrorDomain"; + + +@implementation AnyPromise (objc) + +- (instancetype)initWithResolver:(PMKResolver __strong *)resolver { + return [self initWithBridge:^(PMKResolver resolve){ + *resolver = resolve; + }]; +} + ++ (instancetype)promiseWithResolverBlock:(void (^)(PMKResolver))resolveBlock { + return [[self alloc] initWithBridge:resolveBlock]; +} + ++ (instancetype)promiseWithValue:(id)value { + return [[self alloc] initWithBridge:^(PMKResolver resolve){ + resolve(value); + }]; +} + +static inline AnyPromise *AnyPromiseWhen(AnyPromise *when, void(^then)(id, PMKResolver)) { + return [[AnyPromise alloc] initWithBridge:^(PMKResolver resolve){ + [when pipe:^(id obj){ + then(obj, resolve); + }]; + }]; +} + +static inline AnyPromise *__then(AnyPromise *self, dispatch_queue_t queue, id block) { + return AnyPromiseWhen(self, ^(id obj, PMKResolver resolve) { + if (IsError(obj)) { + resolve(obj); + } else dispatch_async(queue, ^{ + resolve(PMKCallVariadicBlock(block, obj)); + }); + }); +} + +- (AnyPromise *(^)(id))then { + return ^(id block) { + return __then(self, dispatch_get_main_queue(), block); + }; +} + +- (AnyPromise *(^)(dispatch_queue_t, id))thenOn { + return ^(dispatch_queue_t queue, id block) { + return __then(self, queue, block); + }; +} + +- (AnyPromise *(^)(id))thenInBackground { + return ^(id block) { + return __then(self, dispatch_get_global_queue(0, 0), block); + }; +} + +static inline AnyPromise *__catch(AnyPromise *self, BOOL includeCancellation, id block) { + return AnyPromiseWhen(self, ^(id obj, PMKResolver resolve) { + dispatch_async(dispatch_get_main_queue(), ^{ + if (IsError(obj) && (includeCancellation || ![obj cancelled])) { + [obj pmk_consume]; + resolve(PMKCallVariadicBlock(block, obj)); + } else { + resolve(obj); + } + }); + }); +} + +- (AnyPromise *(^)(id))catch { + return ^(id block) { + return __catch(self, NO, block); + }; +} + +- (AnyPromise *(^)(PMKCatchPolicy, id))catchWithPolicy { + return ^(PMKCatchPolicy policy, id block) { + return __catch(self, policy == PMKCatchPolicyAllErrors, block); + }; +} + +static inline AnyPromise *__finally(AnyPromise *self, dispatch_queue_t queue, dispatch_block_t block) { + return AnyPromiseWhen(self, ^(id obj, PMKResolver resolve) { + dispatch_async(queue, ^{ + block(); + resolve(obj); + }); + }); +} + +- (AnyPromise *(^)(dispatch_block_t))finally { + return ^(dispatch_block_t block) { + return __finally(self, dispatch_get_main_queue(), block); + }; +} + +- (AnyPromise *(^)(dispatch_queue_t, dispatch_block_t))finallyOn { + return ^(dispatch_queue_t queue, dispatch_block_t block) { + return __finally(self, queue, block); + }; +} + +- (id)value { + id result = [self valueForKey:@"__value"]; + return [result isKindOfClass:[PMKArray class]] + ? result[0] + : result; +} + +@end + + + +@implementation AnyPromise (Adapters) + ++ (instancetype)promiseWithAdapterBlock:(void (^)(PMKAdapter))block { + return [self promiseWithResolverBlock:^(PMKResolver resolve) { + block(^(id value, id error){ + resolve(error ?: value); + }); + }]; +} + ++ (instancetype)promiseWithIntegerAdapterBlock:(void (^)(PMKIntegerAdapter))block { + return [self promiseWithResolverBlock:^(PMKResolver resolve) { + block(^(NSInteger value, id error){ + if (error) { + resolve(error); + } else { + resolve(@(value)); + } + }); + }]; +} + ++ (instancetype)promiseWithBooleanAdapterBlock:(void (^)(PMKBooleanAdapter adapter))block { + return [self promiseWithResolverBlock:^(PMKResolver resolve) { + block(^(BOOL value, id error){ + if (error) { + resolve(error); + } else { + resolve(@(value)); + } + }); + }]; +} + +@end diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/AnyPromise.swift b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/AnyPromise.swift new file mode 100644 index 00000000000..f913c8c1d85 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/AnyPromise.swift @@ -0,0 +1,215 @@ +import Foundation.NSError + +@objc(AnyPromise) public class AnyPromise: NSObject { + + private var state: State + + /** + - Returns: A new AnyPromise bound to a Promise. + The two promises represent the same task, any changes to either will instantly reflect on both. + */ + public init(bound: Promise) { + var resolve: ((AnyObject?) -> Void)! + state = State(resolver: &resolve) + bound.pipe { resolution in + switch resolution { + case .Fulfilled(let value): + resolve(value) + case .Rejected(let error, let token): + let nserror = error as NSError + unconsume(error: nserror, reusingToken: token) + resolve(nserror) + } + } + } + + /** + - Returns: A new AnyPromise bound to a Promise. + The two promises represent the same task, any changes to either will instantly reflect on both. + */ + convenience public init(bound: Promise) { + // FIXME efficiency. Allocating the extra promise for conversion sucks. + self.init(bound: bound.then(on: zalgo){ Optional.Some($0) }) + } + + /** + - Returns: A new `AnyPromise` bound to a `Promise<[T]>`. + The two promises represent the same task, any changes to either will instantly reflect on both. + The value is converted to an NSArray so Objective-C can use it. + */ + convenience public init(bound: Promise<[T]>) { + self.init(bound: bound.then(on: zalgo) { NSArray(array: $0) }) + } + + /** + - Returns: A new AnyPromise bound to a `Promise<[T:U]>`. + The two promises represent the same task, any changes to either will instantly reflect on both. + The value is converted to an NSDictionary so Objective-C can use it. + */ + convenience public init(bound: Promise<[T:U]>) { + self.init(bound: bound.then(on: zalgo) { NSDictionary(dictionary: $0) }) + } + + /** + - Returns: A new AnyPromise bound to a `Promise`. + The two promises represent the same task, any changes to either will instantly reflect on both. + The value is converted to an NSNumber so Objective-C can use it. + */ + convenience public init(bound: Promise) { + self.init(bound: bound.then(on: zalgo) { NSNumber(integer: $0) }) + } + + /** + - Returns: A new AnyPromise bound to a `Promise`. + The two promises represent the same task, any changes to either will instantly reflect on both. + */ + convenience public init(bound: Promise) { + self.init(bound: bound.then(on: zalgo) { Optional.None }) + } + + @objc init(@noescape bridge: ((AnyObject?) -> Void) -> Void) { + var resolve: ((AnyObject?) -> Void)! + state = State(resolver: &resolve) + bridge { result in + if let next = result as? AnyPromise { + next.pipe(resolve) + } else { + resolve(result) + } + } + } + + @objc func pipe(body: (AnyObject?) -> Void) { + state.get { seal in + switch seal { + case .Pending(let handlers): + handlers.append(body) + case .Resolved(let value): + body(value) + } + } + } + + @objc var __value: AnyObject? { + return state.get() ?? nil + } + + /** + A promise starts pending and eventually resolves. + - Returns: `true` if the promise has not yet resolved. + */ + @objc public var pending: Bool { + return state.get() == nil + } + + /** + A promise starts pending and eventually resolves. + - Returns: `true` if the promise has resolved. + */ + @objc public var resolved: Bool { + return !pending + } + + /** + A fulfilled promise has resolved successfully. + - Returns: `true` if the promise was fulfilled. + */ + @objc public var fulfilled: Bool { + switch state.get() { + case .Some(let obj) where obj is NSError: + return false + case .Some: + return true + case .None: + return false + } + } + + /** + A rejected promise has resolved without success. + - Returns: `true` if the promise was rejected. + */ + @objc public var rejected: Bool { + switch state.get() { + case .Some(let obj) where obj is NSError: + return true + default: + return false + } + } + + /** + Continue a Promise chain from an AnyPromise. + */ + public func then(on q: dispatch_queue_t = dispatch_get_main_queue(), body: (AnyObject?) throws -> T) -> Promise { + return Promise(sealant: { resolve in + pipe { object in + if let error = object as? NSError { + resolve(.Rejected(error, error.token)) + } else { + contain_zalgo(q, rejecter: resolve) { + resolve(.Fulfilled(try body(self.valueForKey("value")))) + } + } + } + }) + } + + /** + Continue a Promise chain from an AnyPromise. + */ + public func then(on q: dispatch_queue_t = dispatch_get_main_queue(), body: (AnyObject?) -> AnyPromise) -> Promise { + return Promise { fulfill, reject in + pipe { object in + if let error = object as? NSError { + reject(error) + } else { + contain_zalgo(q) { + body(object).pipe { object in + if let error = object as? NSError { + reject(error) + } else { + fulfill(object) + } + } + } + } + } + } + } + + /** + Continue a Promise chain from an AnyPromise. + */ + public func then(on q: dispatch_queue_t = dispatch_get_main_queue(), body: (AnyObject?) -> Promise) -> Promise { + return Promise(sealant: { resolve in + pipe { object in + if let error = object as? NSError { + resolve(.Rejected(error, error.token)) + } else { + contain_zalgo(q) { + body(object).pipe(resolve) + } + } + } + }) + } + + private class State: UnsealedState { + required init(inout resolver: ((AnyObject?) -> Void)!) { + var preresolve: ((AnyObject?) -> Void)! + super.init(resolver: &preresolve) + resolver = { obj in + if let error = obj as? NSError { unconsume(error: error) } + preresolve(obj) + } + } + } +} + + +extension AnyPromise { + override public var description: String { + return "AnyPromise: \(state)" + } +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/Error.swift b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/Error.swift new file mode 100644 index 00000000000..b07dc418158 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/Error.swift @@ -0,0 +1,216 @@ +import Dispatch +import Foundation.NSError +import Foundation.NSURLError + +public enum Error: ErrorType { + /** + The ErrorType for a rejected `when`. + - Parameter 0: The index of the promise that was rejected. + - Parameter 1: The error from the promise that rejected this `when`. + */ + case When(Int, ErrorType) + + /** + The ErrorType for a rejected `join`. + - Parameter 0: The promises passed to this `join` that did not *all* fulfill. + - Note: The array is untyped because Swift generics are fussy with enums. + */ + case Join([AnyObject]) + + /** + The closure with form (T?, ErrorType?) was called with (nil, nil) + This is invalid as per the calling convention. + */ + case DoubleOhSux0r + + /** + A handler returned its own promise. 99% of the time, this is likely a + programming error. It is also invalid per Promises/A+. + */ + case ReturnedSelf +} + +public enum URLError: ErrorType { + /** + The URLRequest succeeded but a valid UIImage could not be decoded from + the data that was received. + */ + case InvalidImageData(NSURLRequest, NSData) + + /** + An NSError was received from an underlying Cocoa function. + FIXME sucks? + */ + case UnderlyingCocoaError(NSURLRequest, NSData?, NSURLResponse?, NSError) + + /** + The HTTP request returned a non-200 status code. + */ + case BadResponse(NSURLRequest, NSData?, NSURLResponse?) + + /** + The data could not be decoded using the encoding specified by the HTTP + response headers. + */ + case StringEncoding(NSURLRequest, NSData, NSURLResponse) + + /** + Usually the `NSURLResponse` is actually an `NSHTTPURLResponse`, if so you + can access it using this property. Since it is returned as an unwrapped + optional: be sure. + */ + public var NSHTTPURLResponse: Foundation.NSHTTPURLResponse! { + switch self { + case .InvalidImageData: + return nil + case .UnderlyingCocoaError(_, _, let rsp, _): + return rsp as! Foundation.NSHTTPURLResponse + case .BadResponse(_, _, let rsp): + return rsp as! Foundation.NSHTTPURLResponse + case .StringEncoding(_, _, let rsp): + return rsp as! Foundation.NSHTTPURLResponse + } + } +} + +public enum JSONError: ErrorType { + case UnexpectedRootNode(AnyObject) +} + + +//////////////////////////////////////////////////////////// Cancellation +private struct ErrorPair: Hashable { + let domain: String + let code: Int + init(_ d: String, _ c: Int) { + domain = d; code = c + } + var hashValue: Int { + return "\(domain):\(code)".hashValue + } +} + +private func ==(lhs: ErrorPair, rhs: ErrorPair) -> Bool { + return lhs.domain == rhs.domain && lhs.code == rhs.code +} + +extension NSError { + @objc public class func cancelledError() -> NSError { + let info: [NSObject: AnyObject] = [NSLocalizedDescriptionKey: "The operation was cancelled"] + return NSError(domain: PMKErrorDomain, code: PMKOperationCancelled, userInfo: info) + } + + /** + - Warning: You may only call this method on the main thread. + */ + @objc public class func registerCancelledErrorDomain(domain: String, code: Int) { + cancelledErrorIdentifiers.insert(ErrorPair(domain, code)) + } +} + +public protocol CancellableErrorType: ErrorType { + var cancelled: Bool { get } +} + +extension NSError: CancellableErrorType { + /** + - Warning: You may only call this method on the main thread. + */ + @objc public var cancelled: Bool { + if !NSThread.isMainThread() { + NSLog("PromiseKit: Warning: `cancelled` called on background thread.") + } + + return cancelledErrorIdentifiers.contains(ErrorPair(domain, code)) + } +} + + +////////////////////////////////////////// Predefined Cancellation Errors +private var cancelledErrorIdentifiers = Set([ + ErrorPair(PMKErrorDomain, PMKOperationCancelled), + ErrorPair(NSURLErrorDomain, NSURLErrorCancelled) +]) + +extension NSURLError: CancellableErrorType { + public var cancelled: Bool { + return self == .Cancelled + } +} + + +//////////////////////////////////////////////////////// Unhandled Errors +/** + The unhandled error handler. + + If a promise is rejected and no catch handler is called in its chain, + the provided handler is called. The default handler logs the error. + + PMKUnhandledErrorHandler = { error in + mylogf("Unhandled error: \(error)") + } + + - Warning: *Important* The handler is executed on an undefined queue. + - Warning: *Important* Don’t use promises in your handler, or you risk an infinite error loop. + - Returns: The previous unhandled error handler. +*/ +public var PMKUnhandledErrorHandler = { (error: ErrorType) -> Void in + dispatch_async(dispatch_get_main_queue()) { + let cancelled = (error as? CancellableErrorType)?.cancelled ?? false + // ^-------^ must be called on main queue + if !cancelled { + NSLog("PromiseKit: Unhandled Error: %@", "\(error)") + } + } +} + +class ErrorConsumptionToken { + var consumed = false + let error: ErrorType! + + init(_ error: ErrorType) { + self.error = error + } + + init(_ error: NSError) { + self.error = error.copy() as! NSError + } + + deinit { + if !consumed { + PMKUnhandledErrorHandler(error) + } + } +} + +private var handle: UInt8 = 0 + +extension NSError { + @objc func pmk_consume() { + // The association could be nil if the objc_setAssociatedObject + // has taken a *really* long time. Or perhaps the user has + // overused `zalgo`. Thus we ignore it. This is an unlikely edge + // case and the unhandled-error feature is not mission-critical. + + if let token = objc_getAssociatedObject(self, &handle) as? ErrorConsumptionToken { + token.consumed = true + } + } + + var token: ErrorConsumptionToken! { + return objc_getAssociatedObject(self, &handle) as? ErrorConsumptionToken + } +} + +func unconsume(error error: NSError, var reusingToken token: ErrorConsumptionToken? = nil) { + if token != nil { + objc_setAssociatedObject(error, &handle, token, .OBJC_ASSOCIATION_RETAIN) + } else { + token = objc_getAssociatedObject(error, &handle) as? ErrorConsumptionToken + if token == nil { + token = ErrorConsumptionToken(error) + objc_setAssociatedObject(error, &handle, token, .OBJC_ASSOCIATION_RETAIN) + } + } + token!.consumed = false +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/NSError+Cancellation.h b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/NSError+Cancellation.h new file mode 100644 index 00000000000..99d1da6d7ab --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/NSError+Cancellation.h @@ -0,0 +1,16 @@ +#import + +#if !defined(SWIFT_PASTE) +# define SWIFT_PASTE_HELPER(x, y) x##y +# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y) +#endif + +#if !defined(SWIFT_EXTENSION) +# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__) +#endif + +@interface NSError (SWIFT_EXTENSION(PromiseKit)) ++ (NSError * __nonnull)cancelledError; ++ (void)registerCancelledErrorDomain:(NSString * __nonnull)domain code:(NSInteger)code; +@property (nonatomic, readonly) BOOL cancelled; +@end diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/NSMethodSignatureForBlock.m b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/NSMethodSignatureForBlock.m new file mode 100644 index 00000000000..700c1b37ef7 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/NSMethodSignatureForBlock.m @@ -0,0 +1,77 @@ +#import + +struct PMKBlockLiteral { + void *isa; // initialized to &_NSConcreteStackBlock or &_NSConcreteGlobalBlock + int flags; + int reserved; + void (*invoke)(void *, ...); + struct block_descriptor { + unsigned long int reserved; // NULL + unsigned long int size; // sizeof(struct Block_literal_1) + // optional helper functions + void (*copy_helper)(void *dst, void *src); // IFF (1<<25) + void (*dispose_helper)(void *src); // IFF (1<<25) + // required ABI.2010.3.16 + const char *signature; // IFF (1<<30) + } *descriptor; + // imported variables +}; + +typedef NS_OPTIONS(NSUInteger, PMKBlockDescriptionFlags) { + PMKBlockDescriptionFlagsHasCopyDispose = (1 << 25), + PMKBlockDescriptionFlagsHasCtor = (1 << 26), // helpers have C++ code + PMKBlockDescriptionFlagsIsGlobal = (1 << 28), + PMKBlockDescriptionFlagsHasStret = (1 << 29), // IFF BLOCK_HAS_SIGNATURE + PMKBlockDescriptionFlagsHasSignature = (1 << 30) +}; + +// It appears 10.7 doesn't support quotes in method signatures. Remove them +// via @rabovik's method. See https://github.com/OliverLetterer/SLObjectiveCRuntimeAdditions/pull/2 +#if defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_8 +NS_INLINE static const char * pmk_removeQuotesFromMethodSignature(const char *str){ + char *result = malloc(strlen(str) + 1); + BOOL skip = NO; + char *to = result; + char c; + while ((c = *str++)) { + if ('"' == c) { + skip = !skip; + continue; + } + if (skip) continue; + *to++ = c; + } + *to = '\0'; + return result; +} +#endif + +static NSMethodSignature *NSMethodSignatureForBlock(id block) { + if (!block) + return nil; + + struct PMKBlockLiteral *blockRef = (__bridge struct PMKBlockLiteral *)block; + PMKBlockDescriptionFlags flags = (PMKBlockDescriptionFlags)blockRef->flags; + + if (flags & PMKBlockDescriptionFlagsHasSignature) { + void *signatureLocation = blockRef->descriptor; + signatureLocation += sizeof(unsigned long int); + signatureLocation += sizeof(unsigned long int); + + if (flags & PMKBlockDescriptionFlagsHasCopyDispose) { + signatureLocation += sizeof(void(*)(void *dst, void *src)); + signatureLocation += sizeof(void (*)(void *src)); + } + + const char *signature = (*(const char **)signatureLocation); +#if defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_8 + signature = pmk_removeQuotesFromMethodSignature(signature); + NSMethodSignature *nsSignature = [NSMethodSignature signatureWithObjCTypes:signature]; + free((void *)signature); + + return nsSignature; +#endif + return [NSMethodSignature signatureWithObjCTypes:signature]; + } + return 0; +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/PMK.modulemap b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/PMK.modulemap new file mode 100644 index 00000000000..7e55ef9dc2b --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/PMK.modulemap @@ -0,0 +1,32 @@ +framework module PromiseKit { + umbrella header "Umbrella.h" + + header "NSError+Cancellation.h" + + exclude header "AnyPromise.h" + exclude header "PromiseKit.h" + exclude header "PMKPromise.h" + exclude header "Promise.h" + + exclude header "Pods-PromiseKit-umbrella.h" + + exclude header "ACAccountStore+AnyPromise.h" + exclude header "AVAudioSession+AnyPromise.h" + exclude header "CKContainer+AnyPromise.h" + exclude header "CKDatabase+AnyPromise.h" + exclude header "CLGeocoder+AnyPromise.h" + exclude header "CLLocationManager+AnyPromise.h" + exclude header "NSNotificationCenter+AnyPromise.h" + exclude header "NSTask+AnyPromise.h" + exclude header "NSURLConnection+AnyPromise.h" + exclude header "MKDirections+AnyPromise.h" + exclude header "MKMapSnapshotter+AnyPromise.h" + exclude header "CALayer+AnyPromise.h" + exclude header "SLRequest+AnyPromise.h" + exclude header "SKRequest+AnyPromise.h" + exclude header "SCNetworkReachability+AnyPromise.h" + exclude header "UIActionSheet+AnyPromise.h" + exclude header "UIAlertView+AnyPromise.h" + exclude header "UIView+AnyPromise.h" + exclude header "UIViewController+AnyPromise.h" +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/PMKCallVariadicBlock.m b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/PMKCallVariadicBlock.m new file mode 100644 index 00000000000..a3d45113d42 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/PMKCallVariadicBlock.m @@ -0,0 +1,145 @@ +#import +#import +#import +#import +#import "NSMethodSignatureForBlock.m" +#import +#import +#import + +#ifndef PMKLog +#define PMKLog NSLog +#endif + +@interface PMKArray : NSObject { +@public + id objs[3]; + NSUInteger count; +} @end + +@implementation PMKArray + +- (id)objectAtIndexedSubscript:(NSUInteger)idx { + if (count <= idx) { + // this check is necessary due to lack of checks in `pmk_safely_call_block` + return nil; + } + return objs[idx]; +} + +@end + +id __PMKArrayWithCount(NSUInteger count, ...) { + PMKArray *this = [PMKArray new]; + this->count = count; + va_list args; + va_start(args, count); + for (NSUInteger x = 0; x < count; ++x) + this->objs[x] = va_arg(args, id); + va_end(args); + return this; +} + + +static inline id _PMKCallVariadicBlock(id frock, id result) { + NSCAssert(frock, @""); + + NSMethodSignature *sig = NSMethodSignatureForBlock(frock); + const NSUInteger nargs = sig.numberOfArguments; + const char rtype = sig.methodReturnType[0]; + + #define call_block_with_rtype(type) ({^type{ \ + switch (nargs) { \ + case 1: \ + return ((type(^)(void))frock)(); \ + case 2: { \ + const id arg = [result class] == [PMKArray class] ? result[0] : result; \ + return ((type(^)(id))frock)(arg); \ + } \ + case 3: { \ + type (^block)(id, id) = frock; \ + return [result class] == [PMKArray class] \ + ? block(result[0], result[1]) \ + : block(result, nil); \ + } \ + case 4: { \ + type (^block)(id, id, id) = frock; \ + return [result class] == [PMKArray class] \ + ? block(result[0], result[1], result[2]) \ + : block(result, nil, nil); \ + } \ + default: \ + @throw [NSException exceptionWithName:NSInvalidArgumentException reason:@"PromiseKit: The provided block’s argument count is unsupported." userInfo:nil]; \ + }}();}) + + switch (rtype) { + case 'v': + call_block_with_rtype(void); + return nil; + case '@': + return call_block_with_rtype(id) ?: nil; + case '*': { + char *str = call_block_with_rtype(char *); + return str ? @(str) : nil; + } + case 'c': return @(call_block_with_rtype(char)); + case 'i': return @(call_block_with_rtype(int)); + case 's': return @(call_block_with_rtype(short)); + case 'l': return @(call_block_with_rtype(long)); + case 'q': return @(call_block_with_rtype(long long)); + case 'C': return @(call_block_with_rtype(unsigned char)); + case 'I': return @(call_block_with_rtype(unsigned int)); + case 'S': return @(call_block_with_rtype(unsigned short)); + case 'L': return @(call_block_with_rtype(unsigned long)); + case 'Q': return @(call_block_with_rtype(unsigned long long)); + case 'f': return @(call_block_with_rtype(float)); + case 'd': return @(call_block_with_rtype(double)); + case 'B': return @(call_block_with_rtype(_Bool)); + case '^': + if (strcmp(sig.methodReturnType, "^v") == 0) { + call_block_with_rtype(void); + return nil; + } + // else fall through! + default: + @throw [NSException exceptionWithName:@"PromiseKit" reason:@"PromiseKit: Unsupported method signature." userInfo:nil]; + } +} + +static id PMKCallVariadicBlock(id frock, id result) { + @try { + return _PMKCallVariadicBlock(frock, result); + } @catch (id thrown) { + return PMKProcessUnhandledException(thrown); + } +} + + +static dispatch_once_t onceToken; +static NSError *(^PMKUnhandledExceptionHandler)(id); + +NSError *PMKProcessUnhandledException(id thrown) { + + dispatch_once(&onceToken, ^{ + PMKUnhandledExceptionHandler = ^id(id reason){ + if ([reason isKindOfClass:[NSError class]]) + return reason; + if ([reason isKindOfClass:[NSString class]]) + return [NSError errorWithDomain:PMKErrorDomain code:PMKUnexpectedError userInfo:@{NSLocalizedDescriptionKey: reason}]; + return nil; + }; + }); + + id err = PMKUnhandledExceptionHandler(thrown); + if (!err) { + NSLog(@"PromiseKit no longer catches *all* exceptions. However you can change this behavior by setting a new PMKProcessUnhandledException handler."); + @throw thrown; + } + return err; +} + +void PMKSetUnhandledExceptionHandler(NSError *(^newHandler)(id)) { + dispatch_once(&onceToken, ^{ + PMKUnhandledExceptionHandler = newHandler; + }); +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/Promise+Properties.swift b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/Promise+Properties.swift new file mode 100644 index 00000000000..a101d957476 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/Promise+Properties.swift @@ -0,0 +1,57 @@ +extension Promise { + /** + - Returns: The error with which this promise was rejected; `nil` if this promise is not rejected. + */ + public var error: ErrorType? { + switch state.get() { + case .None: + return nil + case .Some(.Fulfilled): + return nil + case .Some(.Rejected(let error, _)): + return error + } + } + + /** + - Returns: `true` if the promise has not yet resolved. + */ + public var pending: Bool { + return state.get() == nil + } + + /** + - Returns: `true` if the promise has resolved. + */ + public var resolved: Bool { + return !pending + } + + /** + - Returns: `true` if the promise was fulfilled. + */ + public var fulfilled: Bool { + return value != nil + } + + /** + - Returns: `true` if the promise was rejected. + */ + public var rejected: Bool { + return error != nil + } + + /** + - Returns: The value with which this promise was fulfilled or `nil` if this promise is pending or rejected. + */ + public var value: T? { + switch state.get() { + case .None: + return nil + case .Some(.Fulfilled(let value)): + return value + case .Some(.Rejected): + return nil + } + } +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/Promise.swift b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/Promise.swift new file mode 100644 index 00000000000..d7063bf9270 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/Promise.swift @@ -0,0 +1,655 @@ +import Dispatch +import Foundation.NSError + +/** + A *promise* represents the future value of a task. + + To obtain the value of a promise we call `then`. + + Promises are chainable: `then` returns a promise, you can call `then` on + that promise, which returns a promise, you can call `then` on that + promise, et cetera. + + Promises start in a pending state and *resolve* with a value to become + *fulfilled* or with an `ErrorType` to become rejected. + + - SeeAlso: [PromiseKit `then` Guide](http://promisekit.org/then/) + - SeeAlso: [PromiseKit Chaining Guide](http://promisekit.org/chaining/) +*/ +public class Promise { + let state: State> + + /** + Create a new pending promise. + + Use this method when wrapping asynchronous systems that do *not* use + promises so that they can be involved in promise chains. + + Don’t use this method if you already have promises! Instead, just return + your promise! + + The closure you pass is executed immediately on the calling thread. + + func fetchKitten() -> Promise { + return Promise { fulfill, reject in + KittenFetcher.fetchWithCompletionBlock({ img, err in + if err == nil { + if img.size.width > 0 { + fulfill(img) + } else { + reject(Error.ImageTooSmall) + } + } else { + reject(err) + } + }) + } + } + + - Parameter resolvers: The provided closure is called immediately. + Inside, execute your asynchronous system, calling fulfill if it suceeds + and reject for any errors. + + - Returns: return A new promise. + + - Note: If you are wrapping a delegate-based system, we recommend + to use instead: Promise.pendingPromise() + + - SeeAlso: http://promisekit.org/sealing-your-own-promises/ + - SeeAlso: http://promisekit.org/wrapping-delegation/ + - SeeAlso: init(resolver:) + */ + public init(@noescape resolvers: (fulfill: (T) -> Void, reject: (ErrorType) -> Void) throws -> Void) { + var resolve: ((Resolution) -> Void)! + state = UnsealedState(resolver: &resolve) + do { + try resolvers(fulfill: { resolve(.Fulfilled($0)) }, reject: { error in + if self.pending { + resolve(.Rejected(error, ErrorConsumptionToken(error))) + } else { + NSLog("PromiseKit: Warning: reject called on already rejected Promise: %@", "\(error)") + } + }) + } catch { + resolve(.Rejected(error, ErrorConsumptionToken(error))) + } + } + + /** + Create a new pending promise. + + This initializer is convenient when wrapping asynchronous systems that + use common patterns. For example: + + func fetchKitten() -> Promise { + return Promise { resolve in + KittenFetcher.fetchWithCompletionBlock(resolve) + } + } + + - SeeAlso: init(resolvers:) + */ + public convenience init(@noescape resolver: ((T?, NSError?) -> Void) throws -> Void) { + self.init(sealant: { resolve in + try resolver { obj, err in + if let obj = obj { + resolve(.Fulfilled(obj)) + } else if let err = err { + resolve(.Rejected(err, ErrorConsumptionToken(err as ErrorType))) + } else { + resolve(.Rejected(Error.DoubleOhSux0r, ErrorConsumptionToken(Error.DoubleOhSux0r))) + } + } + }) + } + + /** + Create a new pending promise. + + This initializer is convenient when wrapping asynchronous systems that + use common patterns. For example: + + func fetchKitten() -> Promise { + return Promise { resolve in + KittenFetcher.fetchWithCompletionBlock(resolve) + } + } + + - SeeAlso: init(resolvers:) + */ + public convenience init(@noescape resolver: ((T, NSError?) -> Void) throws -> Void) { + self.init(sealant: { resolve in + try resolver { obj, err in + if let err = err { + resolve(.Rejected(err, ErrorConsumptionToken(err))) + } else { + resolve(.Fulfilled(obj)) + } + } + }) + } + + /** + Create a new fulfilled promise. + */ + public init(_ value: T) { + state = SealedState(resolution: .Fulfilled(value)) + } + + @available(*, unavailable, message="T cannot conform to ErrorType") + public init(_ value: T) { abort() } + + /** + Create a new rejected promise. + */ + public init(error: ErrorType) { + /** + Implementation note, the error label is necessary to prevent: + + let p = Promise(ErrorType()) + + Resulting in Promise. The above @available annotation + does not help for some reason. A work-around is: + + let p: Promise = Promise(ErrorType()) + + But I can’t expect users to do this. + */ + state = SealedState(resolution: .Rejected(error, ErrorConsumptionToken(error))) + } + + /** + Careful with this, it is imperative that sealant can only be called once + or you will end up with spurious unhandled-errors due to possible double + rejections and thus immediately deallocated ErrorConsumptionTokens. + */ + init(@noescape sealant: ((Resolution) -> Void) throws -> Void) { + var resolve: ((Resolution) -> Void)! + state = UnsealedState(resolver: &resolve) + do { + try sealant(resolve) + } catch { + resolve(.Rejected(error, ErrorConsumptionToken(error))) + } + } + + /** + Making promises that wrap asynchronous delegation systems or other larger asynchronous systems without a simple completion handler is easier with pendingPromise. + + class Foo: BarDelegate { + let (promise, fulfill, reject) = Promise.pendingPromise() + + func barDidFinishWithResult(result: Int) { + fulfill(result) + } + + func barDidError(error: NSError) { + reject(error) + } + } + + - Returns: A tuple consisting of: + 1) A promise + 2) A function that fulfills that promise + 3) A function that rejects that promise + */ + public class func pendingPromise() -> (promise: Promise, fulfill: (T) -> Void, reject: (ErrorType) -> Void) { + var fulfill: ((T) -> Void)! + var reject: ((ErrorType) -> Void)! + let promise = Promise { fulfill = $0; reject = $1 } + return (promise, fulfill, reject) + } + + func pipe(body: (Resolution) -> Void) { + state.get { seal in + switch seal { + case .Pending(let handlers): + handlers.append(body) + case .Resolved(let resolution): + body(resolution) + } + } + } + + private convenience init(when: Promise, body: (Resolution, (Resolution) -> Void) -> Void) { + self.init { resolve in + when.pipe { resolution in + body(resolution, resolve) + } + } + } + + /** + The provided closure is executed when this Promise is resolved. + + - Parameter on: The queue on which body should be executed. + - Parameter body: The closure that is executed when this Promise is fulfilled. + - Returns: A new promise that is resolved with the value returned from the provided closure. For example: + + NSURLConnection.GET(url).then { (data: NSData) -> Int in + //… + return data.length + }.then { length in + //… + } + + - SeeAlso: `thenInBackground` + */ + public func then(on q: dispatch_queue_t = dispatch_get_main_queue(), _ body: (T) throws -> U) -> Promise { + return Promise(when: self) { resolution, resolve in + switch resolution { + case .Rejected(let error): + resolve(.Rejected(error)) + case .Fulfilled(let value): + contain_zalgo(q, rejecter: resolve) { + resolve(.Fulfilled(try body(value))) + } + } + } + } + + /** + The provided closure is executed when this Promise is resolved. + + - Parameter on: The queue on which body should be executed. + - Parameter body: The closure that is executed when this Promise is fulfilled. + - Returns: A new promise that is resolved when the Promise returned from the provided closure resolves. For example: + + NSURLSession.GET(url1).then { (data: NSData) -> Promise in + //… + return NSURLSession.GET(url2) + }.then { data in + //… + } + + - SeeAlso: `thenInBackground` + */ + public func then(on q: dispatch_queue_t = dispatch_get_main_queue(), _ body: (T) throws -> Promise) -> Promise { + return Promise(when: self) { resolution, resolve in + switch resolution { + case .Rejected(let error): + resolve(.Rejected(error)) + case .Fulfilled(let value): + contain_zalgo(q, rejecter: resolve) { + let promise = try body(value) + guard promise !== self else { throw Error.ReturnedSelf } + promise.pipe(resolve) + } + } + } + } + + @available(*, unavailable) + public func then(on: dispatch_queue_t = dispatch_get_main_queue(), _ body: (T) throws -> Promise?) -> Promise { abort() } + + /** + The provided closure is executed when this Promise is resolved. + + - Parameter on: The queue on which body should be executed. + - Parameter body: The closure that is executed when this Promise is fulfilled. + - Returns: A new promise that is resolved when the AnyPromise returned from the provided closure resolves. For example: + + NSURLSession.GET(url).then { (data: NSData) -> AnyPromise in + //… + return SCNetworkReachability() + }.then { _ in + //… + } + + - SeeAlso: `thenInBackground` + */ + public func then(on q: dispatch_queue_t = dispatch_get_main_queue(), body: (T) throws -> AnyPromise) -> Promise { + return Promise(when: self) { resolution, resolve in + switch resolution { + case .Rejected(let error): + resolve(.Rejected(error)) + case .Fulfilled(let value): + contain_zalgo(q, rejecter: resolve) { + try body(value).pipe(resolve) + } + } + } + } + + @available(*, unavailable) + public func then(on: dispatch_queue_t = dispatch_get_main_queue(), body: (T) throws -> AnyPromise?) -> Promise { abort() } + + /** + The provided closure is executed on the default background queue when this Promise is fulfilled. + + This method is provided as a convenience for `then`. + + - SeeAlso: `then` + */ + public func thenInBackground(body: (T) throws -> U) -> Promise { + return then(on: dispatch_get_global_queue(0, 0), body) + } + + /** + The provided closure is executed on the default background queue when this Promise is fulfilled. + + This method is provided as a convenience for `then`. + + - SeeAlso: `then` + */ + public func thenInBackground(body: (T) throws -> Promise) -> Promise { + return then(on: dispatch_get_global_queue(0, 0), body) + } + + @available(*, unavailable) + public func thenInBackground(body: (T) throws -> Promise?) -> Promise { abort() } + + /** + The provided closure is executed when this promise is rejected. + + Rejecting a promise cascades: rejecting all subsequent promises (unless + recover is invoked) thus you will typically place your catch at the end + of a chain. Often utility promises will not have a catch, instead + delegating the error handling to the caller. + + The provided closure always runs on the main queue. + + - Parameter policy: The default policy does not execute your handler for cancellation errors. See registerCancellationError for more documentation. + - Parameter body: The handler to execute if this promise is rejected. + - SeeAlso: `registerCancellationError` + */ + public func error(policy policy: ErrorPolicy = .AllErrorsExceptCancellation, _ body: (ErrorType) -> Void) { + + func consume(error: ErrorType, _ token: ErrorConsumptionToken) { + token.consumed = true + body(error) + } + + pipe { resolution in + switch (resolution, policy) { + case (let .Rejected(error, token), .AllErrorsExceptCancellation): + dispatch_async(dispatch_get_main_queue()) { + guard let cancellableError = error as? CancellableErrorType where cancellableError.cancelled else { + consume(error, token) + return + } + } + case (let .Rejected(error, token), _): + dispatch_async(dispatch_get_main_queue()) { + consume(error, token) + } + case (.Fulfilled, _): + break + } + } + } + + /** + The provided closure is executed when this promise is rejected giving you + an opportunity to recover from the error and continue the promise chain. + */ + public func recover(on q: dispatch_queue_t = dispatch_get_main_queue(), _ body: (ErrorType) throws -> Promise) -> Promise { + return Promise(when: self) { resolution, resolve in + switch resolution { + case .Rejected(let error, let token): + contain_zalgo(q, rejecter: resolve) { + token.consumed = true + let promise = try body(error) + guard promise !== self else { throw Error.ReturnedSelf } + promise.pipe(resolve) + } + case .Fulfilled: + resolve(resolution) + } + } + } + + @available(*, unavailable) + public func recover(on: dispatch_queue_t = dispatch_get_main_queue(), _ body: (ErrorType) throws -> Promise?) -> Promise { abort() } + + public func recover(on q: dispatch_queue_t = dispatch_get_main_queue(), _ body: (ErrorType) throws -> T) -> Promise { + return Promise(when: self) { resolution, resolve in + switch resolution { + case .Rejected(let error, let token): + contain_zalgo(q, rejecter: resolve) { + token.consumed = true + resolve(.Fulfilled(try body(error))) + } + case .Fulfilled: + resolve(resolution) + } + } + } + + /** + The provided closure is executed when this Promise is resolved. + + UIApplication.sharedApplication().networkActivityIndicatorVisible = true + somePromise().then { + //… + }.always { + UIApplication.sharedApplication().networkActivityIndicatorVisible = false + } + + - Parameter on: The queue on which body should be executed. + - Parameter body: The closure that is executed when this Promise is resolved. + */ + public func always(on q: dispatch_queue_t = dispatch_get_main_queue(), _ body: () -> Void) -> Promise { + return Promise(when: self) { resolution, resolve in + contain_zalgo(q) { + body() + resolve(resolution) + } + } + } + + @available(*, unavailable, renamed="ensure") + public func finally(on: dispatch_queue_t = dispatch_get_main_queue(), body: () -> Void) -> Promise { abort() } + + @available(*, unavailable, renamed="report") + public func catch_(policy policy: ErrorPolicy = .AllErrorsExceptCancellation, body: () -> Void) -> Promise { abort() } + + @available(*, unavailable, renamed="pendingPromise") + public class func defer_() -> (promise: Promise, fulfill: (T) -> Void, reject: (ErrorType) -> Void) { abort() } + + @available(*, deprecated, renamed="error") + public func report(policy policy: ErrorPolicy = .AllErrorsExceptCancellation, _ body: (ErrorType) -> Void) { error(policy: policy, body) } + + @available(*, deprecated, renamed="always") + public func ensure(on q: dispatch_queue_t = dispatch_get_main_queue(), _ body: () -> Void) -> Promise { return always(on: q, body) } +} + + +/** + Zalgo is dangerous. + + Pass as the `on` parameter for a `then`. Causes the handler to be executed + as soon as it is resolved. That means it will be executed on the queue it + is resolved. This means you cannot predict the queue. + + In the case that the promise is already resolved the handler will be + executed immediately. + + zalgo is provided for libraries providing promises that have good tests + that prove unleashing zalgo is safe. You can also use it in your + application code in situations where performance is critical, but be + careful: read the essay at the provided link to understand the risks. + + - SeeAlso: http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony +*/ +public let zalgo: dispatch_queue_t = dispatch_queue_create("Zalgo", nil) + +/** + Waldo is dangerous. + + Waldo is zalgo, unless the current queue is the main thread, in which case + we dispatch to the default background queue. + + If your block is likely to take more than a few milliseconds to execute, + then you should use waldo: 60fps means the main thread cannot hang longer + than 17 milliseconds. Don’t contribute to UI lag. + + Conversely if your then block is trivial, use zalgo: GCD is not free and + for whatever reason you may already be on the main thread so just do what + you are doing quickly and pass on execution. + + It is considered good practice for asynchronous APIs to complete onto the + main thread. Apple do not always honor this, nor do other developers. + However, they *should*. In that respect waldo is a good choice if your + then is going to take a while and doesn’t interact with the UI. + + Please note (again) that generally you should not use zalgo or waldo. The + performance gains are neglible and we provide these functions only out of + a misguided sense that library code should be as optimized as possible. + If you use zalgo or waldo without tests proving their correctness you may + unwillingly introduce horrendous, near-impossible-to-trace bugs. + + - SeeAlso: zalgo +*/ +public let waldo: dispatch_queue_t = dispatch_queue_create("Waldo", nil) + +func contain_zalgo(q: dispatch_queue_t, block: () -> Void) { + if q === zalgo { + block() + } else if q === waldo { + if NSThread.isMainThread() { + dispatch_async(dispatch_get_global_queue(0, 0), block) + } else { + block() + } + } else { + dispatch_async(q, block) + } +} + +func contain_zalgo(q: dispatch_queue_t, rejecter resolve: (Resolution) -> Void, block: () throws -> Void) { + contain_zalgo(q) { + do { + try block() + } catch { + resolve(.Rejected(error, ErrorConsumptionToken(error))) + } + } +} + + +extension Promise { + /** + Void promises are less prone to generics-of-doom scenarios. + - SeeAlso: when.swift contains enlightening examples of using `Promise` to simplify your code. + */ + public func asVoid() -> Promise { + return then(on: zalgo) { _ in return } + } +} + + +extension Promise: CustomStringConvertible { + public var description: String { + return "Promise: \(state)" + } +} + +/** + `firstly` can make chains more readable. + + Compare: + + NSURLConnection.GET(url1).then { + NSURLConnection.GET(url2) + }.then { + NSURLConnection.GET(url3) + } + + With: + + firstly { + NSURLConnection.GET(url1) + }.then { + NSURLConnection.GET(url2) + }.then { + NSURLConnection.GET(url3) + } +*/ +public func firstly(@noescape promise: () throws -> Promise) -> Promise { + do { + return try promise() + } catch { + return Promise(error: error) + } +} + +/** + `firstly` can make chains more readable. + + Compare: + + SCNetworkReachability().then { + NSURLSession.GET(url2) + }.then { + NSURLSession.GET(url3) + } + + With: + + firstly { + SCNetworkReachability() + }.then { + NSURLSession.GET(url2) + }.then { + NSURLSession.GET(url3) + } +*/ +public func firstly(@noescape promise: () throws -> AnyPromise) -> Promise { + return Promise { resolve in + try promise().pipe(resolve) + } +} + +@available(*, unavailable, message="Instead, throw") +public func firstly(@noescape promise: () throws -> Promise) -> Promise { + fatalError("Unavailable function") +} + + +public enum ErrorPolicy { + case AllErrors + case AllErrorsExceptCancellation +} + + +extension AnyPromise { + private func pipe(resolve: (Resolution) -> Void) -> Void { + pipe { (obj: AnyObject?) in + if let error = obj as? NSError { + resolve(.Rejected(error, ErrorConsumptionToken(error))) + } else { + // possibly the value of this promise is a PMKManifold, if so + // calling the objc `value` method will return the first item. + resolve(.Fulfilled(self.valueForKey("value"))) + } + } + } +} + + +extension Promise { + @available(*, unavailable, message="T cannot conform to ErrorType") + public convenience init(@noescape resolvers: (fulfill: (T) -> Void, reject: (ErrorType) -> Void) throws -> Void) { abort() } + + @available(*, unavailable, message="T cannot conform to ErrorType") + public convenience init(@noescape resolver: ((T?, NSError?) -> Void) throws -> Void) { abort() } + + @available(*, unavailable, message="T cannot conform to ErrorType") + public convenience init(@noescape resolver: ((T, NSError?) -> Void) throws -> Void) { abort() } + + @available(*, unavailable, message="T cannot conform to ErrorType") + public class func pendingPromise() -> (promise: Promise, fulfill: (T) -> Void, reject: (ErrorType) -> Void) { abort() } + + @available (*, unavailable, message="U cannot conform to ErrorType") + public func then(on: dispatch_queue_t = dispatch_get_main_queue(), _ body: (T) throws -> U) -> Promise { abort() } + + @available (*, unavailable, message="U cannot conform to ErrorType") + public func then(on: dispatch_queue_t = dispatch_get_main_queue(), _ body: (T) throws -> Promise) -> Promise { abort() } + + @available(*, unavailable, message="U cannot conform to ErrorType") + public func thenInBackground(body: (T) throws -> U) -> Promise { abort() } + + @available(*, unavailable, message="U cannot conform to ErrorType") + public func thenInBackground(body: (T) throws -> Promise) -> Promise { abort() } +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/PromiseKit.h b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/PromiseKit.h new file mode 100644 index 00000000000..a35384ab2e6 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/PromiseKit.h @@ -0,0 +1,248 @@ +#import +#import +#import +#import +#import +#import + + + +/** + @return A new promise that resolves after the specified duration. + + @parameter duration The duration in seconds to wait before this promise is resolve. + + For example: + + PMKAfter(1).then(^{ + //… + }); +*/ +extern AnyPromise * __nonnull PMKAfter(NSTimeInterval duration); + + + +/** + `when` is a mechanism for waiting more than one asynchronous task and responding when they are all complete. + + `PMKWhen` accepts varied input. If an array is passed then when those promises fulfill, when’s promise fulfills with an array of fulfillment values. If a dictionary is passed then the same occurs, but when’s promise fulfills with a dictionary of fulfillments keyed as per the input. + + Interestingly, if a single promise is passed then when waits on that single promise, and if a single non-promise object is passed then when fulfills immediately with that object. If the array or dictionary that is passed contains objects that are not promises, then these objects are considered fulfilled promises. The reason we do this is to allow a pattern know as "abstracting away asynchronicity". + + If *any* of the provided promises reject, the returned promise is immediately rejected with that promise’s rejection. The error’s `userInfo` object is supplemented with `PMKFailingPromiseIndexKey`. + + For example: + + PMKWhen(@[promise1, promise2]).then(^(NSArray *results){ + //… + }); + + @warning *Important* In the event of rejection the other promises will continue to resolve and as per any other promise will eithe fulfill or reject. This is the right pattern for `getter` style asynchronous tasks, but often for `setter` tasks (eg. storing data on a server), you most likely will need to wait on all tasks and then act based on which have succeeded and which have failed. In such situations use `PMKJoin`. + + @param input The input upon which to wait before resolving this promise. + + @return A promise that is resolved with either: + + 1. An array of values from the provided array of promises. + 2. The value from the provided promise. + 3. The provided non-promise object. + + @see PMKJoin + +*/ +extern AnyPromise * __nonnull PMKWhen(id __nonnull input); + + + +/** + Creates a new promise that resolves only when all provided promises have resolved. + + Typically, you should use `PMKWhen`. + + For example: + + PMKJoin(@[promise1, promise2]).then(^(NSArray *resultingValues){ + //… + }).catch(^(NSError *error){ + assert(error.domain == PMKErrorDomain); + assert(error.code == PMKJoinError); + + NSArray *promises = error.userInfo[PMKJoinPromisesKey]; + for (AnyPromise *promise in promises) { + if (promise.rejected) { + //… + } + } + }); + + @param promises An array of promises. + + @return A promise that thens three parameters: + + 1) An array of mixed values and errors from the resolved input. + 2) An array of values from the promises that fulfilled. + 3) An array of errors from the promises that rejected or nil if all promises fulfilled. + + @see when +*/ +AnyPromise *__nonnull PMKJoin(NSArray * __nonnull promises); + + + +/** + Literally hangs this thread until the promise has resolved. + + Do not use hang… unless you are testing, playing or debugging. + + If you use it in production code I will literally and honestly cry like a child. + + @return The resolved value of the promise. + + @warning T SAFE. IT IS NOT SAFE. IT IS NOT SAFE. IT IS NOT SAFE. IT IS NO +*/ +extern id __nullable PMKHang(AnyPromise * __nonnull promise); + + + +/** + Sets the unhandled exception handler. + + If an exception is thrown inside an AnyPromise handler it is caught and + this handler is executed to determine if the promise is rejected. + + The default handler rejects the promise if an NSError or an NSString is + thrown. + + The default handler in PromiseKit 1.x would reject whatever object was + thrown (including nil). + + @warning *Important* This handler is provided to allow you to customize + which exceptions cause rejection and which abort. You should either + return a fully-formed NSError object or nil. Returning nil causes the + exception to be re-thrown. + + @warning *Important* The handler is executed on an undefined queue. + + @warning *Important* This function is thread-safe, but to facilitate this + it can only be called once per application lifetime and it must be called + before any promise in the app throws an exception. Subsequent calls will + silently fail. +*/ +extern void PMKSetUnhandledExceptionHandler(NSError * __nullable (^__nonnull handler)(id __nullable)); + + + +/** + Executes the provided block on a background queue. + + dispatch_promise is a convenient way to start a promise chain where the + first step needs to run synchronously on a background queue. + + dispatch_promise(^{ + return md5(input); + }).then(^(NSString *md5){ + NSLog(@"md5: %@", md5); + }); + + @param block The block to be executed in the background. Returning an `NSError` will reject the promise, everything else (including void) fulfills the promise. + + @return A promise resolved with the return value of the provided block. + + @see dispatch_async +*/ +extern AnyPromise * __nonnull dispatch_promise(id __nonnull block); + + + +/** + Executes the provided block on the specified background queue. + + dispatch_promise_on(myDispatchQueue, ^{ + return md5(input); + }).then(^(NSString *md5){ + NSLog(@"md5: %@", md5); + }); + + @param block The block to be executed in the background. Returning an `NSError` will reject the promise, everything else (including void) fulfills the promise. + + @return A promise resolved with the return value of the provided block. + + @see dispatch_promise +*/ +extern AnyPromise * __nonnull dispatch_promise_on(dispatch_queue_t __nonnull queue, id __nonnull block); + + + +#define PMKJSONDeserializationOptions ((NSJSONReadingOptions)(NSJSONReadingAllowFragments | NSJSONReadingMutableContainers)) + +/** + Really we shouldn’t assume JSON for (application|text)/(x-)javascript, + really we should return a String of Javascript. However in practice + for the apps we write it *will be* JSON. Thus if you actually want + a Javascript String, use the promise variant of our category functions. +*/ +#define PMKHTTPURLResponseIsJSON(rsp) [@[@"application/json", @"text/json", @"text/javascript", @"application/x-javascript", @"application/javascript"] containsObject:[rsp MIMEType]] +#define PMKHTTPURLResponseIsImage(rsp) [@[@"image/tiff", @"image/jpeg", @"image/gif", @"image/png", @"image/ico", @"image/x-icon", @"image/bmp", @"image/x-bmp", @"image/x-xbitmap", @"image/x-win-bitmap"] containsObject:[rsp MIMEType]] +#define PMKHTTPURLResponseIsText(rsp) [[rsp MIMEType] hasPrefix:@"text/"] + + + +#if defined(__has_include) + #if __has_include() + #import + #endif + #if __has_include() + #import + #endif + #if __has_include() + #import + #endif + #if __has_include() + #import + #endif + #if __has_include() + #import + #endif + #if __has_include() + #import + #endif + #if __has_include() + #import + #endif + #if __has_include() + #import + #endif + #if __has_include() + #import + #endif + #if __has_include() + #import + #endif + #if __has_include() + #import + #endif + #if __has_include() + #import + #endif + #if __has_include() + #import + #endif + #if __has_include() + #import + #endif + #if __has_include() + #import + #endif + #if __has_include() + #import + #endif + #if __has_include() + #import + #endif + #if __has_include() + #import + #endif + #if __has_include() + #import + #endif +#endif diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/State.swift b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/State.swift new file mode 100644 index 00000000000..bb8eeb1fba9 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/State.swift @@ -0,0 +1,156 @@ +import Dispatch +import Foundation // NSLog + +enum Seal { + case Pending(Handlers) + case Resolved(R) +} + +enum Resolution { + case Fulfilled(T) + case Rejected(ErrorType, ErrorConsumptionToken) +} + +// would be a protocol, but you can't have typed variables of “generic” +// protocols in Swift 2. That is, I couldn’t do var state: State when +// it was a protocol. There is no work around. +class State { + func get() -> R? { fatalError("Abstract Base Class") } + func get(body: (Seal) -> Void) { fatalError("Abstract Base Class") } +} + +class UnsealedState: State { + private let barrier = dispatch_queue_create("org.promisekit.barrier", DISPATCH_QUEUE_CONCURRENT) + private var seal: Seal + + /** + Quick return, but will not provide the handlers array because + it could be modified while you are using it by another thread. + If you need the handlers, use the second `get` variant. + */ + override func get() -> R? { + var result: R? + dispatch_sync(barrier) { + if case .Resolved(let resolution) = self.seal { + result = resolution + } + } + return result + } + + override func get(body: (Seal) -> Void) { + var sealed = false + dispatch_sync(barrier) { + switch self.seal { + case .Resolved: + sealed = true + case .Pending: + sealed = false + } + } + if !sealed { + dispatch_barrier_sync(barrier) { + switch (self.seal) { + case .Pending: + body(self.seal) + case .Resolved: + sealed = true // welcome to race conditions + } + } + } + if sealed { + body(seal) + } + } + + required init(inout resolver: ((R) -> Void)!) { + seal = .Pending(Handlers()) + super.init() + resolver = { resolution in + var handlers: Handlers? + dispatch_barrier_sync(self.barrier) { + if case .Pending(let hh) = self.seal { + self.seal = .Resolved(resolution) + handlers = hh + } + } + if let handlers = handlers { + for handler in handlers { + handler(resolution) + } + } + } + } + + deinit { + if case .Pending = seal { + NSLog("PromiseKit: Pending Promise deallocated! This is usually a bug") + } + } +} + +class SealedState: State { + private let resolution: R + + init(resolution: R) { + self.resolution = resolution + } + + override func get() -> R? { + return resolution + } + + override func get(body: (Seal) -> Void) { + body(.Resolved(resolution)) + } +} + + +class Handlers: SequenceType { + var bodies: [(R)->Void] = [] + + func append(body: (R)->Void) { + bodies.append(body) + } + + func generate() -> IndexingGenerator<[(R)->Void]> { + return bodies.generate() + } + + var count: Int { + return bodies.count + } +} + + +extension Resolution: CustomStringConvertible { + var description: String { + switch self { + case .Fulfilled(let value): + return "Fulfilled with value: \(value)" + case .Rejected(let error): + return "Rejected with error: \(error)" + } + } +} + +extension UnsealedState: CustomStringConvertible { + var description: String { + var rv: String! + get { seal in + switch seal { + case .Pending(let handlers): + rv = "Pending with \(handlers.count) handlers" + case .Resolved(let resolution): + rv = "\(resolution)" + } + } + return "UnsealedState: \(rv)" + } +} + +extension SealedState: CustomStringConvertible { + var description: String { + return "SealedState: \(resolution)" + } +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/URLDataPromise.swift b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/URLDataPromise.swift new file mode 100644 index 00000000000..00cd7a7f814 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/URLDataPromise.swift @@ -0,0 +1,106 @@ +import Foundation + +public enum Encoding { + case JSON(NSJSONReadingOptions) +} + +public class URLDataPromise: Promise { + public func asDataAndResponse() -> Promise<(NSData, NSURLResponse)> { + return then(on: zalgo) { ($0, self.URLResponse) } + } + + public func asString() -> Promise { + return then(on: waldo) { data -> String in + guard let str = NSString(data: data, encoding: self.URLResponse.stringEncoding ?? NSUTF8StringEncoding) else { + throw URLError.StringEncoding(self.URLRequest, data, self.URLResponse) + } + return str as String + } + } + + public func asArray(encoding: Encoding = .JSON(.AllowFragments)) -> Promise { + return then(on: waldo) { data -> NSArray in + switch encoding { + case .JSON(let options): + guard !data.b0rkedEmptyRailsResponse else { return NSArray() } + let json = try NSJSONSerialization.JSONObjectWithData(data, options: options) + guard let array = json as? NSArray else { throw JSONError.UnexpectedRootNode(json) } + return array + } + } + } + + public func asDictionary(encoding: Encoding = .JSON(.AllowFragments)) -> Promise { + return then(on: waldo) { data -> NSDictionary in + switch encoding { + case .JSON(let options): + guard !data.b0rkedEmptyRailsResponse else { return NSDictionary() } + let json = try NSJSONSerialization.JSONObjectWithData(data, options: options) + guard let dict = json as? NSDictionary else { throw JSONError.UnexpectedRootNode(json) } + return dict + } + } + } + + private override init(@noescape resolvers: (fulfill: (NSData) -> Void, reject: (ErrorType) -> Void) throws -> Void) { + super.init(resolvers: resolvers) + } + + public override init(error: ErrorType) { + super.init(error: error) + } + + private var URLRequest: NSURLRequest! + private var URLResponse: NSURLResponse! + + public class func go(request: NSURLRequest, @noescape body: ((NSData?, NSURLResponse?, NSError?) -> Void) -> Void) -> URLDataPromise { + var promise: URLDataPromise! + promise = URLDataPromise { fulfill, reject in + body { data, rsp, error in + promise.URLRequest = request + promise.URLResponse = rsp + + if let error = error { + reject(URLError.UnderlyingCocoaError(request, data, rsp, error)) + } else if let data = data, rsp = rsp as? NSHTTPURLResponse where rsp.statusCode >= 200 && rsp.statusCode < 300 { + fulfill(data) + } else if let data = data where !(rsp is NSHTTPURLResponse) { + fulfill(data) + } else { + reject(URLError.BadResponse(request, data, rsp)) + } + } + } + return promise + } +} + +#if os(iOS) + import UIKit.UIImage + + extension URLDataPromise { + public func asImage() -> Promise { + return then(on: waldo) { data -> UIImage in + guard let img = UIImage(data: data), cgimg = img.CGImage else { + throw URLError.InvalidImageData(self.URLRequest, data) + } + return UIImage(CGImage: cgimg, scale: img.scale, orientation: img.imageOrientation) + } + } + } +#endif + +extension NSURLResponse { + private var stringEncoding: UInt? { + guard let encodingName = textEncodingName else { return nil } + let encoding = CFStringConvertIANACharSetNameToEncoding(encodingName) + guard encoding != kCFStringEncodingInvalidId else { return nil } + return CFStringConvertEncodingToNSStringEncoding(encoding) + } +} + +extension NSData { + private var b0rkedEmptyRailsResponse: Bool { + return self == NSData(bytes: " ", length: 1) + } +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/Umbrella.h b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/Umbrella.h new file mode 100644 index 00000000000..7ac2a562862 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/Umbrella.h @@ -0,0 +1,59 @@ +#import +#import + +FOUNDATION_EXPORT double PromiseKitVersionNumber; +FOUNDATION_EXPORT const unsigned char PromiseKitVersionString[]; + +extern NSString * const PMKErrorDomain; + +#define PMKFailingPromiseIndexKey @"PMKFailingPromiseIndexKey" +#define PMKURLErrorFailingURLResponseKey @"PMKURLErrorFailingURLResponseKey" +#define PMKURLErrorFailingDataKey @"PMKURLErrorFailingDataKey" +#define PMKURLErrorFailingStringKey @"PMKURLErrorFailingStringKey" +#define PMKJSONErrorJSONObjectKey @"PMKJSONErrorJSONObjectKey" +#define PMKJoinPromisesKey @"PMKJoinPromisesKey" + +#define PMKUnexpectedError 1l +#define PMKUnknownError 2l +#define PMKInvalidUsageError 3l +#define PMKAccessDeniedError 4l +#define PMKOperationCancelled 5l +#define PMKNotFoundError 6l +#define PMKJSONError 7l +#define PMKOperationFailed 8l +#define PMKTaskError 9l +#define PMKJoinError 10l + +#if !(defined(PMKEZBake) && defined(SWIFT_CLASS)) + #if !defined(SWIFT_PASTE) + # define SWIFT_PASTE_HELPER(x, y) x##y + # define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y) + #endif + #if !defined(SWIFT_METATYPE) + # define SWIFT_METATYPE(X) Class + #endif + + #if defined(__has_attribute) && __has_attribute(objc_runtime_name) + # define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X))) + #else + # define SWIFT_RUNTIME_NAME(X) + #endif + #if !defined(SWIFT_CLASS_EXTRA) + # define SWIFT_CLASS_EXTRA + #endif + #if !defined(SWIFT_CLASS) + # if defined(__has_attribute) && __has_attribute(objc_subclassing_restricted) + # define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA + # else + # define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA + # endif + #endif + + SWIFT_CLASS("AnyPromise") + @interface AnyPromise : NSObject + @property (nonatomic, readonly) BOOL pending; + @property (nonatomic, readonly) BOOL resolved; + @property (nonatomic, readonly) BOOL fulfilled; + @property (nonatomic, readonly) BOOL rejected; + @end +#endif diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/after.m b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/after.m new file mode 100644 index 00000000000..c5f7a3b9e6e --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/after.m @@ -0,0 +1,13 @@ +#import "AnyPromise.h" +@import Dispatch; +@import Foundation.NSDate; +@import Foundation.NSValue; + +AnyPromise *PMKAfter(NSTimeInterval duration) { + return [AnyPromise promiseWithResolverBlock:^(PMKResolver resolve) { + dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(duration * NSEC_PER_SEC)); + dispatch_after(time, dispatch_get_global_queue(0, 0), ^{ + resolve(@(duration)); + }); + }]; +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/after.swift b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/after.swift new file mode 100644 index 00000000000..f5bcd3d741c --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/after.swift @@ -0,0 +1,20 @@ +import Dispatch +import Foundation.NSDate + +/** + ``` + after(1).then { + //… + } + ``` + + - Returns: A new promise that resolves after the specified duration. + - Parameter duration: The duration in seconds to wait before this promise is resolve. +*/ +public func after(delay: NSTimeInterval) -> Promise { + return Promise { fulfill, _ in + let delta = delay * NSTimeInterval(NSEC_PER_SEC) + let when = dispatch_time(DISPATCH_TIME_NOW, Int64(delta)) + dispatch_after(when, dispatch_get_global_queue(0, 0), fulfill) + } +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/dispatch_promise.m b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/dispatch_promise.m new file mode 100644 index 00000000000..71c8e74a34c --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/dispatch_promise.m @@ -0,0 +1,10 @@ +@import Dispatch; +#import "PromiseKit.h" + +AnyPromise *dispatch_promise(id block) { + return dispatch_promise_on(dispatch_get_global_queue(0, 0), block); +} + +AnyPromise *dispatch_promise_on(dispatch_queue_t queue, id block) { + return [AnyPromise promiseWithValue:nil].thenOn(queue, block); +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/dispatch_promise.swift b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/dispatch_promise.swift new file mode 100644 index 00000000000..4a8133e524a --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/dispatch_promise.swift @@ -0,0 +1,23 @@ +import Dispatch +import Foundation.NSError + +/** + ``` + dispatch_promise { + try md5(input) + }.then { md5 in + //… + } + ``` + + - Parameter on: The queue on which to dispatch `body`. + - Parameter body: The closure that resolves this promise. + - Returns: A new promise resolved by the provided closure. +*/ +public func dispatch_promise(on queue: dispatch_queue_t = dispatch_get_global_queue(0, 0), body: () throws -> T) -> Promise { + return Promise(sealant: { resolve in + contain_zalgo(queue, rejecter: resolve) { + resolve(.Fulfilled(try body())) + } + }) +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/hang.m b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/hang.m new file mode 100644 index 00000000000..ee3d9dea0fb --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/hang.m @@ -0,0 +1,24 @@ +#import "AnyPromise.h" +#import "AnyPromise+Private.h" +@import CoreFoundation.CFRunLoop; + +id PMKHang(AnyPromise *promise) { + if (promise.pending) { + static CFRunLoopSourceContext context; + + CFRunLoopRef runLoop = CFRunLoopGetCurrent(); + CFRunLoopSourceRef runLoopSource = CFRunLoopSourceCreate(NULL, 0, &context); + CFRunLoopAddSource(runLoop, runLoopSource, kCFRunLoopDefaultMode); + + promise.finally(^{ + CFRunLoopStop(runLoop); + }); + while (promise.pending) { + CFRunLoopRun(); + } + CFRunLoopRemoveSource(runLoop, runLoopSource, kCFRunLoopDefaultMode); + CFRelease(runLoopSource); + } + + return promise.value; +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/join.m b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/join.m new file mode 100644 index 00000000000..b18e05269e1 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/join.m @@ -0,0 +1,47 @@ +#import "AnyPromise.h" +#import "AnyPromise+Private.h" +@import Foundation.NSDictionary; +@import Foundation.NSError; +@import Foundation.NSNull; +#import +#import + +@implementation AnyPromise (join) + +AnyPromise *PMKJoin(NSArray *promises) { + if (promises == nil) + return [AnyPromise promiseWithValue:[NSError errorWithDomain:PMKErrorDomain code:PMKInvalidUsageError userInfo:@{NSLocalizedDescriptionKey: @"PMKJoin(nil)"}]]; + + if (promises.count == 0) + return [AnyPromise promiseWithValue:promises]; + + return [AnyPromise promiseWithResolverBlock:^(PMKResolver resolve) { + NSPointerArray *results = NSPointerArrayMake(promises.count); + __block int32_t countdown = (int32_t)promises.count; + __block BOOL rejected = NO; + + [promises enumerateObjectsUsingBlock:^(AnyPromise *promise, NSUInteger ii, BOOL *stop) { + [promise pipe:^(id value) { + + if (IsError(value)) { + [value pmk_consume]; + rejected = YES; + } + + [results replacePointerAtIndex:ii withPointer:(__bridge void *)(value ?: [NSNull null])]; + + if (OSAtomicDecrement32(&countdown) == 0) { + if (!rejected) { + resolve(results.allObjects); + } else { + id userInfo = @{PMKJoinPromisesKey: promises}; + id err = [NSError errorWithDomain:PMKErrorDomain code:PMKJoinError userInfo:userInfo]; + resolve(err); + } + } + }]; + }]; + }]; +} + +@end diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/join.swift b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/join.swift new file mode 100644 index 00000000000..22f2da367ed --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/join.swift @@ -0,0 +1,44 @@ +import Dispatch + +/** + Waits on all provided promises. + + `when` rejects as soon as one of the provided promises rejects. `join` waits on all provided promises, then rejects if any of those promises rejected, otherwise it fulfills with values from the provided promises. + + join(promise1, promise2, promise3).then { results in + //… + }.error { error in + switch error { + case Error.Join(let promises): + //… + } + } + + - Returns: A new promise that resolves once all the provided promises resolve. +*/ +public func join(promises: Promise...) -> Promise<[T]> { + var countdown = promises.count + let barrier = dispatch_queue_create("org.promisekit.barrier.join", DISPATCH_QUEUE_CONCURRENT) + var rejected = false + + return Promise { fulfill, reject in + for promise in promises { + promise.pipe { resolution in + dispatch_barrier_sync(barrier) { + if case .Rejected(_, let token) = resolution { + token.consumed = true // the parent Error.Join consumes all + rejected = true + } + + if --countdown == 0 { + if rejected { + reject(Error.Join(promises)) + } else { + fulfill(promises.map{ $0.value! }) + } + } + } + } + } + } +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/race.swift b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/race.swift new file mode 100644 index 00000000000..2b60ca476b9 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/race.swift @@ -0,0 +1,20 @@ + +/** + Resolves with the first resolving promise from a set of promises. + + ``` + race(promise1, promise2, promise3).then { winner in + //… + } + ``` + + - Returns: A new promise that resolves when the first promise in the provided promises resolves. + - Warning: If any of the provided promises reject, the returned promise is rejected. +*/ +public func race(promises: Promise...) -> Promise { + return Promise(sealant: { resolve in + for promise in promises { + promise.pipe(resolve) + } + }) +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/when.m b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/when.m new file mode 100644 index 00000000000..b4f21f23332 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/when.m @@ -0,0 +1,86 @@ +#import "AnyPromise.h" +#import "AnyPromise+Private.h" +@import Foundation.NSDictionary; +@import Foundation.NSError; +@import Foundation.NSProgress; +@import Foundation.NSNull; +#import +#import "Umbrella.h" + +// NSProgress resources: +// * https://robots.thoughtbot.com/asynchronous-nsprogress +// * http://oleb.net/blog/2014/03/nsprogress/ +// NSProgress! Beware! +// * https://github.com/AFNetworking/AFNetworking/issues/2261 + +AnyPromise *PMKWhen(id promises) { + if (promises == nil) + return [AnyPromise promiseWithValue:[NSError errorWithDomain:PMKErrorDomain code:PMKInvalidUsageError userInfo:@{NSLocalizedDescriptionKey: @"PMKWhen(nil)"}]]; + + if ([promises isKindOfClass:[NSArray class]] || [promises isKindOfClass:[NSDictionary class]]) { + if ([promises count] == 0) + return [AnyPromise promiseWithValue:promises]; + } else if ([promises isKindOfClass:[AnyPromise class]]) { + promises = @[promises]; + } else { + return [AnyPromise promiseWithValue:promises]; + } + +#ifndef PMKDisableProgress + NSProgress *progress = [NSProgress progressWithTotalUnitCount:[promises count]]; + progress.pausable = NO; + progress.cancellable = NO; +#else + struct PMKProgress { + int completedUnitCount; + int totalUnitCount; + }; + __block struct PMKProgress progress; +#endif + + __block int32_t countdown = (int32_t)[promises count]; + BOOL const isdict = [promises isKindOfClass:[NSDictionary class]]; + + return [AnyPromise promiseWithResolverBlock:^(PMKResolver resolve) { + NSInteger index = 0; + + for (__strong id key in promises) { + AnyPromise *promise = isdict ? promises[key] : key; + if (!isdict) key = @(index); + + if (![promise isKindOfClass:[AnyPromise class]]) + promise = [AnyPromise promiseWithValue:promise]; + + [promise pipe:^(id value){ + if (progress.fractionCompleted >= 1) + return; + + if (IsError(value)) { + progress.completedUnitCount = progress.totalUnitCount; + resolve(NSErrorSupplement(value, @{PMKFailingPromiseIndexKey: key})); + } + else if (OSAtomicDecrement32(&countdown) == 0) { + progress.completedUnitCount = progress.totalUnitCount; + + id results; + if (isdict) { + results = [NSMutableDictionary new]; + for (id key in promises) { + id promise = promises[key]; + results[key] = IsPromise(promise) ? ((AnyPromise *)promise).value : promise; + } + } else { + results = [NSMutableArray new]; + for (AnyPromise *promise in promises) { + id value = IsPromise(promise) ? (promise.value ?: [NSNull null]) : promise; + [results addObject:value]; + } + } + resolve(results); + } else { + progress.completedUnitCount++; + } + }]; + } + }]; +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/when.swift b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/when.swift new file mode 100644 index 00000000000..f6ab1324291 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/PromiseKit/Sources/when.swift @@ -0,0 +1,87 @@ +import Foundation.NSProgress + +private func _when(promises: [Promise]) -> Promise { + let (rootPromise, fulfill, reject) = Promise.pendingPromise() +#if !PMKDisableProgress + let progress = NSProgress(totalUnitCount: Int64(promises.count)) + progress.cancellable = false + progress.pausable = false +#else + var progress: (completedUnitCount: Int, totalUnitCount: Int) = (0, 0) +#endif + var countdown = promises.count + if countdown == 0 { + fulfill() + return rootPromise + } + let barrier = dispatch_queue_create("org.promisekit.barrier.when", DISPATCH_QUEUE_CONCURRENT) + + for (index, promise) in promises.enumerate() { + promise.pipe { resolution in + dispatch_barrier_sync(barrier) { + switch resolution { + case .Rejected(let error, let token): + token.consumed = true // all errors are consumed by the parent Error.When + if rootPromise.pending { + progress.completedUnitCount = progress.totalUnitCount + reject(Error.When(index, error)) + } + case .Fulfilled: + guard rootPromise.pending else { return } + progress.completedUnitCount++ + if --countdown == 0 { + fulfill() + } + } + } + } + } + + return rootPromise +} + +/** + Wait for all promises in a set to resolve. + + For example: + + when(promise1, promise2).then { results in + //… + }.error { error in + switch error { + case Error.When(let index, NSURLError.NoConnection): + //… + case Error.When(let index, CLError.NotAuthorized): + //… + } + } + + - Warning: If *any* of the provided promises reject, the returned promise is immediately rejected with that promise’s rejection. The error’s `userInfo` object is supplemented with `PMKFailingPromiseIndexKey`. + - Warning: In the event of rejection the other promises will continue to resolve and, as per any other promise, will either fulfill or reject. This is the right pattern for `getter` style asynchronous tasks, but often for `setter` tasks (eg. storing data on a server), you most likely will need to wait on all tasks and then act based on which have succeeded and which have failed, in such situations use `join`. + - Parameter promises: The promises upon which to wait before the returned promise resolves. + - Returns: A new promise that resolves when all the provided promises fulfill or one of the provided promises rejects. + - SeeAlso: `join()` +*/ +public func when(promises: [Promise]) -> Promise<[T]> { + return _when(promises).then(on: zalgo) { promises.map{ $0.value! } } +} + +public func when(promises: Promise...) -> Promise<[T]> { + return when(promises) +} + +public func when(promises: Promise...) -> Promise { + return _when(promises) +} + +public func when(promises: [Promise]) -> Promise { + return _when(promises) +} + +public func when(pu: Promise, _ pv: Promise) -> Promise<(U, V)> { + return _when([pu.asVoid(), pv.asVoid()]).then(on: zalgo) { (pu.value!, pv.value!) } +} + +public func when(pu: Promise, _ pv: Promise, _ px: Promise) -> Promise<(U, V, X)> { + return _when([pu.asVoid(), pv.asVoid(), px.asVoid()]).then(on: zalgo) { (pu.value!, pv.value!, px.value!) } +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Alamofire/Alamofire-dummy.m b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Alamofire/Alamofire-dummy.m new file mode 100644 index 00000000000..a6c4594242e --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Alamofire/Alamofire-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Alamofire : NSObject +@end +@implementation PodsDummy_Alamofire +@end diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Alamofire/Alamofire-prefix.pch b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Alamofire/Alamofire-prefix.pch new file mode 100644 index 00000000000..aa992a4adb2 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Alamofire/Alamofire-prefix.pch @@ -0,0 +1,4 @@ +#ifdef __OBJC__ +#import +#endif + diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Alamofire/Alamofire-umbrella.h b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Alamofire/Alamofire-umbrella.h new file mode 100644 index 00000000000..6b71676a9bd --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Alamofire/Alamofire-umbrella.h @@ -0,0 +1,6 @@ +#import + + +FOUNDATION_EXPORT double AlamofireVersionNumber; +FOUNDATION_EXPORT const unsigned char AlamofireVersionString[]; + diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Alamofire/Alamofire.modulemap b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Alamofire/Alamofire.modulemap new file mode 100644 index 00000000000..d1f125fab6b --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Alamofire/Alamofire.modulemap @@ -0,0 +1,6 @@ +framework module Alamofire { + umbrella header "Alamofire-umbrella.h" + + export * + module * { export * } +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Alamofire/Alamofire.xcconfig b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Alamofire/Alamofire.xcconfig new file mode 100644 index 00000000000..baea9f3b46a --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Alamofire/Alamofire.xcconfig @@ -0,0 +1,5 @@ +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Alamofire" "${PODS_ROOT}/Headers/Public" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_ROOT = ${SRCROOT} +SKIP_INSTALL = YES \ No newline at end of file diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Alamofire/Info.plist b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Alamofire/Info.plist new file mode 100644 index 00000000000..93987c18ff5 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Alamofire/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + org.cocoapods.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 3.1.5 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/OMGHTTPURLRQ/Info.plist b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/OMGHTTPURLRQ/Info.plist new file mode 100644 index 00000000000..ce3a3137315 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/OMGHTTPURLRQ/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + org.cocoapods.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 3.1.1 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/OMGHTTPURLRQ/OMGHTTPURLRQ-dummy.m b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/OMGHTTPURLRQ/OMGHTTPURLRQ-dummy.m new file mode 100644 index 00000000000..144970817e1 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/OMGHTTPURLRQ/OMGHTTPURLRQ-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_OMGHTTPURLRQ : NSObject +@end +@implementation PodsDummy_OMGHTTPURLRQ +@end diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/OMGHTTPURLRQ/OMGHTTPURLRQ-prefix.pch b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/OMGHTTPURLRQ/OMGHTTPURLRQ-prefix.pch new file mode 100644 index 00000000000..aa992a4adb2 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/OMGHTTPURLRQ/OMGHTTPURLRQ-prefix.pch @@ -0,0 +1,4 @@ +#ifdef __OBJC__ +#import +#endif + diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/OMGHTTPURLRQ/OMGHTTPURLRQ-umbrella.h b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/OMGHTTPURLRQ/OMGHTTPURLRQ-umbrella.h new file mode 100644 index 00000000000..e6ad2ae2f6d --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/OMGHTTPURLRQ/OMGHTTPURLRQ-umbrella.h @@ -0,0 +1,9 @@ +#import + +#import "OMGFormURLEncode.h" +#import "OMGHTTPURLRQ.h" +#import "OMGUserAgent.h" + +FOUNDATION_EXPORT double OMGHTTPURLRQVersionNumber; +FOUNDATION_EXPORT const unsigned char OMGHTTPURLRQVersionString[]; + diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/OMGHTTPURLRQ/OMGHTTPURLRQ.modulemap b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/OMGHTTPURLRQ/OMGHTTPURLRQ.modulemap new file mode 100644 index 00000000000..f508eea999b --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/OMGHTTPURLRQ/OMGHTTPURLRQ.modulemap @@ -0,0 +1,6 @@ +framework module OMGHTTPURLRQ { + umbrella header "OMGHTTPURLRQ-umbrella.h" + + export * + module * { export * } +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/OMGHTTPURLRQ/OMGHTTPURLRQ.xcconfig b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/OMGHTTPURLRQ/OMGHTTPURLRQ.xcconfig new file mode 100644 index 00000000000..13e88fd2ece --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/OMGHTTPURLRQ/OMGHTTPURLRQ.xcconfig @@ -0,0 +1,4 @@ +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/OMGHTTPURLRQ" "${PODS_ROOT}/Headers/Public" +PODS_ROOT = ${SRCROOT} +SKIP_INSTALL = YES \ No newline at end of file diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/PetstoreClient/Info.plist b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/PetstoreClient/Info.plist new file mode 100644 index 00000000000..94e53826685 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/PetstoreClient/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + org.cocoapods.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 0.0.1 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/PetstoreClient/PetstoreClient-dummy.m b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/PetstoreClient/PetstoreClient-dummy.m new file mode 100644 index 00000000000..749b412f85c --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/PetstoreClient/PetstoreClient-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_PetstoreClient : NSObject +@end +@implementation PodsDummy_PetstoreClient +@end diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/PetstoreClient/PetstoreClient-prefix.pch b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/PetstoreClient/PetstoreClient-prefix.pch new file mode 100644 index 00000000000..aa992a4adb2 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/PetstoreClient/PetstoreClient-prefix.pch @@ -0,0 +1,4 @@ +#ifdef __OBJC__ +#import +#endif + diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/PetstoreClient/PetstoreClient-umbrella.h b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/PetstoreClient/PetstoreClient-umbrella.h new file mode 100644 index 00000000000..75c63f7c53e --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/PetstoreClient/PetstoreClient-umbrella.h @@ -0,0 +1,6 @@ +#import + + +FOUNDATION_EXPORT double PetstoreClientVersionNumber; +FOUNDATION_EXPORT const unsigned char PetstoreClientVersionString[]; + diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/PetstoreClient/PetstoreClient.modulemap b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/PetstoreClient/PetstoreClient.modulemap new file mode 100644 index 00000000000..7fdfc46cf79 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/PetstoreClient/PetstoreClient.modulemap @@ -0,0 +1,6 @@ +framework module PetstoreClient { + umbrella header "PetstoreClient-umbrella.h" + + export * + module * { export * } +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/PetstoreClient/PetstoreClient.xcconfig b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/PetstoreClient/PetstoreClient.xcconfig new file mode 100644 index 00000000000..f579ebfea5e --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/PetstoreClient/PetstoreClient.xcconfig @@ -0,0 +1,5 @@ +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/PetstoreClient" "${PODS_ROOT}/Headers/Public" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_ROOT = ${SRCROOT} +SKIP_INSTALL = YES \ No newline at end of file diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Pods/Info.plist b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Pods/Info.plist new file mode 100644 index 00000000000..69745425863 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Pods/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + org.cocoapods.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown new file mode 100644 index 00000000000..a24fb37c814 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown @@ -0,0 +1,34 @@ +# Acknowledgements +This application makes use of the following third party libraries: + +## Alamofire + +Copyright (c) 2014–2016 Alamofire Software Foundation (http://alamofire.org/) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +## OMGHTTPURLRQ + +See README.markdown for full license text. + +## PromiseKit + +@see README +Generated by CocoaPods - http://cocoapods.org diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Pods/Pods-acknowledgements.plist b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Pods/Pods-acknowledgements.plist new file mode 100644 index 00000000000..0dca0acc18f --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Pods/Pods-acknowledgements.plist @@ -0,0 +1,72 @@ + + + + + PreferenceSpecifiers + + + FooterText + This application makes use of the following third party libraries: + Title + Acknowledgements + Type + PSGroupSpecifier + + + FooterText + Copyright (c) 2014–2016 Alamofire Software Foundation (http://alamofire.org/) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + Title + Alamofire + Type + PSGroupSpecifier + + + FooterText + See README.markdown for full license text. + Title + OMGHTTPURLRQ + Type + PSGroupSpecifier + + + FooterText + @see README + Title + PromiseKit + Type + PSGroupSpecifier + + + FooterText + Generated by CocoaPods - http://cocoapods.org + Title + + Type + PSGroupSpecifier + + + StringsTable + Acknowledgements + Title + Acknowledgements + + diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Pods/Pods-dummy.m b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Pods/Pods-dummy.m new file mode 100644 index 00000000000..ade64bd1a9b --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Pods/Pods-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods : NSObject +@end +@implementation PodsDummy_Pods +@end diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Pods/Pods-frameworks.sh b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Pods/Pods-frameworks.sh new file mode 100755 index 00000000000..be3c5c77d9f --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Pods/Pods-frameworks.sh @@ -0,0 +1,97 @@ +#!/bin/sh +set -e + +echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + +SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" + +install_framework() +{ + if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then + local source="${BUILT_PRODUCTS_DIR}/$1" + elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then + local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" + elif [ -r "$1" ]; then + local source="$1" + fi + + local destination="${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + + if [ -L "${source}" ]; then + echo "Symlinked..." + source="$(readlink "${source}")" + fi + + # use filter instead of exclude so missing patterns dont' throw errors + echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" + rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" + + local basename + basename="$(basename -s .framework "$1")" + binary="${destination}/${basename}.framework/${basename}" + if ! [ -r "$binary" ]; then + binary="${destination}/${basename}" + fi + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then + strip_invalid_archs "$binary" + fi + + # Resign the code if required by the build settings to avoid unstable apps + code_sign_if_enabled "${destination}/$(basename "$1")" + + # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. + if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then + local swift_runtime_libs + swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) + for lib in $swift_runtime_libs; do + echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" + rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" + code_sign_if_enabled "${destination}/${lib}" + done + fi +} + +# Signs a framework with the provided identity +code_sign_if_enabled() { + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + # Use the current code_sign_identitiy + echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" + echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} --preserve-metadata=identifier,entitlements \"$1\"" + /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} --preserve-metadata=identifier,entitlements "$1" + fi +} + +# Strip invalid architectures +strip_invalid_archs() { + binary="$1" + # Get architectures for current file + archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" + stripped="" + for arch in $archs; do + if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then + # Strip non-valid architectures in-place + lipo -remove "$arch" -output "$binary" "$binary" || exit 1 + stripped="$stripped $arch" + fi + done + if [[ "$stripped" ]]; then + echo "Stripped $binary of architectures:$stripped" + fi +} + + +if [[ "$CONFIGURATION" == "Debug" ]]; then + install_framework "Pods/Alamofire.framework" + install_framework "Pods/OMGHTTPURLRQ.framework" + install_framework "Pods/PetstoreClient.framework" + install_framework "Pods/PromiseKit.framework" +fi +if [[ "$CONFIGURATION" == "Release" ]]; then + install_framework "Pods/Alamofire.framework" + install_framework "Pods/OMGHTTPURLRQ.framework" + install_framework "Pods/PetstoreClient.framework" + install_framework "Pods/PromiseKit.framework" +fi diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Pods/Pods-resources.sh b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Pods/Pods-resources.sh new file mode 100755 index 00000000000..16774fb4661 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Pods/Pods-resources.sh @@ -0,0 +1,95 @@ +#!/bin/sh +set -e + +mkdir -p "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + +RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt +> "$RESOURCES_TO_COPY" + +XCASSET_FILES=() + +realpath() { + DIRECTORY="$(cd "${1%/*}" && pwd)" + FILENAME="${1##*/}" + echo "$DIRECTORY/$FILENAME" +} + +install_resource() +{ + case $1 in + *.storyboard) + echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc ${PODS_ROOT}/$1 --sdk ${SDKROOT}" + ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" + ;; + *.xib) + echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib ${PODS_ROOT}/$1 --sdk ${SDKROOT}" + ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" + ;; + *.framework) + echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + echo "rsync -av ${PODS_ROOT}/$1 ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + rsync -av "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + ;; + *.xcdatamodel) + echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1"`.mom\"" + xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodel`.mom" + ;; + *.xcdatamodeld) + echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd\"" + xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd" + ;; + *.xcmappingmodel) + echo "xcrun mapc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcmappingmodel`.cdm\"" + xcrun mapc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcmappingmodel`.cdm" + ;; + *.xcassets) + ABSOLUTE_XCASSET_FILE=$(realpath "${PODS_ROOT}/$1") + XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") + ;; + /*) + echo "$1" + echo "$1" >> "$RESOURCES_TO_COPY" + ;; + *) + echo "${PODS_ROOT}/$1" + echo "${PODS_ROOT}/$1" >> "$RESOURCES_TO_COPY" + ;; + esac +} + +mkdir -p "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then + mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi +rm -f "$RESOURCES_TO_COPY" + +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] +then + case "${TARGETED_DEVICE_FAMILY}" in + 1,2) + TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" + ;; + 1) + TARGET_DEVICE_ARGS="--target-device iphone" + ;; + 2) + TARGET_DEVICE_ARGS="--target-device ipad" + ;; + *) + TARGET_DEVICE_ARGS="--target-device mac" + ;; + esac + + # Find all other xcassets (this unfortunately includes those of path pods and other targets). + OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) + while read line; do + if [[ $line != "`realpath $PODS_ROOT`*" ]]; then + XCASSET_FILES+=("$line") + fi + done <<<"$OTHER_XCASSETS" + + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${IPHONEOS_DEPLOYMENT_TARGET}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Pods/Pods-umbrella.h b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Pods/Pods-umbrella.h new file mode 100644 index 00000000000..21dcfd2c21e --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Pods/Pods-umbrella.h @@ -0,0 +1,6 @@ +#import + + +FOUNDATION_EXPORT double PodsVersionNumber; +FOUNDATION_EXPORT const unsigned char PodsVersionString[]; + diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Pods/Pods.debug.xcconfig b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Pods/Pods.debug.xcconfig new file mode 100644 index 00000000000..ed219269397 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Pods/Pods.debug.xcconfig @@ -0,0 +1,9 @@ +EMBEDDED_CONTENT_CONTAINS_SWIFT = YES +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +OTHER_CFLAGS = $(inherited) -iquote "$CONFIGURATION_BUILD_DIR/Alamofire.framework/Headers" -iquote "$CONFIGURATION_BUILD_DIR/OMGHTTPURLRQ.framework/Headers" -iquote "$CONFIGURATION_BUILD_DIR/PetstoreClient.framework/Headers" -iquote "$CONFIGURATION_BUILD_DIR/PromiseKit.framework/Headers" +OTHER_LDFLAGS = $(inherited) -framework "Alamofire" -framework "OMGHTTPURLRQ" -framework "PetstoreClient" -framework "PromiseKit" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_FRAMEWORK_BUILD_PATH = $(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Pods +PODS_ROOT = ${SRCROOT}/Pods +SWIFT_INSTALL_OBJC_HEADER = NO \ No newline at end of file diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Pods/Pods.modulemap b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Pods/Pods.modulemap new file mode 100644 index 00000000000..84134130779 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Pods/Pods.modulemap @@ -0,0 +1,6 @@ +framework module Pods { + umbrella header "Pods-umbrella.h" + + export * + module * { export * } +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Pods/Pods.release.xcconfig b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Pods/Pods.release.xcconfig new file mode 100644 index 00000000000..ed219269397 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/Pods/Pods.release.xcconfig @@ -0,0 +1,9 @@ +EMBEDDED_CONTENT_CONTAINS_SWIFT = YES +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +OTHER_CFLAGS = $(inherited) -iquote "$CONFIGURATION_BUILD_DIR/Alamofire.framework/Headers" -iquote "$CONFIGURATION_BUILD_DIR/OMGHTTPURLRQ.framework/Headers" -iquote "$CONFIGURATION_BUILD_DIR/PetstoreClient.framework/Headers" -iquote "$CONFIGURATION_BUILD_DIR/PromiseKit.framework/Headers" +OTHER_LDFLAGS = $(inherited) -framework "Alamofire" -framework "OMGHTTPURLRQ" -framework "PetstoreClient" -framework "PromiseKit" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_FRAMEWORK_BUILD_PATH = $(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Pods +PODS_ROOT = ${SRCROOT}/Pods +SWIFT_INSTALL_OBJC_HEADER = NO \ No newline at end of file diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/PromiseKit/Info.plist b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/PromiseKit/Info.plist new file mode 100644 index 00000000000..26f3ef80b78 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/PromiseKit/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + org.cocoapods.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 3.0.2 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/PromiseKit/PromiseKit-dummy.m b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/PromiseKit/PromiseKit-dummy.m new file mode 100644 index 00000000000..ce92451305b --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/PromiseKit/PromiseKit-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_PromiseKit : NSObject +@end +@implementation PodsDummy_PromiseKit +@end diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/PromiseKit/PromiseKit-prefix.pch b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/PromiseKit/PromiseKit-prefix.pch new file mode 100644 index 00000000000..aa992a4adb2 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/PromiseKit/PromiseKit-prefix.pch @@ -0,0 +1,4 @@ +#ifdef __OBJC__ +#import +#endif + diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/PromiseKit/PromiseKit.modulemap b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/PromiseKit/PromiseKit.modulemap new file mode 100644 index 00000000000..7e55ef9dc2b --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/PromiseKit/PromiseKit.modulemap @@ -0,0 +1,32 @@ +framework module PromiseKit { + umbrella header "Umbrella.h" + + header "NSError+Cancellation.h" + + exclude header "AnyPromise.h" + exclude header "PromiseKit.h" + exclude header "PMKPromise.h" + exclude header "Promise.h" + + exclude header "Pods-PromiseKit-umbrella.h" + + exclude header "ACAccountStore+AnyPromise.h" + exclude header "AVAudioSession+AnyPromise.h" + exclude header "CKContainer+AnyPromise.h" + exclude header "CKDatabase+AnyPromise.h" + exclude header "CLGeocoder+AnyPromise.h" + exclude header "CLLocationManager+AnyPromise.h" + exclude header "NSNotificationCenter+AnyPromise.h" + exclude header "NSTask+AnyPromise.h" + exclude header "NSURLConnection+AnyPromise.h" + exclude header "MKDirections+AnyPromise.h" + exclude header "MKMapSnapshotter+AnyPromise.h" + exclude header "CALayer+AnyPromise.h" + exclude header "SLRequest+AnyPromise.h" + exclude header "SKRequest+AnyPromise.h" + exclude header "SCNetworkReachability+AnyPromise.h" + exclude header "UIActionSheet+AnyPromise.h" + exclude header "UIAlertView+AnyPromise.h" + exclude header "UIView+AnyPromise.h" + exclude header "UIViewController+AnyPromise.h" +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/PromiseKit/PromiseKit.xcconfig b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/PromiseKit/PromiseKit.xcconfig new file mode 100644 index 00000000000..66f974aa5ca --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Target Support Files/PromiseKit/PromiseKit.xcconfig @@ -0,0 +1,7 @@ +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/PromiseKit" "${PODS_ROOT}/Headers/Public" +OTHER_LDFLAGS = -framework "Foundation" -framework "QuartzCore" -framework "UIKit" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_ROOT = ${SRCROOT} +SKIP_INSTALL = YES +SWIFT_INSTALL_OBJC_HEADER = NO \ No newline at end of file diff --git a/samples/client/petstore/swift/SwaggerClientTests/SwaggerClient.xcodeproj/project.pbxproj b/samples/client/petstore/swift/SwaggerClientTests/SwaggerClient.xcodeproj/project.pbxproj index d495cb15fe5..82da934d964 100644 --- a/samples/client/petstore/swift/SwaggerClientTests/SwaggerClient.xcodeproj/project.pbxproj +++ b/samples/client/petstore/swift/SwaggerClientTests/SwaggerClient.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 30ED4051B9A69550250EC1E8 /* Pods.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C07EC0A94AA0F86D60668B32 /* Pods.framework */; }; 6D4EFB951C692C6300B96B06 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D4EFB941C692C6300B96B06 /* AppDelegate.swift */; }; 6D4EFB971C692C6300B96B06 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D4EFB961C692C6300B96B06 /* ViewController.swift */; }; 6D4EFB9A1C692C6300B96B06 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6D4EFB981C692C6300B96B06 /* Main.storyboard */; }; @@ -36,6 +37,9 @@ 6D4EFBA51C692C6300B96B06 /* SwaggerClientTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SwaggerClientTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 6D4EFBA91C692C6300B96B06 /* SwaggerClientTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwaggerClientTests.swift; sourceTree = ""; }; 6D4EFBAB1C692C6300B96B06 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 8A9666BD47569881BB2CE936 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = ""; }; + C07EC0A94AA0F86D60668B32 /* Pods.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DB0055390ED4A7AE7901DEDD /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.release.xcconfig; path = "Pods/Target Support Files/Pods/Pods.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -43,6 +47,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 30ED4051B9A69550250EC1E8 /* Pods.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -56,12 +61,31 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 0E57353437EAD141ADC443DF /* Pods */ = { + isa = PBXGroup; + children = ( + 8A9666BD47569881BB2CE936 /* Pods.debug.xcconfig */, + DB0055390ED4A7AE7901DEDD /* Pods.release.xcconfig */, + ); + name = Pods; + sourceTree = ""; + }; + 3FABC56EC0BA84CBF4F99564 /* Frameworks */ = { + isa = PBXGroup; + children = ( + C07EC0A94AA0F86D60668B32 /* Pods.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 6D4EFB881C692C6300B96B06 = { isa = PBXGroup; children = ( 6D4EFB931C692C6300B96B06 /* SwaggerClient */, 6D4EFBA81C692C6300B96B06 /* SwaggerClientTests */, 6D4EFB921C692C6300B96B06 /* Products */, + 0E57353437EAD141ADC443DF /* Pods */, + 3FABC56EC0BA84CBF4F99564 /* Frameworks */, ); sourceTree = ""; }; @@ -103,9 +127,12 @@ isa = PBXNativeTarget; buildConfigurationList = 6D4EFBAE1C692C6300B96B06 /* Build configuration list for PBXNativeTarget "SwaggerClient" */; buildPhases = ( + 8FB32D92B81A800A0BF4CD88 /* Check Pods Manifest.lock */, 6D4EFB8D1C692C6300B96B06 /* Sources */, 6D4EFB8E1C692C6300B96B06 /* Frameworks */, 6D4EFB8F1C692C6300B96B06 /* Resources */, + 26CEE7DFCFEEFE9269C60201 /* Embed Pods Frameworks */, + C6760DAD5440B116B9A1DB88 /* Copy Pods Resources */, ); buildRules = ( ); @@ -192,6 +219,54 @@ }; /* End PBXResourcesBuildPhase section */ +/* Begin PBXShellScriptBuildPhase section */ + 26CEE7DFCFEEFE9269C60201 /* Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Embed Pods Frameworks"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 8FB32D92B81A800A0BF4CD88 /* Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; + C6760DAD5440B116B9A1DB88 /* Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + /* Begin PBXSourcesBuildPhase section */ 6D4EFB8D1C692C6300B96B06 /* Sources */ = { isa = PBXSourcesBuildPhase; @@ -325,6 +400,7 @@ }; 6D4EFBAF1C692C6300B96B06 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 8A9666BD47569881BB2CE936 /* Pods.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; INFOPLIST_FILE = SwaggerClient/Info.plist; @@ -336,6 +412,7 @@ }; 6D4EFBB01C692C6300B96B06 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = DB0055390ED4A7AE7901DEDD /* Pods.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; INFOPLIST_FILE = SwaggerClient/Info.plist; @@ -388,6 +465,7 @@ 6D4EFBB01C692C6300B96B06 /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; 6D4EFBB11C692C6300B96B06 /* Build configuration list for PBXNativeTarget "SwaggerClientTests" */ = { isa = XCConfigurationList; @@ -396,6 +474,7 @@ 6D4EFBB31C692C6300B96B06 /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; diff --git a/samples/client/petstore/swift/SwaggerClientTests/SwaggerClient.xcworkspace/contents.xcworkspacedata b/samples/client/petstore/swift/SwaggerClientTests/SwaggerClient.xcworkspace/contents.xcworkspacedata index 04b012d9673..9b3fa18954f 100644 --- a/samples/client/petstore/swift/SwaggerClientTests/SwaggerClient.xcworkspace/contents.xcworkspacedata +++ b/samples/client/petstore/swift/SwaggerClientTests/SwaggerClient.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + From 7c4983df165904adbe6b756398873806d4478edf Mon Sep 17 00:00:00 2001 From: Joseph Zuromski Date: Mon, 8 Feb 2016 12:59:35 -0800 Subject: [PATCH 096/189] fixup gitignore/schemes --- .gitignore | 2 +- .../xcschemes/PetstoreClient.xcscheme | 2 +- .../xcschemes/Alamofire.xcscheme | 60 ------------------ .../xcschemes/OMGHTTPURLRQ.xcscheme | 60 ------------------ .../jaz.xcuserdatad/xcschemes/Pods.xcscheme | 60 ------------------ .../xcschemes/PromiseKit.xcscheme | 60 ------------------ .../xcschemes/xcschememanagement.plist | 62 ------------------- 7 files changed, 2 insertions(+), 304 deletions(-) delete mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcuserdata/jaz.xcuserdatad/xcschemes/Alamofire.xcscheme delete mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcuserdata/jaz.xcuserdatad/xcschemes/OMGHTTPURLRQ.xcscheme delete mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcuserdata/jaz.xcuserdatad/xcschemes/Pods.xcscheme delete mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcuserdata/jaz.xcuserdatad/xcschemes/PromiseKit.xcscheme delete mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcuserdata/jaz.xcuserdatad/xcschemes/xcschememanagement.plist diff --git a/.gitignore b/.gitignore index 5e2ca7a088c..db13d62fe99 100644 --- a/.gitignore +++ b/.gitignore @@ -61,7 +61,7 @@ samples/client/petstore/python/.venv/ samples/client/petstore/objc/SwaggerClientTests/SwaggerClient.xcodeproj/xcuserdata samples/client/petstore/swift/SwaggerClientTests/SwaggerClient.xcodeproj/xcuserdata samples/client/petstore/swift/SwaggerClientTests/SwaggerClient.xcworkspace/xcuserdata - +samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcuserdata .settings *.mustache~ diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcshareddata/xcschemes/PetstoreClient.xcscheme b/samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcshareddata/xcschemes/PetstoreClient.xcscheme index 6308eaa4680..2df616a398a 100644 --- a/samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcshareddata/xcschemes/PetstoreClient.xcscheme +++ b/samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcshareddata/xcschemes/PetstoreClient.xcscheme @@ -14,7 +14,7 @@ buildForArchiving = "YES"> diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcuserdata/jaz.xcuserdatad/xcschemes/Alamofire.xcscheme b/samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcuserdata/jaz.xcuserdatad/xcschemes/Alamofire.xcscheme deleted file mode 100644 index 9a6985c1537..00000000000 --- a/samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcuserdata/jaz.xcuserdatad/xcschemes/Alamofire.xcscheme +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcuserdata/jaz.xcuserdatad/xcschemes/OMGHTTPURLRQ.xcscheme b/samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcuserdata/jaz.xcuserdatad/xcschemes/OMGHTTPURLRQ.xcscheme deleted file mode 100644 index 7861441461f..00000000000 --- a/samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcuserdata/jaz.xcuserdatad/xcschemes/OMGHTTPURLRQ.xcscheme +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcuserdata/jaz.xcuserdatad/xcschemes/Pods.xcscheme b/samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcuserdata/jaz.xcuserdatad/xcschemes/Pods.xcscheme deleted file mode 100644 index ff29468da01..00000000000 --- a/samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcuserdata/jaz.xcuserdatad/xcschemes/Pods.xcscheme +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcuserdata/jaz.xcuserdatad/xcschemes/PromiseKit.xcscheme b/samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcuserdata/jaz.xcuserdatad/xcschemes/PromiseKit.xcscheme deleted file mode 100644 index ccfb329c2ca..00000000000 --- a/samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcuserdata/jaz.xcuserdatad/xcschemes/PromiseKit.xcscheme +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcuserdata/jaz.xcuserdatad/xcschemes/xcschememanagement.plist b/samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcuserdata/jaz.xcuserdatad/xcschemes/xcschememanagement.plist deleted file mode 100644 index c5687742d6a..00000000000 --- a/samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcuserdata/jaz.xcuserdatad/xcschemes/xcschememanagement.plist +++ /dev/null @@ -1,62 +0,0 @@ - - - - - SchemeUserState - - Alamofire.xcscheme - - isShown - - - OMGHTTPURLRQ.xcscheme - - isShown - - - PetstoreClient.xcscheme - - isShown - - - Pods.xcscheme - - isShown - - - PromiseKit.xcscheme - - isShown - - - - SuppressBuildableAutocreation - - 190ACD3A51BC90B85EADB13E9CDD207B - - primary - - - 25EDA9CFC641C69402B3857A2C4A39F0 - - primary - - - 2FD913B4E24277823983BABFDB071664 - - primary - - - 432ECC54282C84882B482CCB4CF227FC - - primary - - - 7A5DBD588D2CC1C0CB1C42D4ED613FE4 - - primary - - - - - From 288acdb2d493de1cde17c6ab9f3911acfb68a411 Mon Sep 17 00:00:00 2001 From: Joseph Zuromski Date: Mon, 8 Feb 2016 13:04:18 -0800 Subject: [PATCH 097/189] one more gitignore to keep git clean after build --- .gitignore | 2 + .../xcschemes/PetstoreClient.xcscheme | 60 ------------------- 2 files changed, 2 insertions(+), 60 deletions(-) delete mode 100644 samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcshareddata/xcschemes/PetstoreClient.xcscheme diff --git a/.gitignore b/.gitignore index db13d62fe99..6be25ca784e 100644 --- a/.gitignore +++ b/.gitignore @@ -62,6 +62,8 @@ samples/client/petstore/objc/SwaggerClientTests/SwaggerClient.xcodeproj/xcuserda samples/client/petstore/swift/SwaggerClientTests/SwaggerClient.xcodeproj/xcuserdata samples/client/petstore/swift/SwaggerClientTests/SwaggerClient.xcworkspace/xcuserdata samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcuserdata +samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcshareddata/xcschemes + .settings *.mustache~ diff --git a/samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcshareddata/xcschemes/PetstoreClient.xcscheme b/samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcshareddata/xcschemes/PetstoreClient.xcscheme deleted file mode 100644 index 2df616a398a..00000000000 --- a/samples/client/petstore/swift/SwaggerClientTests/Pods/Pods.xcodeproj/xcshareddata/xcschemes/PetstoreClient.xcscheme +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - From 802f9e4424a077095858a68b18ddd0e00ac23ae9 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Mon, 8 Feb 2016 13:48:20 -0800 Subject: [PATCH 098/189] revert to `Object` when model missing --- .../main/java/io/swagger/codegen/InlineModelResolver.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java index 02bf82572e0..f3ea72ed5fd 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/InlineModelResolver.java @@ -218,7 +218,12 @@ public class InlineModelResolver { Map modelsToAdd = new HashMap(); for (String key : properties.keySet()) { Property property = properties.get(key); - if (property instanceof ObjectProperty && ((ObjectProperty)property).getProperties().size() > 0) { + if(property instanceof ObjectProperty && ((ObjectProperty)property).getProperties() == null) { + MapProperty mp = new MapProperty(); + mp.setAdditionalProperties(new StringProperty()); + properties.put(key, mp); + } + else if (property instanceof ObjectProperty && ((ObjectProperty)property).getProperties().size() > 0) { String modelName = uniqueName(path + "_" + key); ObjectProperty op = (ObjectProperty) property; @@ -276,7 +281,6 @@ public class InlineModelResolver { swagger.addDefinition(modelName, innerModel); } } - } else { } } if (propsToUpdate.size() > 0) { From e2d61abc10b6fb854601ea68431999bab8da0562 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Mon, 8 Feb 2016 13:48:31 -0800 Subject: [PATCH 099/189] update parser version --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 0cab362828b..17ad062e4f0 100644 --- a/pom.xml +++ b/pom.xml @@ -122,8 +122,8 @@ maven-compiler-plugin 3.0 - 1.6 - 1.6 + 1.7 + 1.7 From e99e32219810faa446fcdf3e57b206590c0f4e9c Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Mon, 8 Feb 2016 13:48:46 -0800 Subject: [PATCH 100/189] adde Date mapping, escape operationId --- .../languages/JavascriptClientCodegen.java | 27 +++++-------------- 1 file changed, 6 insertions(+), 21 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java index 2a60c7fc1f0..cc5dcff3fa2 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java @@ -1,35 +1,19 @@ package io.swagger.codegen.languages; import com.google.common.base.Strings; - -import io.swagger.codegen.CliOption; -import io.swagger.codegen.CodegenConfig; -import io.swagger.codegen.CodegenConstants; -import io.swagger.codegen.CodegenModel; -import io.swagger.codegen.CodegenOperation; -import io.swagger.codegen.CodegenProperty; -import io.swagger.codegen.CodegenType; -import io.swagger.codegen.DefaultCodegen; -import io.swagger.codegen.SupportingFile; +import io.swagger.codegen.*; import io.swagger.models.*; import io.swagger.models.properties.ArrayProperty; import io.swagger.models.properties.MapProperty; import io.swagger.models.properties.Property; import io.swagger.models.properties.RefProperty; - -import java.io.File; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.io.File; +import java.util.*; + public class JavascriptClientCodegen extends DefaultCodegen implements CodegenConfig { @SuppressWarnings("hiding") private static final Logger LOGGER = LoggerFactory.getLogger(JavascriptClientCodegen.class); @@ -133,6 +117,7 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo typeMapping.put("double", "Number"); typeMapping.put("number", "Number"); typeMapping.put("DateTime", "Date"); + typeMapping.put("Date", "Date"); // binary not supported in JavaScript client right now, using String as a workaround typeMapping.put("binary", "String"); @@ -358,7 +343,7 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo // method name cannot use reserved keyword, e.g. return if (reservedWords.contains(operationId)) { - throw new RuntimeException(operationId + " (reserved word) cannot be used as method name"); + operationId = escapeReservedWord(operationId); } return camelize(sanitizeName(operationId), true); From fff0951771e13842aef8e98cc632bab3b32c97d0 Mon Sep 17 00:00:00 2001 From: Joseph Zuromski Date: Mon, 8 Feb 2016 14:23:22 -0800 Subject: [PATCH 101/189] add in some real tests --- .../SwaggerClient.xcodeproj/project.pbxproj | 16 +++-- .../SwaggerClient/Info.plist | 12 ++++ .../SwaggerClientTests/Info.plist | 12 ++++ .../SwaggerClientTests/PetAPITests.swift | 49 +++++++++++++ .../SwaggerClientTests/StoreAPITests.swift | 49 +++++++++++++ .../SwaggerClientTests.swift | 36 ---------- .../SwaggerClientTests/UserAPITests.swift | 71 +++++++++++++++++++ 7 files changed, 205 insertions(+), 40 deletions(-) create mode 100644 samples/client/petstore/swift/SwaggerClientTests/SwaggerClientTests/PetAPITests.swift create mode 100644 samples/client/petstore/swift/SwaggerClientTests/SwaggerClientTests/StoreAPITests.swift delete mode 100644 samples/client/petstore/swift/SwaggerClientTests/SwaggerClientTests/SwaggerClientTests.swift create mode 100644 samples/client/petstore/swift/SwaggerClientTests/SwaggerClientTests/UserAPITests.swift diff --git a/samples/client/petstore/swift/SwaggerClientTests/SwaggerClient.xcodeproj/project.pbxproj b/samples/client/petstore/swift/SwaggerClientTests/SwaggerClient.xcodeproj/project.pbxproj index 82da934d964..d65a2a49ff8 100644 --- a/samples/client/petstore/swift/SwaggerClientTests/SwaggerClient.xcodeproj/project.pbxproj +++ b/samples/client/petstore/swift/SwaggerClientTests/SwaggerClient.xcodeproj/project.pbxproj @@ -13,7 +13,9 @@ 6D4EFB9A1C692C6300B96B06 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6D4EFB981C692C6300B96B06 /* Main.storyboard */; }; 6D4EFB9C1C692C6300B96B06 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6D4EFB9B1C692C6300B96B06 /* Assets.xcassets */; }; 6D4EFB9F1C692C6300B96B06 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6D4EFB9D1C692C6300B96B06 /* LaunchScreen.storyboard */; }; - 6D4EFBAA1C692C6300B96B06 /* SwaggerClientTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D4EFBA91C692C6300B96B06 /* SwaggerClientTests.swift */; }; + 6D4EFBB51C693BE200B96B06 /* PetAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D4EFBB41C693BE200B96B06 /* PetAPITests.swift */; }; + 6D4EFBB71C693BED00B96B06 /* StoreAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D4EFBB61C693BED00B96B06 /* StoreAPITests.swift */; }; + 6D4EFBB91C693BFC00B96B06 /* UserAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D4EFBB81C693BFC00B96B06 /* UserAPITests.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -35,8 +37,10 @@ 6D4EFB9E1C692C6300B96B06 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 6D4EFBA01C692C6300B96B06 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 6D4EFBA51C692C6300B96B06 /* SwaggerClientTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SwaggerClientTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 6D4EFBA91C692C6300B96B06 /* SwaggerClientTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwaggerClientTests.swift; sourceTree = ""; }; 6D4EFBAB1C692C6300B96B06 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 6D4EFBB41C693BE200B96B06 /* PetAPITests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PetAPITests.swift; sourceTree = ""; }; + 6D4EFBB61C693BED00B96B06 /* StoreAPITests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StoreAPITests.swift; sourceTree = ""; }; + 6D4EFBB81C693BFC00B96B06 /* UserAPITests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserAPITests.swift; sourceTree = ""; }; 8A9666BD47569881BB2CE936 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = ""; }; C07EC0A94AA0F86D60668B32 /* Pods.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods.framework; sourceTree = BUILT_PRODUCTS_DIR; }; DB0055390ED4A7AE7901DEDD /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.release.xcconfig; path = "Pods/Target Support Files/Pods/Pods.release.xcconfig"; sourceTree = ""; }; @@ -114,8 +118,10 @@ 6D4EFBA81C692C6300B96B06 /* SwaggerClientTests */ = { isa = PBXGroup; children = ( - 6D4EFBA91C692C6300B96B06 /* SwaggerClientTests.swift */, 6D4EFBAB1C692C6300B96B06 /* Info.plist */, + 6D4EFBB41C693BE200B96B06 /* PetAPITests.swift */, + 6D4EFBB61C693BED00B96B06 /* StoreAPITests.swift */, + 6D4EFBB81C693BFC00B96B06 /* UserAPITests.swift */, ); path = SwaggerClientTests; sourceTree = ""; @@ -281,7 +287,9 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 6D4EFBAA1C692C6300B96B06 /* SwaggerClientTests.swift in Sources */, + 6D4EFBB71C693BED00B96B06 /* StoreAPITests.swift in Sources */, + 6D4EFBB91C693BFC00B96B06 /* UserAPITests.swift in Sources */, + 6D4EFBB51C693BE200B96B06 /* PetAPITests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/samples/client/petstore/swift/SwaggerClientTests/SwaggerClient/Info.plist b/samples/client/petstore/swift/SwaggerClientTests/SwaggerClient/Info.plist index 40c6215d906..bb71d00fa8a 100644 --- a/samples/client/petstore/swift/SwaggerClientTests/SwaggerClient/Info.plist +++ b/samples/client/petstore/swift/SwaggerClientTests/SwaggerClient/Info.plist @@ -43,5 +43,17 @@ UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight + NSAppTransportSecurity + + NSExceptionDomains + + petstore.swagger.io + + + NSTemporaryExceptionAllowsInsecureHTTPLoads + + + + diff --git a/samples/client/petstore/swift/SwaggerClientTests/SwaggerClientTests/Info.plist b/samples/client/petstore/swift/SwaggerClientTests/SwaggerClientTests/Info.plist index ba72822e872..802f84f540d 100644 --- a/samples/client/petstore/swift/SwaggerClientTests/SwaggerClientTests/Info.plist +++ b/samples/client/petstore/swift/SwaggerClientTests/SwaggerClientTests/Info.plist @@ -20,5 +20,17 @@ ???? CFBundleVersion 1 + NSAppTransportSecurity + + NSExceptionDomains + + petstore.swagger.io + + + NSTemporaryExceptionAllowsInsecureHTTPLoads + + + + diff --git a/samples/client/petstore/swift/SwaggerClientTests/SwaggerClientTests/PetAPITests.swift b/samples/client/petstore/swift/SwaggerClientTests/SwaggerClientTests/PetAPITests.swift new file mode 100644 index 00000000000..59375736c59 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/SwaggerClientTests/PetAPITests.swift @@ -0,0 +1,49 @@ +// +// PetAPITests.swift +// SwaggerClient +// +// Created by Joseph Zuromski on 2/8/16. +// Copyright © 2016 Swagger. All rights reserved. +// + +import PetstoreClient +import PromiseKit +import XCTest +@testable import SwaggerClient + +class PetAPITests: XCTestCase { + + let testTimeout = 10.0 + + override func setUp() { + super.setUp() + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testxxx() { + let expectation = self.expectationWithDescription("testLogin") + PetstoreClientAPI.UserAPI.loginUser(username: "swiftTester", password: "swift").execute().then { response -> Void in + expectation.fulfill() + }.always { + // Noop for now + }.error { errorType -> Void in + // The server isn't returning JSON - and currently the alamofire implementation + // always parses responses as JSON, so making an exception for this here + // Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." + // UserInfo={NSDebugDescription=Invalid value around character 0.} + let error = errorType as NSError + if error.code == 3840 { + expectation.fulfill() + } else { + XCTFail("error logging in") + } + } + self.waitForExpectationsWithTimeout(testTimeout, handler: nil) + } + +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/SwaggerClientTests/StoreAPITests.swift b/samples/client/petstore/swift/SwaggerClientTests/SwaggerClientTests/StoreAPITests.swift new file mode 100644 index 00000000000..3fad76aae4f --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/SwaggerClientTests/StoreAPITests.swift @@ -0,0 +1,49 @@ +// +// StoreAPITests.swift +// SwaggerClient +// +// Created by Joseph Zuromski on 2/8/16. +// Copyright © 2016 Swagger. All rights reserved. +// + +import PetstoreClient +import PromiseKit +import XCTest +@testable import SwaggerClient + +class StoreAPITests: XCTestCase { + + let testTimeout = 10.0 + + override func setUp() { + super.setUp() + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testxxx() { + let expectation = self.expectationWithDescription("testLogin") + PetstoreClientAPI.UserAPI.loginUser(username: "swiftTester", password: "swift").execute().then { response -> Void in + expectation.fulfill() + }.always { + // Noop for now + }.error { errorType -> Void in + // The server isn't returning JSON - and currently the alamofire implementation + // always parses responses as JSON, so making an exception for this here + // Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." + // UserInfo={NSDebugDescription=Invalid value around character 0.} + let error = errorType as NSError + if error.code == 3840 { + expectation.fulfill() + } else { + XCTFail("error logging in") + } + } + self.waitForExpectationsWithTimeout(testTimeout, handler: nil) + } + +} diff --git a/samples/client/petstore/swift/SwaggerClientTests/SwaggerClientTests/SwaggerClientTests.swift b/samples/client/petstore/swift/SwaggerClientTests/SwaggerClientTests/SwaggerClientTests.swift deleted file mode 100644 index 27a86aa440a..00000000000 --- a/samples/client/petstore/swift/SwaggerClientTests/SwaggerClientTests/SwaggerClientTests.swift +++ /dev/null @@ -1,36 +0,0 @@ -// -// SwaggerClientTests.swift -// SwaggerClientTests -// -// Created by Joseph Zuromski on 2/8/16. -// Copyright © 2016 Swagger. All rights reserved. -// - -import XCTest -@testable import SwaggerClient - -class SwaggerClientTests: XCTestCase { - - override func setUp() { - super.setUp() - // Put setup code here. This method is called before the invocation of each test method in the class. - } - - override func tearDown() { - // Put teardown code here. This method is called after the invocation of each test method in the class. - super.tearDown() - } - - func testExample() { - // This is an example of a functional test case. - // Use XCTAssert and related functions to verify your tests produce the correct results. - } - - func testPerformanceExample() { - // This is an example of a performance test case. - self.measureBlock { - // Put the code you want to measure the time of here. - } - } - -} diff --git a/samples/client/petstore/swift/SwaggerClientTests/SwaggerClientTests/UserAPITests.swift b/samples/client/petstore/swift/SwaggerClientTests/SwaggerClientTests/UserAPITests.swift new file mode 100644 index 00000000000..b86dc2e1a06 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/SwaggerClientTests/UserAPITests.swift @@ -0,0 +1,71 @@ +// +// UserAPITests.swift +// SwaggerClient +// +// Created by Joseph Zuromski on 2/8/16. +// Copyright © 2016 Swagger. All rights reserved. +// + +import PetstoreClient +import PromiseKit +import XCTest +@testable import SwaggerClient + +class UserAPITests: XCTestCase { + + let testTimeout = 10.0 + + override func setUp() { + super.setUp() + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testLogin() { + let expectation = self.expectationWithDescription("testLogin") + PetstoreClientAPI.UserAPI.loginUser(username: "swiftTester", password: "swift").execute().then { response -> Void in + expectation.fulfill() + }.always { + // Noop for now + }.error { errorType -> Void in + // The server isn't returning JSON - and currently the alamofire implementation + // always parses responses as JSON, so making an exception for this here + // Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." + // UserInfo={NSDebugDescription=Invalid value around character 0.} + let error = errorType as NSError + if error.code == 3840 { + expectation.fulfill() + } else { + XCTFail("error logging in") + } + } + self.waitForExpectationsWithTimeout(testTimeout, handler: nil) + } + + func testLogout() { + let expectation = self.expectationWithDescription("testLogout") + PetstoreClientAPI.UserAPI.logoutUser().execute().then { response -> Void in + expectation.fulfill() + }.always { + // Noop for now + }.error { errorType -> Void in + // The server gives us no data back so alamofire parsing fails - at least + // verify that is the error we get here + // Error Domain=com.alamofire.error Code=-6006 "JSON could not be serialized. Input data was nil or zero + // length." UserInfo={NSLocalizedFailureReason=JSON could not be serialized. Input data was nil or zero + // length.} + let error = errorType as NSError + if error.code == -6006 { + expectation.fulfill() + } else { + XCTFail("error logging out") + } + } + self.waitForExpectationsWithTimeout(testTimeout, handler: nil) + } + +} From 2465f398da7b7bb4d2c4cf41b36b2d6a0b76ebdb Mon Sep 17 00:00:00 2001 From: Joseph Zuromski Date: Mon, 8 Feb 2016 14:43:08 -0800 Subject: [PATCH 102/189] add a couple more user tests --- .../SwaggerClientTests/UserAPITests.swift | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/samples/client/petstore/swift/SwaggerClientTests/SwaggerClientTests/UserAPITests.swift b/samples/client/petstore/swift/SwaggerClientTests/SwaggerClientTests/UserAPITests.swift index b86dc2e1a06..48c95c37b7d 100644 --- a/samples/client/petstore/swift/SwaggerClientTests/SwaggerClientTests/UserAPITests.swift +++ b/samples/client/petstore/swift/SwaggerClientTests/SwaggerClientTests/UserAPITests.swift @@ -68,4 +68,59 @@ class UserAPITests: XCTestCase { self.waitForExpectationsWithTimeout(testTimeout, handler: nil) } + func testCreateUser() { + let expectation = self.expectationWithDescription("testCreateUser") + let newUser = User() + newUser.email = "test@test.com" + newUser.firstName = "Test" + newUser.lastName = "Tester" + newUser.id = 1000 + newUser.password = "test!" + newUser.phone = "867-5309" + newUser.username = "test@test.com" + newUser.userStatus = 0 + PetstoreClientAPI.UserAPI.createUser(body: newUser).execute().then { response -> Void in + expectation.fulfill() + }.always { + // Noop for now + }.error { errorType -> Void in + // The server gives us no data back so alamofire parsing fails - at least + // verify that is the error we get here + // Error Domain=com.alamofire.error Code=-6006 "JSON could not be serialized. Input data was nil or zero + // length." UserInfo={NSLocalizedFailureReason=JSON could not be serialized. Input data was nil or zero + // length.} + let error = errorType as NSError + if error.code == -6006 { + expectation.fulfill() + } else { + XCTFail("error creating user") + } + } + self.waitForExpectationsWithTimeout(testTimeout, handler: nil) + } + + func testGetUser() { + let expectation = self.expectationWithDescription("testGetUser") + PetstoreClientAPI.UserAPI.getUserByName(username: "test@test.com").execute().then { response -> Void in + let user = response.body + if (user.userStatus == 0 && + user.email == "test@test.com" && + user.firstName == "Test" && + user.lastName == "Tester" && + user.id == 1000 && + user.password == "test!" && + user.phone == "867-5309") { + + expectation.fulfill() + } else { + XCTFail("invalid user object") + } + }.always { + // Noop for now + }.error { errorType -> Void in + XCTFail("error getting user") + } + self.waitForExpectationsWithTimeout(testTimeout, handler: nil) + } + } From 9673b878a8bd91ea17680e3259130e4add70e06c Mon Sep 17 00:00:00 2001 From: Dave Holladay Date: Mon, 8 Feb 2016 22:54:45 +0000 Subject: [PATCH 103/189] Fix #1487, TypeScript-Angular output path wrong if apiPackage not the default --- .../languages/TypeScriptAngularClientCodegen.java | 9 +++++++-- .../codegen/languages/TypeScriptNodeClientCodegen.java | 7 ++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TypeScriptAngularClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TypeScriptAngularClientCodegen.java index 60b6f2b34c6..1e1acd65c08 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TypeScriptAngularClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TypeScriptAngularClientCodegen.java @@ -14,7 +14,13 @@ public class TypeScriptAngularClientCodegen extends AbstractTypeScriptClientCode public String getHelp() { return "Generates a TypeScript AngularJS client library."; } - + + @Override + public void processOpts() { + super.processOpts(); + supportingFiles.add(new SupportingFile("api.d.mustache", apiPackage().replace('.', File.separatorChar), "api.d.ts")); + } + public TypeScriptAngularClientCodegen() { super(); outputFolder = "generated-code/typescript-angular"; @@ -23,6 +29,5 @@ public class TypeScriptAngularClientCodegen extends AbstractTypeScriptClientCode embeddedTemplateDir = templateDir = "TypeScript-Angular"; apiPackage = "API.Client"; modelPackage = "API.Client"; - supportingFiles.add(new SupportingFile("api.d.mustache", apiPackage().replace('.', File.separatorChar), "api.d.ts")); } } diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TypeScriptNodeClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TypeScriptNodeClientCodegen.java index b4de0f7ed0c..77371a7fb58 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TypeScriptNodeClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TypeScriptNodeClientCodegen.java @@ -14,11 +14,16 @@ public class TypeScriptNodeClientCodegen extends AbstractTypeScriptClientCodegen return "Generates a TypeScript nodejs client library."; } + @Override + public void processOpts() { + super.processOpts(); + supportingFiles.add(new SupportingFile("api.mustache", null, "api.ts")); + } + public TypeScriptNodeClientCodegen() { super(); outputFolder = "generated-code/typescript-node"; embeddedTemplateDir = templateDir = "TypeScript-node"; - supportingFiles.add(new SupportingFile("api.mustache", null, "api.ts")); } } From d84953d504337c2f649d7a3c7962a790375fec5e Mon Sep 17 00:00:00 2001 From: Joseph Zuromski Date: Mon, 8 Feb 2016 15:22:32 -0800 Subject: [PATCH 104/189] add in more tests --- .../SwaggerClientTests/PetAPITests.swift | 63 +++++++++++++---- .../SwaggerClientTests/StoreAPITests.swift | 68 +++++++++++++++---- .../SwaggerClientTests/UserAPITests.swift | 45 ++++++++---- 3 files changed, 134 insertions(+), 42 deletions(-) diff --git a/samples/client/petstore/swift/SwaggerClientTests/SwaggerClientTests/PetAPITests.swift b/samples/client/petstore/swift/SwaggerClientTests/SwaggerClientTests/PetAPITests.swift index 59375736c59..63b3954b246 100644 --- a/samples/client/petstore/swift/SwaggerClientTests/SwaggerClientTests/PetAPITests.swift +++ b/samples/client/petstore/swift/SwaggerClientTests/SwaggerClientTests/PetAPITests.swift @@ -25,25 +25,60 @@ class PetAPITests: XCTestCase { super.tearDown() } - func testxxx() { - let expectation = self.expectationWithDescription("testLogin") - PetstoreClientAPI.UserAPI.loginUser(username: "swiftTester", password: "swift").execute().then { response -> Void in - expectation.fulfill() + func test1CreatePet() { + let expectation = self.expectationWithDescription("testCreatePet") + let newPet = Pet() + let category = PetstoreClient.Category() + category.id = 1234 + category.name = "eyeColor" + newPet.category = category + newPet.id = 1000 + newPet.name = "Fluffy" + newPet.status = .Available + PetstoreClientAPI.PetAPI.addPet(body: newPet).execute().then { response -> Void in + expectation.fulfill() }.always { // Noop for now }.error { errorType -> Void in - // The server isn't returning JSON - and currently the alamofire implementation - // always parses responses as JSON, so making an exception for this here - // Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." - // UserInfo={NSDebugDescription=Invalid value around character 0.} - let error = errorType as NSError - if error.code == 3840 { - expectation.fulfill() - } else { - XCTFail("error logging in") - } + XCTFail("error creating pet") } self.waitForExpectationsWithTimeout(testTimeout, handler: nil) } + func test2GetPet() { + let expectation = self.expectationWithDescription("testGetPet") + PetstoreClientAPI.PetAPI.getPetById(petId: 1000).execute().then { response -> Void in + let pet = response.body + XCTAssert(pet.id == 1000, "invalid id") + XCTAssert(pet.name == "Fluffy", "invalid name") + expectation.fulfill() + }.always { + // Noop for now + }.error { errorType -> Void in + XCTFail("error creating pet") + } + self.waitForExpectationsWithTimeout(testTimeout, handler: nil) + } + + func test3DeletePet() { + let expectation = self.expectationWithDescription("testDeletePet") + PetstoreClientAPI.PetAPI.deletePet(petId: 1000).execute().always { response -> Void in + // expectation.fulfill() + }.always { + // Noop for now + }.error { errorType -> Void in + // The server gives us no data back so alamofire parsing fails - at least + // verify that is the error we get here + // Error Domain=com.alamofire.error Code=-6006 "JSON could not be serialized. Input data was nil or zero + // length." UserInfo={NSLocalizedFailureReason=JSON could not be serialized. Input data was nil or zero + // length.} + let error = errorType as NSError + if error.code == -6006 { + expectation.fulfill() + } else { + XCTFail("error logging out") + } + } + self.waitForExpectationsWithTimeout(testTimeout, handler: nil) + } } diff --git a/samples/client/petstore/swift/SwaggerClientTests/SwaggerClientTests/StoreAPITests.swift b/samples/client/petstore/swift/SwaggerClientTests/SwaggerClientTests/StoreAPITests.swift index 3fad76aae4f..d0e3e312617 100644 --- a/samples/client/petstore/swift/SwaggerClientTests/SwaggerClientTests/StoreAPITests.swift +++ b/samples/client/petstore/swift/SwaggerClientTests/SwaggerClientTests/StoreAPITests.swift @@ -25,25 +25,65 @@ class StoreAPITests: XCTestCase { super.tearDown() } - func testxxx() { - let expectation = self.expectationWithDescription("testLogin") - PetstoreClientAPI.UserAPI.loginUser(username: "swiftTester", password: "swift").execute().then { response -> Void in - expectation.fulfill() + func test1PlaceOrder() { + let order = Order() + order.id = 1000 + order.petId = 1000 + order.complete = false + order.quantity = 10 + order.shipDate = NSDate() + order.status = .Placed + let expectation = self.expectationWithDescription("testPlaceOrder") + PetstoreClientAPI.StoreAPI.placeOrder(body: order).execute().then { response -> Void in + let order = response.body + XCTAssert(order.id == 1000, "invalid id") + XCTAssert(order.quantity == 10, "invalid quantity") + XCTAssert(order.status == .Placed, "invalid status") + expectation.fulfill() }.always { // Noop for now }.error { errorType -> Void in - // The server isn't returning JSON - and currently the alamofire implementation - // always parses responses as JSON, so making an exception for this here - // Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." - // UserInfo={NSDebugDescription=Invalid value around character 0.} - let error = errorType as NSError - if error.code == 3840 { - expectation.fulfill() - } else { - XCTFail("error logging in") - } + XCTFail("error placing order") } self.waitForExpectationsWithTimeout(testTimeout, handler: nil) } + func test2GetOrder() { + let expectation = self.expectationWithDescription("testGetOrder") + PetstoreClientAPI.StoreAPI.getOrderById(orderId: "1000").execute().then { response -> Void in + let order = response.body + XCTAssert(order.id == 1000, "invalid id") + XCTAssert(order.quantity == 10, "invalid quantity") + XCTAssert(order.status == .Placed, "invalid status") + expectation.fulfill() + }.always { + // Noop for now + }.error { errorType -> Void in + XCTFail("error placing order") + } + self.waitForExpectationsWithTimeout(testTimeout, handler: nil) + } + + func test3DeleteOrder() { + let expectation = self.expectationWithDescription("testDeleteOrder") + PetstoreClientAPI.StoreAPI.deleteOrder(orderId: "1000").execute().then { response -> Void in + expectation.fulfill() + }.always { + // Noop for now + }.error { errorType -> Void in + // The server gives us no data back so alamofire parsing fails - at least + // verify that is the error we get here + // Error Domain=com.alamofire.error Code=-6006 "JSON could not be serialized. Input data was nil or zero + // length." UserInfo={NSLocalizedFailureReason=JSON could not be serialized. Input data was nil or zero + // length.} + let error = errorType as NSError + if error.code == -6006 { + expectation.fulfill() + } else { + XCTFail("error deleting order") + } + } + self.waitForExpectationsWithTimeout(testTimeout, handler: nil) + } + } diff --git a/samples/client/petstore/swift/SwaggerClientTests/SwaggerClientTests/UserAPITests.swift b/samples/client/petstore/swift/SwaggerClientTests/SwaggerClientTests/UserAPITests.swift index 48c95c37b7d..34c60f25f15 100644 --- a/samples/client/petstore/swift/SwaggerClientTests/SwaggerClientTests/UserAPITests.swift +++ b/samples/client/petstore/swift/SwaggerClientTests/SwaggerClientTests/UserAPITests.swift @@ -68,7 +68,7 @@ class UserAPITests: XCTestCase { self.waitForExpectationsWithTimeout(testTimeout, handler: nil) } - func testCreateUser() { + func test1CreateUser() { let expectation = self.expectationWithDescription("testCreateUser") let newUser = User() newUser.email = "test@test.com" @@ -99,22 +99,17 @@ class UserAPITests: XCTestCase { self.waitForExpectationsWithTimeout(testTimeout, handler: nil) } - func testGetUser() { + func test2GetUser() { let expectation = self.expectationWithDescription("testGetUser") PetstoreClientAPI.UserAPI.getUserByName(username: "test@test.com").execute().then { response -> Void in let user = response.body - if (user.userStatus == 0 && - user.email == "test@test.com" && - user.firstName == "Test" && - user.lastName == "Tester" && - user.id == 1000 && - user.password == "test!" && - user.phone == "867-5309") { - - expectation.fulfill() - } else { - XCTFail("invalid user object") - } + XCTAssert(user.userStatus == 0, "invalid userStatus") + XCTAssert(user.email == "test@test.com", "invalid email") + XCTAssert(user.firstName == "Test", "invalid firstName") + XCTAssert(user.lastName == "Tester", "invalid lastName") + XCTAssert(user.password == "test!", "invalid password") + XCTAssert(user.phone == "867-5309", "invalid phone") + expectation.fulfill() }.always { // Noop for now }.error { errorType -> Void in @@ -122,5 +117,27 @@ class UserAPITests: XCTestCase { } self.waitForExpectationsWithTimeout(testTimeout, handler: nil) } + + func test3DeleteUser() { + let expectation = self.expectationWithDescription("testDeleteUser") + PetstoreClientAPI.UserAPI.deleteUser(username: "test@test.com").execute().then { response -> Void in + expectation.fulfill() + }.always { + // Noop for now + }.error { errorType -> Void in + // The server gives us no data back so alamofire parsing fails - at least + // verify that is the error we get here + // Error Domain=com.alamofire.error Code=-6006 "JSON could not be serialized. Input data was nil or zero + // length." UserInfo={NSLocalizedFailureReason=JSON could not be serialized. Input data was nil or zero + // length.} + let error = errorType as NSError + if error.code == -6006 { + expectation.fulfill() + } else { + XCTFail("error logging out") + } + } + self.waitForExpectationsWithTimeout(testTimeout, handler: nil) + } } From 16f1f7401939cc9cf878343a69722c4093f1b423 Mon Sep 17 00:00:00 2001 From: David Keene Date: Mon, 8 Feb 2016 16:47:58 -0800 Subject: [PATCH 105/189] adding support for java dates --- .../src/main/resources/swift/Models.mustache | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/swift/Models.mustache b/modules/swagger-codegen/src/main/resources/swift/Models.mustache index af8f5c875a7..cf0e8862658 100644 --- a/modules/swagger-codegen/src/main/resources/swift/Models.mustache +++ b/modules/swagger-codegen/src/main/resources/swift/Models.mustache @@ -109,11 +109,17 @@ class Decoders { } // Decoder for NSDate Decoders.addDecoder(clazz: NSDate.self) { (source: AnyObject) -> NSDate in - let sourceString = source as! String - for formatter in formatters { - if let date = formatter.dateFromString(sourceString) { - return date + if let sourceString = source as? String { + for formatter in formatters { + if let date = formatter.dateFromString(sourceString) { + return date + } } + + } + if let sourceInt = source as? Int { + // treat as a java date + return NSDate(timeIntervalSince1970: Double(sourceInt / 1000) ) } fatalError("formatter failed to parse \(sourceString)") } {{#models}}{{#model}} From e825b953f72ca8341e25c3f54dc86b8378608201 Mon Sep 17 00:00:00 2001 From: delenius Date: Mon, 8 Feb 2016 12:31:00 -0800 Subject: [PATCH 106/189] Add usePromise parameter to JS client --- .../languages/JavascriptClientCodegen.java | 14 +++++++++++--- .../main/resources/Javascript/ApiClient.mustache | 15 +++++++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java index cc5dcff3fa2..20c7fc62e6b 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java @@ -23,6 +23,7 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo private static final String PROJECT_DESCRIPTION = "projectDescription"; private static final String PROJECT_VERSION = "projectVersion"; private static final String PROJECT_LICENSE_NAME = "projectLicenseName"; + private static final String USE_PROMISES = "usePromises"; protected String projectName; protected String moduleName; @@ -31,7 +32,8 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo protected String sourceFolder = "src"; protected String localVariablePrefix = ""; - + protected boolean usePromises = false; + public JavascriptClientCodegen() { super(); outputFolder = "generated-code/js"; @@ -40,7 +42,7 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo templateDir = "Javascript"; apiPackage = "api"; modelPackage = "model"; - + // reference: http://www.w3schools.com/js/js_reserved.asp reservedWords = new HashSet( Arrays.asList( @@ -80,6 +82,8 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo "version of the project (Default: using info.version or \"1.0.0\")")); cliOptions.add(new CliOption(PROJECT_LICENSE_NAME, "name of the license the project uses (Default: using info.license.name)")); + cliOptions.add(new CliOption(USE_PROMISES, + "use Promises as return values from the client API, instead of superagent callbacks (Default: false)")); } @Override @@ -146,7 +150,10 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo if (additionalProperties.containsKey(CodegenConstants.SOURCE_FOLDER)) { sourceFolder = (String) additionalProperties.get(CodegenConstants.SOURCE_FOLDER); } - + if (additionalProperties.containsKey(USE_PROMISES)) { + usePromises = Boolean.parseBoolean((String)additionalProperties.get(USE_PROMISES)); + } + if (swagger.getInfo() != null) { Info info = swagger.getInfo(); if (StringUtils.isBlank(projectName) && info.getTitle() != null) { @@ -189,6 +196,7 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo additionalProperties.put(PROJECT_VERSION, projectVersion); additionalProperties.put(CodegenConstants.LOCAL_VARIABLE_PREFIX, localVariablePrefix); additionalProperties.put(CodegenConstants.SOURCE_FOLDER, sourceFolder); + additionalProperties.put(USE_PROMISES, usePromises); supportingFiles.add(new SupportingFile("package.mustache", "", "package.json")); supportingFiles.add(new SupportingFile("index.mustache", sourceFolder, "index.js")); diff --git a/modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache index b301da5c301..55a78651485 100644 --- a/modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache +++ b/modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache @@ -214,6 +214,20 @@ request.accept(accept); } + {{#usePromises}} + return new Promise( function(resolve,reject) { + request.end(function(error, response) { + if (error) { + reject(error); + } + else { + var data = _this.deserialize(response, returnType); + resolve(data); + } + }); + }); + {{/usePromises}} + {{^usePromises}} request.end(function(error, response) { if (callback) { var data = null; @@ -225,6 +239,7 @@ }); return request; + {{/usePromises}} }; ApiClient.parseDate = function parseDate(str) { From 73016186717f16ddf57e94c8b468c8f1512691b8 Mon Sep 17 00:00:00 2001 From: delenius Date: Mon, 8 Feb 2016 20:02:38 -0800 Subject: [PATCH 107/189] Add petstore tests for usePromises version --- bin/javascript-promise-petstore.sh | 34 ++ .../petstore/javascript-promise/.gitignore | 1 + .../petstore/javascript-promise/package.json | 17 + .../petstore/javascript-promise/pom.xml | 45 ++ .../javascript-promise/src/ApiClient.js | 291 +++++++++++++ .../javascript-promise/src/api/PetApi.js | 394 ++++++++++++++++++ .../javascript-promise/src/api/StoreApi.js | 170 ++++++++ .../javascript-promise/src/api/UserApi.js | 307 ++++++++++++++ .../petstore/javascript-promise/src/index.js | 23 + .../javascript-promise/src/model/Category.js | 89 ++++ .../javascript-promise/src/model/Order.js | 204 +++++++++ .../javascript-promise/src/model/Pet.js | 206 +++++++++ .../javascript-promise/src/model/Tag.js | 89 ++++ .../javascript-promise/src/model/User.js | 218 ++++++++++ .../javascript-promise/test/ApiClientTest.js | 155 +++++++ .../javascript-promise/test/api/PetApiTest.js | 186 +++++++++ .../javascript-promise/test/mocha.opts | 1 + .../javascript-promise/test/run_tests.html | 40 ++ 18 files changed, 2470 insertions(+) create mode 100755 bin/javascript-promise-petstore.sh create mode 100644 samples/client/petstore/javascript-promise/.gitignore create mode 100644 samples/client/petstore/javascript-promise/package.json create mode 100644 samples/client/petstore/javascript-promise/pom.xml create mode 100644 samples/client/petstore/javascript-promise/src/ApiClient.js create mode 100644 samples/client/petstore/javascript-promise/src/api/PetApi.js create mode 100644 samples/client/petstore/javascript-promise/src/api/StoreApi.js create mode 100644 samples/client/petstore/javascript-promise/src/api/UserApi.js create mode 100644 samples/client/petstore/javascript-promise/src/index.js create mode 100644 samples/client/petstore/javascript-promise/src/model/Category.js create mode 100644 samples/client/petstore/javascript-promise/src/model/Order.js create mode 100644 samples/client/petstore/javascript-promise/src/model/Pet.js create mode 100644 samples/client/petstore/javascript-promise/src/model/Tag.js create mode 100644 samples/client/petstore/javascript-promise/src/model/User.js create mode 100644 samples/client/petstore/javascript-promise/test/ApiClientTest.js create mode 100644 samples/client/petstore/javascript-promise/test/api/PetApiTest.js create mode 100644 samples/client/petstore/javascript-promise/test/mocha.opts create mode 100644 samples/client/petstore/javascript-promise/test/run_tests.html diff --git a/bin/javascript-promise-petstore.sh b/bin/javascript-promise-petstore.sh new file mode 100755 index 00000000000..e82fef3039d --- /dev/null +++ b/bin/javascript-promise-petstore.sh @@ -0,0 +1,34 @@ +#!/bin/sh + +SCRIPT="$0" + +while [ -h "$SCRIPT" ] ; do + ls=`ls -ld "$SCRIPT"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + SCRIPT="$link" + else + SCRIPT=`dirname "$SCRIPT"`/"$link" + fi +done + +if [ ! -d "${APP_DIR}" ]; then + APP_DIR=`dirname "$SCRIPT"`/.. + APP_DIR=`cd "${APP_DIR}"; pwd` +fi + +executable="./modules/swagger-codegen-cli/target/swagger-codegen-cli.jar" + +if [ ! -f "$executable" ] +then + mvn clean package +fi + +# if you've executed sbt assembly previously it will use that instead. +export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties" +ags="$@ generate -t modules/swagger-codegen/src/main/resources/javascript \ +-i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l javascript \ +-o samples/client/petstore/javascript-promise \ +--additional-properties usePromises=true" + +java -DappName=PetstoreClient $JAVA_OPTS -jar $executable $ags diff --git a/samples/client/petstore/javascript-promise/.gitignore b/samples/client/petstore/javascript-promise/.gitignore new file mode 100644 index 00000000000..2ccbe4656c6 --- /dev/null +++ b/samples/client/petstore/javascript-promise/.gitignore @@ -0,0 +1 @@ +/node_modules/ diff --git a/samples/client/petstore/javascript-promise/package.json b/samples/client/petstore/javascript-promise/package.json new file mode 100644 index 00000000000..1fdf78cf217 --- /dev/null +++ b/samples/client/petstore/javascript-promise/package.json @@ -0,0 +1,17 @@ +{ + "name": "swagger-petstore", + "version": "1.0.0", + "description": "This is a sample server Petstore server. You can find out more about Swagger at
http://swagger.io or on irc.freenode.net, #swagger. For this sample, you can use the api key \"special-key\" to test the authorization filters", + "license": "Apache 2.0", + "main": "src/index.js", + "scripts": { + "test": "./node_modules/mocha/bin/mocha --recursive" + }, + "dependencies": { + "superagent": "1.7.1" + }, + "devDependencies": { + "mocha": "~2.3.4", + "expect.js": "~0.3.1" + } +} diff --git a/samples/client/petstore/javascript-promise/pom.xml b/samples/client/petstore/javascript-promise/pom.xml new file mode 100644 index 00000000000..d77a24fcd75 --- /dev/null +++ b/samples/client/petstore/javascript-promise/pom.xml @@ -0,0 +1,45 @@ + + 4.0.0 + io.swagger + swagger-petstore-javascript-promise + pom + 1.0-SNAPSHOT + Swagger Petstore - Javascript Client (Promise version) + + + + org.codehaus.mojo + exec-maven-plugin + 1.2.1 + + + npm-install + pre-integration-test + + exec + + + npm + + install + + + + + mocha + integration-test + + exec + + + npm + + test + + + + + + + + diff --git a/samples/client/petstore/javascript-promise/src/ApiClient.js b/samples/client/petstore/javascript-promise/src/ApiClient.js new file mode 100644 index 00000000000..0a3ec730549 --- /dev/null +++ b/samples/client/petstore/javascript-promise/src/ApiClient.js @@ -0,0 +1,291 @@ +(function(root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['superagent'], factory); + } else if (typeof module === 'object' && module.exports) { + // CommonJS-like environments that support module.exports, like Node. + module.exports = factory(require('superagent')); + } else { + // Browser globals (root is window) + if (!root.SwaggerPetstore) { + root.SwaggerPetstore = {}; + } + root.SwaggerPetstore.ApiClient = factory(root.superagent); + } +}(this, function(superagent) { + 'use strict'; + + var ApiClient = function ApiClient() { + /** + * The base path to put in front of every API call's (relative) path. + */ + this.basePath = 'http://petstore.swagger.io/v2'.replace(/\/+$/, ''); + + /** + * The default HTTP headers to be included for all API calls. + */ + this.defaultHeaders = {}; + }; + + ApiClient.prototype.paramToString = function paramToString(param) { + if (param == null) { + // return empty string for null and undefined + return ''; + } else if (param instanceof Date) { + return param.toJSON(); + } else { + return param.toString(); + } + }; + + /** + * Build full URL by appending the given path to base path and replacing + * path parameter placeholders with parameter values. + * NOTE: query parameters are not handled here. + */ + ApiClient.prototype.buildUrl = function buildUrl(path, pathParams) { + if (!path.match(/^\//)) { + path = '/' + path; + } + var url = this.basePath + path; + var _this = this; + url = url.replace(/\{([\w-]+)\}/g, function(fullMatch, key) { + var value; + if (pathParams.hasOwnProperty(key)) { + value = _this.paramToString(pathParams[key]); + } else { + value = fullMatch; + } + return encodeURIComponent(value); + }); + return url; + }; + + /** + * Check if the given MIME is a JSON MIME. + * JSON MIME examples: + * application/json + * application/json; charset=UTF8 + * APPLICATION/JSON + */ + ApiClient.prototype.isJsonMime = function isJsonMime(mime) { + return Boolean(mime != null && mime.match(/^application\/json(;.*)?$/i)); + }; + + /** + * Choose a MIME from the given MIMEs with JSON preferred, + * i.e. return JSON if included, otherwise return the first one. + */ + ApiClient.prototype.jsonPreferredMime = function jsonPreferredMime(mimes) { + var len = mimes.length; + for (var i = 0; i < len; i++) { + if (this.isJsonMime(mimes[i])) { + return mimes[i]; + } + } + return mimes[0]; + }; + + /** + * Check if the given parameter value is like file content. + */ + ApiClient.prototype.isFileParam = function isFileParam(param) { + // fs.ReadStream in Node.js (but not in runtime like browserify) + if (typeof window === 'undefined' && + typeof require === 'function' && + require('fs') && + param instanceof require('fs').ReadStream) { + return true; + } + // Buffer in Node.js + if (typeof Buffer === 'function' && param instanceof Buffer) { + return true; + } + // Blob in browser + if (typeof Blob === 'function' && param instanceof Blob) { + return true; + } + // File in browser (it seems File object is also instance of Blob, but keep this for safe) + if (typeof File === 'function' && param instanceof File) { + return true; + } + return false; + }; + + /** + * Normalize parameters values: + * remove nils, + * keep files and arrays, + * format to string with `paramToString` for other cases. + */ + ApiClient.prototype.normalizeParams = function normalizeParams(params) { + var newParams = {}; + for (var key in params) { + if (params.hasOwnProperty(key) && params[key] != null) { + var value = params[key]; + if (this.isFileParam(value) || Array.isArray(value)) { + newParams[key] = value; + } else { + newParams[key] = this.paramToString(value); + } + } + } + return newParams; + }; + + /** + * Build parameter value according to the given collection format. + * @param {String} collectionFormat one of 'csv', 'ssv', 'tsv', 'pipes' and 'multi' + */ + ApiClient.prototype.buildCollectionParam = function buildCollectionParam(param, collectionFormat) { + if (param == null) { + return null; + } + switch (collectionFormat) { + case 'csv': + return param.map(this.paramToString).join(','); + case 'ssv': + return param.map(this.paramToString).join(' '); + case 'tsv': + return param.map(this.paramToString).join('\t'); + case 'pipes': + return param.map(this.paramToString).join('|'); + case 'multi': + // return the array directly as Superagent will handle it as expected + return param.map(this.paramToString); + default: + throw new Error('Unknown collection format: ' + collectionFormat); + } + }; + + ApiClient.prototype.deserialize = function deserialize(response, returnType) { + if (response == null || returnType == null) { + return null; + } + // Rely on Superagent for parsing response body. + // See http://visionmedia.github.io/superagent/#parsing-response-bodies + var data = response.body; + if (data == null) { + return null; + } + return ApiClient.convertToType(data, returnType); + }; + + ApiClient.prototype.callApi = function callApi(path, httpMethod, pathParams, + queryParams, headerParams, formParams, bodyParam, contentTypes, accepts, + returnType, callback) { + var _this = this; + var url = this.buildUrl(path, pathParams); + var request = superagent(httpMethod, url); + + // set query parameters + request.query(this.normalizeParams(queryParams)); + + // set header parameters + request.set(this.defaultHeaders).set(this.normalizeParams(headerParams)); + + var contentType = this.jsonPreferredMime(contentTypes); + if (contentType) { + request.type(contentType); + } else if (!request.header['Content-Type']) { + request.type('application/json'); + } + + if (contentType === 'application/x-www-form-urlencoded') { + request.send(this.normalizeParams(formParams)); + } else if (contentType == 'multipart/form-data') { + var _formParams = this.normalizeParams(formParams); + for (var key in _formParams) { + if (_formParams.hasOwnProperty(key)) { + if (this.isFileParam(_formParams[key])) { + // file field + request.attach(key, _formParams[key]); + } else { + request.field(key, _formParams[key]); + } + } + } + } else if (bodyParam) { + request.send(bodyParam); + } + + var accept = this.jsonPreferredMime(accepts); + if (accept) { + request.accept(accept); + } + + + return new Promise( function(resolve,reject) { + request.end(function(error, response) { + if (error) { + reject(error); + } + else { + var data = _this.deserialize(response, returnType); + resolve(data); + } + }); + }); + + + }; + + ApiClient.parseDate = function parseDate(str) { + str = str.replace(/T/i, ' '); + return new Date(str); + }; + + ApiClient.convertToType = function convertToType(data, type) { + switch (type) { + case 'Boolean': + return Boolean(data); + case 'Integer': + return parseInt(data, 10); + case 'Number': + return parseFloat(data); + case 'String': + return String(data); + case 'Date': + return this.parseDate(String(data)); + default: + if (typeof type === 'function') { + // for model type like: User + var model = new type(); + model.constructFromObject(data); + return model; + } else if (Array.isArray(type)) { + // for array type like: ['String'] + var itemType = type[0]; + return data.map(function(item) { + return ApiClient.convertToType(item, itemType); + }); + } else if (typeof type === 'object') { + // for plain object type like: {'String': 'Integer'} + var keyType, valueType; + for (var k in type) { + if (type.hasOwnProperty(k)) { + keyType = k; + valueType = type[k]; + break; + } + } + var result = {}; + for (var k in data) { + if (data.hasOwnProperty(k)) { + var key = ApiClient.convertToType(k, keyType); + var value = ApiClient.convertToType(data[k], valueType); + result[key] = value; + } + } + return result; + } else { + // for unknown type, return the data directly + return data; + } + } + }; + + ApiClient.default = new ApiClient(); + + return ApiClient; +})); diff --git a/samples/client/petstore/javascript-promise/src/api/PetApi.js b/samples/client/petstore/javascript-promise/src/api/PetApi.js new file mode 100644 index 00000000000..91e330eab92 --- /dev/null +++ b/samples/client/petstore/javascript-promise/src/api/PetApi.js @@ -0,0 +1,394 @@ +(function(root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['../ApiClient', '../model/Pet'], factory); + } else if (typeof module === 'object' && module.exports) { + // CommonJS-like environments that support module.exports, like Node. + module.exports = factory(require('../ApiClient'), require('../model/Pet')); + } else { + // Browser globals (root is window) + if (!root.SwaggerPetstore) { + root.SwaggerPetstore = {}; + } + root.SwaggerPetstore.PetApi = factory(root.SwaggerPetstore.ApiClient, root.SwaggerPetstore.Pet); + } +}(this, function(ApiClient, Pet) { + 'use strict'; + + var PetApi = function PetApi(apiClient) { + this.apiClient = apiClient || ApiClient.default; + + var self = this; + + + /** + * Update an existing pet + * + * @param {Pet} body Pet object that needs to be added to the store + * @param {function} callback the callback function, accepting three arguments: error, data, response + */ + self.updatePet = function(body, callback) { + var postBody = body; + + + + var pathParams = { + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = ['application/json', 'application/xml']; + var accepts = ['application/json', 'application/xml']; + var returnType = null; + + return this.apiClient.callApi( + '/pet', 'PUT', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, returnType, callback + ); + + } + + /** + * Add a new pet to the store + * + * @param {Pet} body Pet object that needs to be added to the store + * @param {function} callback the callback function, accepting three arguments: error, data, response + */ + self.addPet = function(body, callback) { + var postBody = body; + + + + var pathParams = { + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = ['application/json', 'application/xml']; + var accepts = ['application/json', 'application/xml']; + var returnType = null; + + return this.apiClient.callApi( + '/pet', 'POST', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, returnType, callback + ); + + } + + /** + * Finds Pets by status + * Multiple status values can be provided with comma seperated strings + * @param {[String]} status Status values that need to be considered for filter + * @param {function} callback the callback function, accepting three arguments: error, data, response + * data is of type: [Pet] + */ + self.findPetsByStatus = function(status, callback) { + var postBody = null; + + + + var pathParams = { + }; + var queryParams = { + 'status': this.buildCollectionParam(status, 'multi') + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; + var returnType = [Pet]; + + return this.apiClient.callApi( + '/pet/findByStatus', 'GET', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, returnType, callback + ); + + } + + /** + * Finds Pets by tags + * Muliple tags can be provided with comma seperated strings. Use tag1, tag2, tag3 for testing. + * @param {[String]} tags Tags to filter by + * @param {function} callback the callback function, accepting three arguments: error, data, response + * data is of type: [Pet] + */ + self.findPetsByTags = function(tags, callback) { + var postBody = null; + + + + var pathParams = { + }; + var queryParams = { + 'tags': this.buildCollectionParam(tags, 'multi') + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; + var returnType = [Pet]; + + return this.apiClient.callApi( + '/pet/findByTags', 'GET', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, returnType, callback + ); + + } + + /** + * Find pet by ID + * Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions + * @param {Integer} petId ID of pet that needs to be fetched + * @param {function} callback the callback function, accepting three arguments: error, data, response + * data is of type: Pet + */ + self.getPetById = function(petId, callback) { + var postBody = null; + + // verify the required parameter 'petId' is set + if (petId == null) { + throw "Missing the required parameter 'petId' when calling getPetById"; + } + + + + var pathParams = { + 'petId': petId + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; + var returnType = Pet; + + return this.apiClient.callApi( + '/pet/{petId}', 'GET', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, returnType, callback + ); + + } + + /** + * Updates a pet in the store with form data + * + * @param {String} petId ID of pet that needs to be updated + * @param {String} name Updated name of the pet + * @param {String} status Updated status of the pet + * @param {function} callback the callback function, accepting three arguments: error, data, response + */ + self.updatePetWithForm = function(petId, name, status, callback) { + var postBody = null; + + // verify the required parameter 'petId' is set + if (petId == null) { + throw "Missing the required parameter 'petId' when calling updatePetWithForm"; + } + + + + var pathParams = { + 'petId': petId + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + 'name': name, + 'status': status + }; + + var contentTypes = ['application/x-www-form-urlencoded']; + var accepts = ['application/json', 'application/xml']; + var returnType = null; + + return this.apiClient.callApi( + '/pet/{petId}', 'POST', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, returnType, callback + ); + + } + + /** + * Deletes a pet + * + * @param {Integer} petId Pet id to delete + * @param {String} apiKey + * @param {function} callback the callback function, accepting three arguments: error, data, response + */ + self.deletePet = function(petId, apiKey, callback) { + var postBody = null; + + // verify the required parameter 'petId' is set + if (petId == null) { + throw "Missing the required parameter 'petId' when calling deletePet"; + } + + + + var pathParams = { + 'petId': petId + }; + var queryParams = { + }; + var headerParams = { + 'api_key': apiKey + }; + var formParams = { + }; + + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; + var returnType = null; + + return this.apiClient.callApi( + '/pet/{petId}', 'DELETE', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, returnType, callback + ); + + } + + /** + * uploads an image + * + * @param {Integer} petId ID of pet to update + * @param {String} additionalMetadata Additional data to pass to server + * @param {File} file file to upload + * @param {function} callback the callback function, accepting three arguments: error, data, response + */ + self.uploadFile = function(petId, additionalMetadata, file, callback) { + var postBody = null; + + // verify the required parameter 'petId' is set + if (petId == null) { + throw "Missing the required parameter 'petId' when calling uploadFile"; + } + + + + var pathParams = { + 'petId': petId + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + 'additionalMetadata': additionalMetadata, + 'file': file + }; + + var contentTypes = ['multipart/form-data']; + var accepts = ['application/json', 'application/xml']; + var returnType = null; + + return this.apiClient.callApi( + '/pet/{petId}/uploadImage', 'POST', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, returnType, callback + ); + + } + + /** + * Fake endpoint to test byte array return by 'Find pet by ID' + * Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions + * @param {Integer} petId ID of pet that needs to be fetched + * @param {function} callback the callback function, accepting three arguments: error, data, response + * data is of type: 'String' + */ + self.getPetByIdWithByteArray = function(petId, callback) { + var postBody = null; + + // verify the required parameter 'petId' is set + if (petId == null) { + throw "Missing the required parameter 'petId' when calling getPetByIdWithByteArray"; + } + + + + var pathParams = { + 'petId': petId + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; + var returnType = 'String'; + + return this.apiClient.callApi( + '/pet/{petId}?testing_byte_array=true', 'GET', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, returnType, callback + ); + + } + + /** + * Fake endpoint to test byte array in body parameter for adding a new pet to the store + * + * @param {String} body Pet object in the form of byte array + * @param {function} callback the callback function, accepting three arguments: error, data, response + */ + self.addPetUsingByteArray = function(body, callback) { + var postBody = body; + + + + var pathParams = { + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = ['application/json', 'application/xml']; + var accepts = ['application/json', 'application/xml']; + var returnType = null; + + return this.apiClient.callApi( + '/pet?testing_byte_array=true', 'POST', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, returnType, callback + ); + + } + + + }; + + return PetApi; +})); diff --git a/samples/client/petstore/javascript-promise/src/api/StoreApi.js b/samples/client/petstore/javascript-promise/src/api/StoreApi.js new file mode 100644 index 00000000000..632d5b83631 --- /dev/null +++ b/samples/client/petstore/javascript-promise/src/api/StoreApi.js @@ -0,0 +1,170 @@ +(function(root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['../ApiClient', '../model/Order'], factory); + } else if (typeof module === 'object' && module.exports) { + // CommonJS-like environments that support module.exports, like Node. + module.exports = factory(require('../ApiClient'), require('../model/Order')); + } else { + // Browser globals (root is window) + if (!root.SwaggerPetstore) { + root.SwaggerPetstore = {}; + } + root.SwaggerPetstore.StoreApi = factory(root.SwaggerPetstore.ApiClient, root.SwaggerPetstore.Order); + } +}(this, function(ApiClient, Order) { + 'use strict'; + + var StoreApi = function StoreApi(apiClient) { + this.apiClient = apiClient || ApiClient.default; + + var self = this; + + + /** + * Returns pet inventories by status + * Returns a map of status codes to quantities + * @param {function} callback the callback function, accepting three arguments: error, data, response + * data is of type: {'String': 'Integer'} + */ + self.getInventory = function(callback) { + var postBody = null; + + + + var pathParams = { + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; + var returnType = {'String': 'Integer'}; + + return this.apiClient.callApi( + '/store/inventory', 'GET', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, returnType, callback + ); + + } + + /** + * Place an order for a pet + * + * @param {Order} body order placed for purchasing the pet + * @param {function} callback the callback function, accepting three arguments: error, data, response + * data is of type: Order + */ + self.placeOrder = function(body, callback) { + var postBody = body; + + + + var pathParams = { + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; + var returnType = Order; + + return this.apiClient.callApi( + '/store/order', 'POST', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, returnType, callback + ); + + } + + /** + * Find purchase order by ID + * For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions + * @param {String} orderId ID of pet that needs to be fetched + * @param {function} callback the callback function, accepting three arguments: error, data, response + * data is of type: Order + */ + self.getOrderById = function(orderId, callback) { + var postBody = null; + + // verify the required parameter 'orderId' is set + if (orderId == null) { + throw "Missing the required parameter 'orderId' when calling getOrderById"; + } + + + + var pathParams = { + 'orderId': orderId + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; + var returnType = Order; + + return this.apiClient.callApi( + '/store/order/{orderId}', 'GET', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, returnType, callback + ); + + } + + /** + * Delete purchase order by ID + * For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors + * @param {String} orderId ID of the order that needs to be deleted + * @param {function} callback the callback function, accepting three arguments: error, data, response + */ + self.deleteOrder = function(orderId, callback) { + var postBody = null; + + // verify the required parameter 'orderId' is set + if (orderId == null) { + throw "Missing the required parameter 'orderId' when calling deleteOrder"; + } + + + + var pathParams = { + 'orderId': orderId + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; + var returnType = null; + + return this.apiClient.callApi( + '/store/order/{orderId}', 'DELETE', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, returnType, callback + ); + + } + + + }; + + return StoreApi; +})); diff --git a/samples/client/petstore/javascript-promise/src/api/UserApi.js b/samples/client/petstore/javascript-promise/src/api/UserApi.js new file mode 100644 index 00000000000..2ab1f1f3abb --- /dev/null +++ b/samples/client/petstore/javascript-promise/src/api/UserApi.js @@ -0,0 +1,307 @@ +(function(root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['../ApiClient', '../model/User'], factory); + } else if (typeof module === 'object' && module.exports) { + // CommonJS-like environments that support module.exports, like Node. + module.exports = factory(require('../ApiClient'), require('../model/User')); + } else { + // Browser globals (root is window) + if (!root.SwaggerPetstore) { + root.SwaggerPetstore = {}; + } + root.SwaggerPetstore.UserApi = factory(root.SwaggerPetstore.ApiClient, root.SwaggerPetstore.User); + } +}(this, function(ApiClient, User) { + 'use strict'; + + var UserApi = function UserApi(apiClient) { + this.apiClient = apiClient || ApiClient.default; + + var self = this; + + + /** + * Create user + * This can only be done by the logged in user. + * @param {User} body Created user object + * @param {function} callback the callback function, accepting three arguments: error, data, response + */ + self.createUser = function(body, callback) { + var postBody = body; + + + + var pathParams = { + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; + var returnType = null; + + return this.apiClient.callApi( + '/user', 'POST', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, returnType, callback + ); + + } + + /** + * Creates list of users with given input array + * + * @param {[User]} body List of user object + * @param {function} callback the callback function, accepting three arguments: error, data, response + */ + self.createUsersWithArrayInput = function(body, callback) { + var postBody = body; + + + + var pathParams = { + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; + var returnType = null; + + return this.apiClient.callApi( + '/user/createWithArray', 'POST', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, returnType, callback + ); + + } + + /** + * Creates list of users with given input array + * + * @param {[User]} body List of user object + * @param {function} callback the callback function, accepting three arguments: error, data, response + */ + self.createUsersWithListInput = function(body, callback) { + var postBody = body; + + + + var pathParams = { + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; + var returnType = null; + + return this.apiClient.callApi( + '/user/createWithList', 'POST', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, returnType, callback + ); + + } + + /** + * Logs user into the system + * + * @param {String} username The user name for login + * @param {String} password The password for login in clear text + * @param {function} callback the callback function, accepting three arguments: error, data, response + * data is of type: 'String' + */ + self.loginUser = function(username, password, callback) { + var postBody = null; + + + + var pathParams = { + }; + var queryParams = { + 'username': username, + 'password': password + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; + var returnType = 'String'; + + return this.apiClient.callApi( + '/user/login', 'GET', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, returnType, callback + ); + + } + + /** + * Logs out current logged in user session + * + * @param {function} callback the callback function, accepting three arguments: error, data, response + */ + self.logoutUser = function(callback) { + var postBody = null; + + + + var pathParams = { + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; + var returnType = null; + + return this.apiClient.callApi( + '/user/logout', 'GET', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, returnType, callback + ); + + } + + /** + * Get user by user name + * + * @param {String} username The name that needs to be fetched. Use user1 for testing. + * @param {function} callback the callback function, accepting three arguments: error, data, response + * data is of type: User + */ + self.getUserByName = function(username, callback) { + var postBody = null; + + // verify the required parameter 'username' is set + if (username == null) { + throw "Missing the required parameter 'username' when calling getUserByName"; + } + + + + var pathParams = { + 'username': username + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; + var returnType = User; + + return this.apiClient.callApi( + '/user/{username}', 'GET', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, returnType, callback + ); + + } + + /** + * Updated user + * This can only be done by the logged in user. + * @param {String} username name that need to be deleted + * @param {User} body Updated user object + * @param {function} callback the callback function, accepting three arguments: error, data, response + */ + self.updateUser = function(username, body, callback) { + var postBody = body; + + // verify the required parameter 'username' is set + if (username == null) { + throw "Missing the required parameter 'username' when calling updateUser"; + } + + + + var pathParams = { + 'username': username + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; + var returnType = null; + + return this.apiClient.callApi( + '/user/{username}', 'PUT', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, returnType, callback + ); + + } + + /** + * Delete user + * This can only be done by the logged in user. + * @param {String} username The name that needs to be deleted + * @param {function} callback the callback function, accepting three arguments: error, data, response + */ + self.deleteUser = function(username, callback) { + var postBody = null; + + // verify the required parameter 'username' is set + if (username == null) { + throw "Missing the required parameter 'username' when calling deleteUser"; + } + + + + var pathParams = { + 'username': username + }; + var queryParams = { + }; + var headerParams = { + }; + var formParams = { + }; + + var contentTypes = []; + var accepts = ['application/json', 'application/xml']; + var returnType = null; + + return this.apiClient.callApi( + '/user/{username}', 'DELETE', + pathParams, queryParams, headerParams, formParams, postBody, + contentTypes, accepts, returnType, callback + ); + + } + + + }; + + return UserApi; +})); diff --git a/samples/client/petstore/javascript-promise/src/index.js b/samples/client/petstore/javascript-promise/src/index.js new file mode 100644 index 00000000000..a6b290f5e63 --- /dev/null +++ b/samples/client/petstore/javascript-promise/src/index.js @@ -0,0 +1,23 @@ +(function(factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['./ApiClient', './model/User', './model/Category', './model/Pet', './model/Tag', './model/Order', './api/UserApi', './api/StoreApi', './api/PetApi'], factory); + } else if (typeof module === 'object' && module.exports) { + // CommonJS-like environments that support module.exports, like Node. + module.exports = factory(require('./ApiClient'), require('./model/User'), require('./model/Category'), require('./model/Pet'), require('./model/Tag'), require('./model/Order'), require('./api/UserApi'), require('./api/StoreApi'), require('./api/PetApi')); + } +}(function(ApiClient, User, Category, Pet, Tag, Order, UserApi, StoreApi, PetApi) { + 'use strict'; + + return { + ApiClient: ApiClient, + User: User, + Category: Category, + Pet: Pet, + Tag: Tag, + Order: Order, + UserApi: UserApi, + StoreApi: StoreApi, + PetApi: PetApi + }; +})); diff --git a/samples/client/petstore/javascript-promise/src/model/Category.js b/samples/client/petstore/javascript-promise/src/model/Category.js new file mode 100644 index 00000000000..4b58f1e7c4d --- /dev/null +++ b/samples/client/petstore/javascript-promise/src/model/Category.js @@ -0,0 +1,89 @@ +(function(root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define([undefined, '../ApiClient'], factory); + } else if (typeof module === 'object' && module.exports) { + // CommonJS-like environments that support module.exports, like Node. + module.exports = factory(undefined, require('../ApiClient')); + } else { + // Browser globals (root is window) + if (!root.SwaggerPetstore) { + root.SwaggerPetstore = {}; + } + factory(root.SwaggerPetstore, root.SwaggerPetstore.ApiClient); + } +}(this, function(module, ApiClient) { + 'use strict'; + + + + + + var Category = function Category() { + + /** + * datatype: Integer + **/ + this['id'] = null; + + /** + * datatype: String + **/ + this['name'] = null; + + }; + + Category.prototype.constructFromObject = function(data) { + if (!data) { + return this; + } + + this['id'] = ApiClient.convertToType(data['id'], 'Integer'); + + this['name'] = ApiClient.convertToType(data['name'], 'String'); + + return this; + } + + + /** + * @return {Integer} + **/ + Category.prototype.getId = function() { + return this['id']; + } + + /** + * @param {Integer} id + **/ + Category.prototype.setId = function(id) { + this['id'] = id; + } + + /** + * @return {String} + **/ + Category.prototype.getName = function() { + return this['name']; + } + + /** + * @param {String} name + **/ + Category.prototype.setName = function(name) { + this['name'] = name; + } + + + Category.prototype.toJson = function() { + return JSON.stringify(this); + } + + if (module) { + module.Category = Category; + } + + return Category; + + +})); diff --git a/samples/client/petstore/javascript-promise/src/model/Order.js b/samples/client/petstore/javascript-promise/src/model/Order.js new file mode 100644 index 00000000000..c9dd8403a4f --- /dev/null +++ b/samples/client/petstore/javascript-promise/src/model/Order.js @@ -0,0 +1,204 @@ +(function(root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define([undefined, '../ApiClient'], factory); + } else if (typeof module === 'object' && module.exports) { + // CommonJS-like environments that support module.exports, like Node. + module.exports = factory(undefined, require('../ApiClient')); + } else { + // Browser globals (root is window) + if (!root.SwaggerPetstore) { + root.SwaggerPetstore = {}; + } + factory(root.SwaggerPetstore, root.SwaggerPetstore.ApiClient); + } +}(this, function(module, ApiClient) { + 'use strict'; + + + +//export module +if ( typeof define === "function" && define.amd ) { + define('StatusEnum', [], function() { + return StatusEnum; + }); +} + +var StatusEnum = function StatusEnum() { + var self = this; + + + /** + * @const + */ + self.PLACED = "placed", + + /** + * @const + */ + self.APPROVED = "approved", + + /** + * @const + */ + self.DELIVERED = "delivered"; + +} + + + + var Order = function Order() { + + /** + * datatype: Integer + **/ + this['id'] = null; + + /** + * datatype: Integer + **/ + this['petId'] = null; + + /** + * datatype: Integer + **/ + this['quantity'] = null; + + /** + * datatype: Date + **/ + this['shipDate'] = null; + + /** + * Order Status + * datatype: StatusEnum + **/ + this['status'] = null; + + /** + * datatype: Boolean + **/ + this['complete'] = null; + + }; + + Order.prototype.constructFromObject = function(data) { + if (!data) { + return this; + } + + this['id'] = ApiClient.convertToType(data['id'], 'Integer'); + + this['petId'] = ApiClient.convertToType(data['petId'], 'Integer'); + + this['quantity'] = ApiClient.convertToType(data['quantity'], 'Integer'); + + this['shipDate'] = ApiClient.convertToType(data['shipDate'], 'Date'); + + this['status'] = ApiClient.convertToType(data['status'], 'String'); + + this['complete'] = ApiClient.convertToType(data['complete'], 'Boolean'); + + return this; + } + + + /** + * @return {Integer} + **/ + Order.prototype.getId = function() { + return this['id']; + } + + /** + * @param {Integer} id + **/ + Order.prototype.setId = function(id) { + this['id'] = id; + } + + /** + * @return {Integer} + **/ + Order.prototype.getPetId = function() { + return this['petId']; + } + + /** + * @param {Integer} petId + **/ + Order.prototype.setPetId = function(petId) { + this['petId'] = petId; + } + + /** + * @return {Integer} + **/ + Order.prototype.getQuantity = function() { + return this['quantity']; + } + + /** + * @param {Integer} quantity + **/ + Order.prototype.setQuantity = function(quantity) { + this['quantity'] = quantity; + } + + /** + * @return {Date} + **/ + Order.prototype.getShipDate = function() { + return this['shipDate']; + } + + /** + * @param {Date} shipDate + **/ + Order.prototype.setShipDate = function(shipDate) { + this['shipDate'] = shipDate; + } + + /** + * get Order Status + * @return {StatusEnum} + **/ + Order.prototype.getStatus = function() { + return this['status']; + } + + /** + * set Order Status + * @param {StatusEnum} status + **/ + Order.prototype.setStatus = function(status) { + this['status'] = status; + } + + /** + * @return {Boolean} + **/ + Order.prototype.getComplete = function() { + return this['complete']; + } + + /** + * @param {Boolean} complete + **/ + Order.prototype.setComplete = function(complete) { + this['complete'] = complete; + } + + + Order.prototype.toJson = function() { + return JSON.stringify(this); + } + + if (module) { + module.Order = Order; + } + + return Order; + + +})); diff --git a/samples/client/petstore/javascript-promise/src/model/Pet.js b/samples/client/petstore/javascript-promise/src/model/Pet.js new file mode 100644 index 00000000000..60b24a3f8e5 --- /dev/null +++ b/samples/client/petstore/javascript-promise/src/model/Pet.js @@ -0,0 +1,206 @@ +(function(root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define([undefined, '../ApiClient', './Category', './Tag'], factory); + } else if (typeof module === 'object' && module.exports) { + // CommonJS-like environments that support module.exports, like Node. + module.exports = factory(undefined, require('../ApiClient'), require('./Category'), require('./Tag')); + } else { + // Browser globals (root is window) + if (!root.SwaggerPetstore) { + root.SwaggerPetstore = {}; + } + factory(root.SwaggerPetstore, root.SwaggerPetstore.ApiClient, root.SwaggerPetstore.Category, root.SwaggerPetstore.Tag); + } +}(this, function(module, ApiClient, Category, Tag) { + 'use strict'; + + + +//export module +if ( typeof define === "function" && define.amd ) { + define('StatusEnum', [], function() { + return StatusEnum; + }); +} + +var StatusEnum = function StatusEnum() { + var self = this; + + + /** + * @const + */ + self.AVAILABLE = "available", + + /** + * @const + */ + self.PENDING = "pending", + + /** + * @const + */ + self.SOLD = "sold"; + +} + + + + var Pet = function Pet(photoUrls, name) { + + /** + * datatype: Integer + **/ + this['id'] = null; + + /** + * datatype: Category + **/ + this['category'] = new Category(); + + /** + * datatype: String + * required + **/ + this['name'] = name; + + /** + * datatype: [String] + * required + **/ + this['photoUrls'] = photoUrls; + + /** + * datatype: [Tag] + **/ + this['tags'] = []; + + /** + * pet status in the store + * datatype: StatusEnum + **/ + this['status'] = null; + + }; + + Pet.prototype.constructFromObject = function(data) { + if (!data) { + return this; + } + + this['id'] = ApiClient.convertToType(data['id'], 'Integer'); + + this['category'].constructFromObject(data['category']); + + this['name'] = ApiClient.convertToType(data['name'], 'String'); + + this['photoUrls'] = ApiClient.convertToType(data['photoUrls'], ['String']); + + this['tags'] = ApiClient.convertToType(data['tags'], [Tag]); + + this['status'] = ApiClient.convertToType(data['status'], 'String'); + + return this; + } + + + /** + * @return {Integer} + **/ + Pet.prototype.getId = function() { + return this['id']; + } + + /** + * @param {Integer} id + **/ + Pet.prototype.setId = function(id) { + this['id'] = id; + } + + /** + * @return {Category} + **/ + Pet.prototype.getCategory = function() { + return this['category']; + } + + /** + * @param {Category} category + **/ + Pet.prototype.setCategory = function(category) { + this['category'] = category; + } + + /** + * @return {String} + **/ + Pet.prototype.getName = function() { + return this['name']; + } + + /** + * @param {String} name + **/ + Pet.prototype.setName = function(name) { + this['name'] = name; + } + + /** + * @return {[String]} + **/ + Pet.prototype.getPhotoUrls = function() { + return this['photoUrls']; + } + + /** + * @param {[String]} photoUrls + **/ + Pet.prototype.setPhotoUrls = function(photoUrls) { + this['photoUrls'] = photoUrls; + } + + /** + * @return {[Tag]} + **/ + Pet.prototype.getTags = function() { + return this['tags']; + } + + /** + * @param {[Tag]} tags + **/ + Pet.prototype.setTags = function(tags) { + this['tags'] = tags; + } + + /** + * get pet status in the store + * @return {StatusEnum} + **/ + Pet.prototype.getStatus = function() { + return this['status']; + } + + /** + * set pet status in the store + * @param {StatusEnum} status + **/ + Pet.prototype.setStatus = function(status) { + this['status'] = status; + } + + + Pet.prototype.toJson = function() { + return JSON.stringify(this); + } + + if (module) { + module.Pet = Pet; + } + + return Pet; + + +})); diff --git a/samples/client/petstore/javascript-promise/src/model/Tag.js b/samples/client/petstore/javascript-promise/src/model/Tag.js new file mode 100644 index 00000000000..ac3d5373491 --- /dev/null +++ b/samples/client/petstore/javascript-promise/src/model/Tag.js @@ -0,0 +1,89 @@ +(function(root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define([undefined, '../ApiClient'], factory); + } else if (typeof module === 'object' && module.exports) { + // CommonJS-like environments that support module.exports, like Node. + module.exports = factory(undefined, require('../ApiClient')); + } else { + // Browser globals (root is window) + if (!root.SwaggerPetstore) { + root.SwaggerPetstore = {}; + } + factory(root.SwaggerPetstore, root.SwaggerPetstore.ApiClient); + } +}(this, function(module, ApiClient) { + 'use strict'; + + + + + + var Tag = function Tag() { + + /** + * datatype: Integer + **/ + this['id'] = null; + + /** + * datatype: String + **/ + this['name'] = null; + + }; + + Tag.prototype.constructFromObject = function(data) { + if (!data) { + return this; + } + + this['id'] = ApiClient.convertToType(data['id'], 'Integer'); + + this['name'] = ApiClient.convertToType(data['name'], 'String'); + + return this; + } + + + /** + * @return {Integer} + **/ + Tag.prototype.getId = function() { + return this['id']; + } + + /** + * @param {Integer} id + **/ + Tag.prototype.setId = function(id) { + this['id'] = id; + } + + /** + * @return {String} + **/ + Tag.prototype.getName = function() { + return this['name']; + } + + /** + * @param {String} name + **/ + Tag.prototype.setName = function(name) { + this['name'] = name; + } + + + Tag.prototype.toJson = function() { + return JSON.stringify(this); + } + + if (module) { + module.Tag = Tag; + } + + return Tag; + + +})); diff --git a/samples/client/petstore/javascript-promise/src/model/User.js b/samples/client/petstore/javascript-promise/src/model/User.js new file mode 100644 index 00000000000..2ee006e0ac9 --- /dev/null +++ b/samples/client/petstore/javascript-promise/src/model/User.js @@ -0,0 +1,218 @@ +(function(root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define([undefined, '../ApiClient'], factory); + } else if (typeof module === 'object' && module.exports) { + // CommonJS-like environments that support module.exports, like Node. + module.exports = factory(undefined, require('../ApiClient')); + } else { + // Browser globals (root is window) + if (!root.SwaggerPetstore) { + root.SwaggerPetstore = {}; + } + factory(root.SwaggerPetstore, root.SwaggerPetstore.ApiClient); + } +}(this, function(module, ApiClient) { + 'use strict'; + + + + + + var User = function User() { + + /** + * datatype: Integer + **/ + this['id'] = null; + + /** + * datatype: String + **/ + this['username'] = null; + + /** + * datatype: String + **/ + this['firstName'] = null; + + /** + * datatype: String + **/ + this['lastName'] = null; + + /** + * datatype: String + **/ + this['email'] = null; + + /** + * datatype: String + **/ + this['password'] = null; + + /** + * datatype: String + **/ + this['phone'] = null; + + /** + * User Status + * datatype: Integer + **/ + this['userStatus'] = null; + + }; + + User.prototype.constructFromObject = function(data) { + if (!data) { + return this; + } + + this['id'] = ApiClient.convertToType(data['id'], 'Integer'); + + this['username'] = ApiClient.convertToType(data['username'], 'String'); + + this['firstName'] = ApiClient.convertToType(data['firstName'], 'String'); + + this['lastName'] = ApiClient.convertToType(data['lastName'], 'String'); + + this['email'] = ApiClient.convertToType(data['email'], 'String'); + + this['password'] = ApiClient.convertToType(data['password'], 'String'); + + this['phone'] = ApiClient.convertToType(data['phone'], 'String'); + + this['userStatus'] = ApiClient.convertToType(data['userStatus'], 'Integer'); + + return this; + } + + + /** + * @return {Integer} + **/ + User.prototype.getId = function() { + return this['id']; + } + + /** + * @param {Integer} id + **/ + User.prototype.setId = function(id) { + this['id'] = id; + } + + /** + * @return {String} + **/ + User.prototype.getUsername = function() { + return this['username']; + } + + /** + * @param {String} username + **/ + User.prototype.setUsername = function(username) { + this['username'] = username; + } + + /** + * @return {String} + **/ + User.prototype.getFirstName = function() { + return this['firstName']; + } + + /** + * @param {String} firstName + **/ + User.prototype.setFirstName = function(firstName) { + this['firstName'] = firstName; + } + + /** + * @return {String} + **/ + User.prototype.getLastName = function() { + return this['lastName']; + } + + /** + * @param {String} lastName + **/ + User.prototype.setLastName = function(lastName) { + this['lastName'] = lastName; + } + + /** + * @return {String} + **/ + User.prototype.getEmail = function() { + return this['email']; + } + + /** + * @param {String} email + **/ + User.prototype.setEmail = function(email) { + this['email'] = email; + } + + /** + * @return {String} + **/ + User.prototype.getPassword = function() { + return this['password']; + } + + /** + * @param {String} password + **/ + User.prototype.setPassword = function(password) { + this['password'] = password; + } + + /** + * @return {String} + **/ + User.prototype.getPhone = function() { + return this['phone']; + } + + /** + * @param {String} phone + **/ + User.prototype.setPhone = function(phone) { + this['phone'] = phone; + } + + /** + * get User Status + * @return {Integer} + **/ + User.prototype.getUserStatus = function() { + return this['userStatus']; + } + + /** + * set User Status + * @param {Integer} userStatus + **/ + User.prototype.setUserStatus = function(userStatus) { + this['userStatus'] = userStatus; + } + + + User.prototype.toJson = function() { + return JSON.stringify(this); + } + + if (module) { + module.User = User; + } + + return User; + + +})); diff --git a/samples/client/petstore/javascript-promise/test/ApiClientTest.js b/samples/client/petstore/javascript-promise/test/ApiClientTest.js new file mode 100644 index 00000000000..4b23a57e85b --- /dev/null +++ b/samples/client/petstore/javascript-promise/test/ApiClientTest.js @@ -0,0 +1,155 @@ +if (typeof module === 'object' && module.exports) { + var expect = require('expect.js'); + var SwaggerPetstore = require('../src/index'); +} + +var apiClient = SwaggerPetstore.ApiClient.default; + +describe('ApiClient', function() { + describe('defaults', function() { + it('should have correct default values with the default API client', function() { + expect(apiClient).to.be.ok(); + expect(apiClient.basePath).to.be('http://petstore.swagger.io/v2'); + }); + + it('should have correct default values with new API client and can customize it', function() { + var newClient = new SwaggerPetstore.ApiClient; + expect(newClient.basePath).to.be('http://petstore.swagger.io/v2'); + expect(newClient.buildUrl('/abc', {})).to.be('http://petstore.swagger.io/v2/abc'); + + newClient.basePath = 'http://example.com'; + expect(newClient.basePath).to.be('http://example.com'); + expect(newClient.buildUrl('/abc', {})).to.be('http://example.com/abc'); + }); + }); + + describe('#paramToString', function() { + it('should return empty string for null and undefined', function() { + expect(apiClient.paramToString(null)).to.be(''); + expect(apiClient.paramToString(undefined)).to.be(''); + }); + + it('should return string', function() { + expect(apiClient.paramToString('')).to.be(''); + expect(apiClient.paramToString('abc')).to.be('abc'); + expect(apiClient.paramToString(123)).to.be('123'); + }); + }); + + describe('#buildCollectionParam', function() { + var param; + + beforeEach(function() { + param = ['aa', 'bb', 123]; + }); + + it('works for csv', function() { + expect(apiClient.buildCollectionParam(param, 'csv')).to.be('aa,bb,123'); + }); + + it('works for ssv', function() { + expect(apiClient.buildCollectionParam(param, 'ssv')).to.be('aa bb 123'); + }); + + it('works for tsv', function() { + expect(apiClient.buildCollectionParam(param, 'tsv')).to.be('aa\tbb\t123'); + }); + + it('works for pipes', function() { + expect(apiClient.buildCollectionParam(param, 'pipes')).to.be('aa|bb|123'); + }); + + it('works for multi', function() { + expect(apiClient.buildCollectionParam(param, 'multi')).to.eql(['aa', 'bb', '123']); + }); + + it('fails for invalid collection format', function() { + expect(function() { apiClient.buildCollectionParam(param, 'INVALID'); }).to.throwError(); + }); + }); + + describe('#buildUrl', function() { + it('should work without path parameters in the path', function() { + expect(apiClient.buildUrl('/abc', {})).to + .be('http://petstore.swagger.io/v2/abc'); + expect(apiClient.buildUrl('/abc/def?ok', {id: 123})).to + .be('http://petstore.swagger.io/v2/abc/def?ok'); + }); + + it('should work with path parameters in the path', function() { + expect(apiClient.buildUrl('/{id}', {id: 123})).to + .be('http://petstore.swagger.io/v2/123'); + expect(apiClient.buildUrl('/abc/{id}/{name}?ok', {id: 456, name: 'a b'})).to. + be('http://petstore.swagger.io/v2/abc/456/a%20b?ok'); + }); + }); + + describe('#isJsonMime', function() { + it('should return true for JSON MIME', function() { + expect(apiClient.isJsonMime('application/json')).to.be(true); + expect(apiClient.isJsonMime('application/json; charset=UTF8')).to.be(true); + expect(apiClient.isJsonMime('APPLICATION/JSON')).to.be(true); + }); + + it('should return false for non-JSON MIME', function() { + expect(apiClient.isJsonMime('')).to.be(false); + expect(apiClient.isJsonMime('text/plain')).to.be(false); + expect(apiClient.isJsonMime('application/xml')).to.be(false); + expect(apiClient.isJsonMime('application/jsonp')).to.be(false); + }); + }); + + /* + describe('#defaultHeaders', function() { + it('should initialize default headers to be an empty object', function() { + expect(apiClient.defaultHeaders).to.eql({}); + }); + + it('should put default headers in request', function() { + var newClient = new SwaggerPetstore.ApiClient; + newClient.defaultHeaders['Content-Type'] = 'text/plain' + newClient.defaultHeaders['api_key'] = 'special-key' + + var expected = {'Content-Type': 'text/plain', 'api_key': 'special-key'}; + expect(newClient.defaultHeaders).to.eql(expected); + var req = makeDumbRequest(newClient); + req.unset('User-Agent'); + expect(req.header).to.eql(expected); + }); + + it('should override default headers with provided header params', function() { + var newClient = new SwaggerPetstore.ApiClient; + newClient.defaultHeaders['Content-Type'] = 'text/plain' + newClient.defaultHeaders['api_key'] = 'special-key' + + var headerParams = {'Content-Type': 'application/json', 'Authorization': 'Bearer test-token'} + var expected = { + 'Content-Type': 'application/json', + 'api_key': 'special-key', + 'Authorization': 'Bearer test-token' + }; + var req = makeDumbRequest(newClient, {headerParams: headerParams}); + req.unset('User-Agent'); + expect(req.header).to.eql(expected); + }); + }); +*/ + +}); + +function makeDumbRequest(apiClient, opts) { + opts = opts || {}; + var path = opts.path || '/store/inventory'; + var httpMethod = opts.httpMethod || 'GET'; + var pathParams = opts.pathParams || {}; + var queryParams = opts.queryParams || {}; + var headerParams = opts.headerParams || {}; + var formParams = opts.formParams || {}; + var bodyParam = opts.bodyParam; + var contentTypes = opts.contentTypes || []; + var accepts = opts.accepts || []; + var callback = opts.callback; + return apiClient.callApi(path, httpMethod, pathParams, queryParams, + headerParams, formParams, bodyParam, contentTypes, accepts, callback + ); +} diff --git a/samples/client/petstore/javascript-promise/test/api/PetApiTest.js b/samples/client/petstore/javascript-promise/test/api/PetApiTest.js new file mode 100644 index 00000000000..f57770999b8 --- /dev/null +++ b/samples/client/petstore/javascript-promise/test/api/PetApiTest.js @@ -0,0 +1,186 @@ +if (typeof module === 'object' && module.exports) { + var expect = require('expect.js'); + var SwaggerPetstore = require('../../src/index'); +} + +var api; + +beforeEach(function() { + api = new SwaggerPetstore.PetApi(); +}); + +var createRandomPet = function() { + var id = new Date().getTime(); + var pet = new SwaggerPetstore.Pet(); + pet.setId(id); + pet.setName("gorilla" + id); + + var category = new SwaggerPetstore.Category(); + category.setName("really-happy"); + pet.setCategory(category); + + pet.setStatus('available'); + var photos = ["http://foo.bar.com/1", "http://foo.bar.com/2"]; + pet.setPhotoUrls(photos); + + return pet; +}; + +describe('PetApi', function() { + it('should create and get pet', function(done) { + var pet = createRandomPet(); + api.addPet(pet) + .then(function() { + return api.getPetById(pet.id) + }) + .then(function(fetched) { + //expect(response.status).to.be(200); + //expect(response.ok).to.be(true); + //expect(response.get('Content-Type')).to.be('application/json'); + expect(fetched).to.be.ok(); + expect(fetched.id).to.be(pet.id); + expect(fetched.getPhotoUrls()).to.eql(pet.getPhotoUrls()); + expect(fetched.getCategory()).to.be.ok(); + expect(fetched.getCategory().getName()).to.be(pet.getCategory().getName()); + + api.deletePet(pet.id); + done(); + }); + }); +}); + +/* + @Test + public void testUpdatePet() throws Exception { + Pet pet = createRandomPet(); + pet.setName("programmer"); + + api.updatePet(pet); + + Pet fetched = api.getPetById(pet.getId()); + assertNotNull(fetched); + assertEquals(pet.getId(), fetched.getId()); + assertNotNull(fetched.getCategory()); + assertEquals(fetched.getCategory().getName(), pet.getCategory().getName()); + } + + @Test + public void testFindPetsByStatus() throws Exception { + Pet pet = createRandomPet(); + pet.setName("programmer"); + pet.setStatus(Pet.StatusEnum.AVAILABLE); + + api.updatePet(pet); + + List pets = api.findPetsByStatus(Arrays.asList(new String[]{"available"})); + assertNotNull(pets); + + boolean found = false; + for (Pet fetched : pets) { + if (fetched.getId().equals(pet.getId())) { + found = true; + break; + } + } + + assertTrue(found); + } + + @Test + public void testFindPetsByTags() throws Exception { + Pet pet = createRandomPet(); + pet.setName("monster"); + pet.setStatus(Pet.StatusEnum.AVAILABLE); + + List tags = new ArrayList(); + Tag tag1 = new Tag(); + tag1.setName("friendly"); + tags.add(tag1); + pet.setTags(tags); + + api.updatePet(pet); + + List pets = api.findPetsByTags(Arrays.asList(new String[]{"friendly"})); + assertNotNull(pets); + + boolean found = false; + for (Pet fetched : pets) { + if (fetched.getId().equals(pet.getId())) { + found = true; + break; + } + } + assertTrue(found); + } + + @Test + public void testUpdatePetWithForm() throws Exception { + Pet pet = createRandomPet(); + pet.setName("frank"); + api.addPet(pet); + + Pet fetched = api.getPetById(pet.getId()); + + api.updatePetWithForm(String.valueOf(fetched.getId()), "furt", null); + Pet updated = api.getPetById(fetched.getId()); + + assertEquals(updated.getName(), "furt"); + } + + @Test + public void testDeletePet() throws Exception { + Pet pet = createRandomPet(); + api.addPet(pet); + + Pet fetched = api.getPetById(pet.getId()); + api.deletePet(fetched.getId(), null); + + try { + fetched = api.getPetById(fetched.getId()); + fail("expected an error"); + } catch (ApiException e) { + assertEquals(404, e.getCode()); + } + } + + @Test + public void testUploadFile() throws Exception { + Pet pet = createRandomPet(); + api.addPet(pet); + + File file = new File("hello.txt"); + BufferedWriter writer = new BufferedWriter(new FileWriter(file)); + writer.write("Hello world!"); + writer.close(); + + api.uploadFile(pet.getId(), "a test file", new File(file.getAbsolutePath())); + } + + @Test + public void testEqualsAndHashCode() { + Pet pet1 = new Pet(); + Pet pet2 = new Pet(); + assertTrue(pet1.equals(pet2)); + assertTrue(pet2.equals(pet1)); + assertTrue(pet1.hashCode() == pet2.hashCode()); + assertTrue(pet1.equals(pet1)); + assertTrue(pet1.hashCode() == pet1.hashCode()); + + pet2.setName("really-happy"); + pet2.setPhotoUrls(Arrays.asList(new String[]{"http://foo.bar.com/1", "http://foo.bar.com/2"})); + assertFalse(pet1.equals(pet2)); + assertFalse(pet2.equals(pet1)); + assertFalse(pet1.hashCode() == (pet2.hashCode())); + assertTrue(pet2.equals(pet2)); + assertTrue(pet2.hashCode() == pet2.hashCode()); + + pet1.setName("really-happy"); + pet1.setPhotoUrls(Arrays.asList(new String[]{"http://foo.bar.com/1", "http://foo.bar.com/2"})); + assertTrue(pet1.equals(pet2)); + assertTrue(pet2.equals(pet1)); + assertTrue(pet1.hashCode() == pet2.hashCode()); + assertTrue(pet1.equals(pet1)); + assertTrue(pet1.hashCode() == pet1.hashCode()); + } +} +*/ diff --git a/samples/client/petstore/javascript-promise/test/mocha.opts b/samples/client/petstore/javascript-promise/test/mocha.opts new file mode 100644 index 00000000000..907011807d6 --- /dev/null +++ b/samples/client/petstore/javascript-promise/test/mocha.opts @@ -0,0 +1 @@ +--timeout 10000 diff --git a/samples/client/petstore/javascript-promise/test/run_tests.html b/samples/client/petstore/javascript-promise/test/run_tests.html new file mode 100644 index 00000000000..2916234bcf3 --- /dev/null +++ b/samples/client/petstore/javascript-promise/test/run_tests.html @@ -0,0 +1,40 @@ + + + + Mocha Tests + + + +

+ + + + + + + + + + + + + + + + + + + + + + + From aab96ec7722c7949e134997ccb20886ab21b9407 Mon Sep 17 00:00:00 2001 From: delenius Date: Mon, 8 Feb 2016 23:39:05 -0800 Subject: [PATCH 108/189] Remove unused callback param when using promises --- .../resources/Javascript/ApiClient.mustache | 2 +- .../main/resources/Javascript/api.mustache | 6 +- .../javascript-promise/src/ApiClient.js | 2 +- .../javascript-promise/src/api/PetApi.js | 60 +++++++++---------- .../javascript-promise/src/api/StoreApi.js | 24 ++++---- .../javascript-promise/src/api/UserApi.js | 48 +++++++-------- .../petstore/javascript/src/ApiClient.js | 3 + 7 files changed, 74 insertions(+), 71 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache index 55a78651485..38867a6f341 100644 --- a/modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache +++ b/modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache @@ -173,7 +173,7 @@ ApiClient.prototype.callApi = function callApi(path, httpMethod, pathParams, queryParams, headerParams, formParams, bodyParam, contentTypes, accepts, - returnType, callback) { + returnType{{^usePromises}}, callback{{/usePromises}}) { var _this = this; var url = this.buildUrl(path, pathParams); var request = superagent(httpMethod, url); diff --git a/modules/swagger-codegen/src/main/resources/Javascript/api.mustache b/modules/swagger-codegen/src/main/resources/Javascript/api.mustache index 57c3192400f..386cf9380ea 100644 --- a/modules/swagger-codegen/src/main/resources/Javascript/api.mustache +++ b/modules/swagger-codegen/src/main/resources/Javascript/api.mustache @@ -25,10 +25,10 @@ * {{summary}} * {{notes}} {{#allParams}} * @param {{=<% %>=}}{<% dataType %>} <%={{ }}=%> {{paramName}} {{description}} - {{/allParams}} * @param {function} callback the callback function, accepting three arguments: error, data, response{{#returnType}} + {{/allParams}} {{^usePromises}}* @param {function} callback the callback function, accepting three arguments: error, data, response{{/usePromises}}{{#returnType}} * data is of type: {{{returnType}}}{{/returnType}} */ - self.{{nickname}} = function({{#allParams}}{{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}{{#hasParams}}, {{/hasParams}}callback) { + self.{{nickname}} = function({{#allParams}}{{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}{{^usePromises}}{{#hasParams}}, {{/hasParams}}callback{{/usePromises}}) { var postBody = {{#bodyParam}}{{paramName}}{{/bodyParam}}{{^bodyParam}}null{{/bodyParam}}; {{#allParams}}{{#required}} // verify the required parameter '{{paramName}}' is set @@ -58,7 +58,7 @@ return this.apiClient.callApi( '<&path>', '', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType, callback + contentTypes, accepts, returnType<^usePromises>, callback ); <={{ }}=> } diff --git a/samples/client/petstore/javascript-promise/src/ApiClient.js b/samples/client/petstore/javascript-promise/src/ApiClient.js index 0a3ec730549..c6843ed7560 100644 --- a/samples/client/petstore/javascript-promise/src/ApiClient.js +++ b/samples/client/petstore/javascript-promise/src/ApiClient.js @@ -173,7 +173,7 @@ ApiClient.prototype.callApi = function callApi(path, httpMethod, pathParams, queryParams, headerParams, formParams, bodyParam, contentTypes, accepts, - returnType, callback) { + returnType) { var _this = this; var url = this.buildUrl(path, pathParams); var request = superagent(httpMethod, url); diff --git a/samples/client/petstore/javascript-promise/src/api/PetApi.js b/samples/client/petstore/javascript-promise/src/api/PetApi.js index 91e330eab92..d2ece31da91 100644 --- a/samples/client/petstore/javascript-promise/src/api/PetApi.js +++ b/samples/client/petstore/javascript-promise/src/api/PetApi.js @@ -25,9 +25,9 @@ * Update an existing pet * * @param {Pet} body Pet object that needs to be added to the store - * @param {function} callback the callback function, accepting three arguments: error, data, response + */ - self.updatePet = function(body, callback) { + self.updatePet = function(body) { var postBody = body; @@ -48,7 +48,7 @@ return this.apiClient.callApi( '/pet', 'PUT', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType, callback + contentTypes, accepts, returnType ); } @@ -57,9 +57,9 @@ * Add a new pet to the store * * @param {Pet} body Pet object that needs to be added to the store - * @param {function} callback the callback function, accepting three arguments: error, data, response + */ - self.addPet = function(body, callback) { + self.addPet = function(body) { var postBody = body; @@ -80,7 +80,7 @@ return this.apiClient.callApi( '/pet', 'POST', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType, callback + contentTypes, accepts, returnType ); } @@ -89,10 +89,10 @@ * Finds Pets by status * Multiple status values can be provided with comma seperated strings * @param {[String]} status Status values that need to be considered for filter - * @param {function} callback the callback function, accepting three arguments: error, data, response + * data is of type: [Pet] */ - self.findPetsByStatus = function(status, callback) { + self.findPetsByStatus = function(status) { var postBody = null; @@ -114,7 +114,7 @@ return this.apiClient.callApi( '/pet/findByStatus', 'GET', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType, callback + contentTypes, accepts, returnType ); } @@ -123,10 +123,10 @@ * Finds Pets by tags * Muliple tags can be provided with comma seperated strings. Use tag1, tag2, tag3 for testing. * @param {[String]} tags Tags to filter by - * @param {function} callback the callback function, accepting three arguments: error, data, response + * data is of type: [Pet] */ - self.findPetsByTags = function(tags, callback) { + self.findPetsByTags = function(tags) { var postBody = null; @@ -148,7 +148,7 @@ return this.apiClient.callApi( '/pet/findByTags', 'GET', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType, callback + contentTypes, accepts, returnType ); } @@ -157,10 +157,10 @@ * Find pet by ID * Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions * @param {Integer} petId ID of pet that needs to be fetched - * @param {function} callback the callback function, accepting three arguments: error, data, response + * data is of type: Pet */ - self.getPetById = function(petId, callback) { + self.getPetById = function(petId) { var postBody = null; // verify the required parameter 'petId' is set @@ -187,7 +187,7 @@ return this.apiClient.callApi( '/pet/{petId}', 'GET', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType, callback + contentTypes, accepts, returnType ); } @@ -198,9 +198,9 @@ * @param {String} petId ID of pet that needs to be updated * @param {String} name Updated name of the pet * @param {String} status Updated status of the pet - * @param {function} callback the callback function, accepting three arguments: error, data, response + */ - self.updatePetWithForm = function(petId, name, status, callback) { + self.updatePetWithForm = function(petId, name, status) { var postBody = null; // verify the required parameter 'petId' is set @@ -229,7 +229,7 @@ return this.apiClient.callApi( '/pet/{petId}', 'POST', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType, callback + contentTypes, accepts, returnType ); } @@ -239,9 +239,9 @@ * * @param {Integer} petId Pet id to delete * @param {String} apiKey - * @param {function} callback the callback function, accepting three arguments: error, data, response + */ - self.deletePet = function(petId, apiKey, callback) { + self.deletePet = function(petId, apiKey) { var postBody = null; // verify the required parameter 'petId' is set @@ -269,7 +269,7 @@ return this.apiClient.callApi( '/pet/{petId}', 'DELETE', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType, callback + contentTypes, accepts, returnType ); } @@ -280,9 +280,9 @@ * @param {Integer} petId ID of pet to update * @param {String} additionalMetadata Additional data to pass to server * @param {File} file file to upload - * @param {function} callback the callback function, accepting three arguments: error, data, response + */ - self.uploadFile = function(petId, additionalMetadata, file, callback) { + self.uploadFile = function(petId, additionalMetadata, file) { var postBody = null; // verify the required parameter 'petId' is set @@ -311,7 +311,7 @@ return this.apiClient.callApi( '/pet/{petId}/uploadImage', 'POST', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType, callback + contentTypes, accepts, returnType ); } @@ -320,10 +320,10 @@ * Fake endpoint to test byte array return by 'Find pet by ID' * Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions * @param {Integer} petId ID of pet that needs to be fetched - * @param {function} callback the callback function, accepting three arguments: error, data, response + * data is of type: 'String' */ - self.getPetByIdWithByteArray = function(petId, callback) { + self.getPetByIdWithByteArray = function(petId) { var postBody = null; // verify the required parameter 'petId' is set @@ -350,7 +350,7 @@ return this.apiClient.callApi( '/pet/{petId}?testing_byte_array=true', 'GET', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType, callback + contentTypes, accepts, returnType ); } @@ -359,9 +359,9 @@ * Fake endpoint to test byte array in body parameter for adding a new pet to the store * * @param {String} body Pet object in the form of byte array - * @param {function} callback the callback function, accepting three arguments: error, data, response + */ - self.addPetUsingByteArray = function(body, callback) { + self.addPetUsingByteArray = function(body) { var postBody = body; @@ -382,7 +382,7 @@ return this.apiClient.callApi( '/pet?testing_byte_array=true', 'POST', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType, callback + contentTypes, accepts, returnType ); } diff --git a/samples/client/petstore/javascript-promise/src/api/StoreApi.js b/samples/client/petstore/javascript-promise/src/api/StoreApi.js index 632d5b83631..d6f0503c136 100644 --- a/samples/client/petstore/javascript-promise/src/api/StoreApi.js +++ b/samples/client/petstore/javascript-promise/src/api/StoreApi.js @@ -24,10 +24,10 @@ /** * Returns pet inventories by status * Returns a map of status codes to quantities - * @param {function} callback the callback function, accepting three arguments: error, data, response + * data is of type: {'String': 'Integer'} */ - self.getInventory = function(callback) { + self.getInventory = function() { var postBody = null; @@ -48,7 +48,7 @@ return this.apiClient.callApi( '/store/inventory', 'GET', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType, callback + contentTypes, accepts, returnType ); } @@ -57,10 +57,10 @@ * Place an order for a pet * * @param {Order} body order placed for purchasing the pet - * @param {function} callback the callback function, accepting three arguments: error, data, response + * data is of type: Order */ - self.placeOrder = function(body, callback) { + self.placeOrder = function(body) { var postBody = body; @@ -81,7 +81,7 @@ return this.apiClient.callApi( '/store/order', 'POST', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType, callback + contentTypes, accepts, returnType ); } @@ -90,10 +90,10 @@ * Find purchase order by ID * For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions * @param {String} orderId ID of pet that needs to be fetched - * @param {function} callback the callback function, accepting three arguments: error, data, response + * data is of type: Order */ - self.getOrderById = function(orderId, callback) { + self.getOrderById = function(orderId) { var postBody = null; // verify the required parameter 'orderId' is set @@ -120,7 +120,7 @@ return this.apiClient.callApi( '/store/order/{orderId}', 'GET', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType, callback + contentTypes, accepts, returnType ); } @@ -129,9 +129,9 @@ * Delete purchase order by ID * For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors * @param {String} orderId ID of the order that needs to be deleted - * @param {function} callback the callback function, accepting three arguments: error, data, response + */ - self.deleteOrder = function(orderId, callback) { + self.deleteOrder = function(orderId) { var postBody = null; // verify the required parameter 'orderId' is set @@ -158,7 +158,7 @@ return this.apiClient.callApi( '/store/order/{orderId}', 'DELETE', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType, callback + contentTypes, accepts, returnType ); } diff --git a/samples/client/petstore/javascript-promise/src/api/UserApi.js b/samples/client/petstore/javascript-promise/src/api/UserApi.js index 2ab1f1f3abb..09f7c9e0d5b 100644 --- a/samples/client/petstore/javascript-promise/src/api/UserApi.js +++ b/samples/client/petstore/javascript-promise/src/api/UserApi.js @@ -25,9 +25,9 @@ * Create user * This can only be done by the logged in user. * @param {User} body Created user object - * @param {function} callback the callback function, accepting three arguments: error, data, response + */ - self.createUser = function(body, callback) { + self.createUser = function(body) { var postBody = body; @@ -48,7 +48,7 @@ return this.apiClient.callApi( '/user', 'POST', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType, callback + contentTypes, accepts, returnType ); } @@ -57,9 +57,9 @@ * Creates list of users with given input array * * @param {[User]} body List of user object - * @param {function} callback the callback function, accepting three arguments: error, data, response + */ - self.createUsersWithArrayInput = function(body, callback) { + self.createUsersWithArrayInput = function(body) { var postBody = body; @@ -80,7 +80,7 @@ return this.apiClient.callApi( '/user/createWithArray', 'POST', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType, callback + contentTypes, accepts, returnType ); } @@ -89,9 +89,9 @@ * Creates list of users with given input array * * @param {[User]} body List of user object - * @param {function} callback the callback function, accepting three arguments: error, data, response + */ - self.createUsersWithListInput = function(body, callback) { + self.createUsersWithListInput = function(body) { var postBody = body; @@ -112,7 +112,7 @@ return this.apiClient.callApi( '/user/createWithList', 'POST', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType, callback + contentTypes, accepts, returnType ); } @@ -122,10 +122,10 @@ * * @param {String} username The user name for login * @param {String} password The password for login in clear text - * @param {function} callback the callback function, accepting three arguments: error, data, response + * data is of type: 'String' */ - self.loginUser = function(username, password, callback) { + self.loginUser = function(username, password) { var postBody = null; @@ -148,7 +148,7 @@ return this.apiClient.callApi( '/user/login', 'GET', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType, callback + contentTypes, accepts, returnType ); } @@ -156,9 +156,9 @@ /** * Logs out current logged in user session * - * @param {function} callback the callback function, accepting three arguments: error, data, response + */ - self.logoutUser = function(callback) { + self.logoutUser = function() { var postBody = null; @@ -179,7 +179,7 @@ return this.apiClient.callApi( '/user/logout', 'GET', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType, callback + contentTypes, accepts, returnType ); } @@ -188,10 +188,10 @@ * Get user by user name * * @param {String} username The name that needs to be fetched. Use user1 for testing. - * @param {function} callback the callback function, accepting three arguments: error, data, response + * data is of type: User */ - self.getUserByName = function(username, callback) { + self.getUserByName = function(username) { var postBody = null; // verify the required parameter 'username' is set @@ -218,7 +218,7 @@ return this.apiClient.callApi( '/user/{username}', 'GET', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType, callback + contentTypes, accepts, returnType ); } @@ -228,9 +228,9 @@ * This can only be done by the logged in user. * @param {String} username name that need to be deleted * @param {User} body Updated user object - * @param {function} callback the callback function, accepting three arguments: error, data, response + */ - self.updateUser = function(username, body, callback) { + self.updateUser = function(username, body) { var postBody = body; // verify the required parameter 'username' is set @@ -257,7 +257,7 @@ return this.apiClient.callApi( '/user/{username}', 'PUT', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType, callback + contentTypes, accepts, returnType ); } @@ -266,9 +266,9 @@ * Delete user * This can only be done by the logged in user. * @param {String} username The name that needs to be deleted - * @param {function} callback the callback function, accepting three arguments: error, data, response + */ - self.deleteUser = function(username, callback) { + self.deleteUser = function(username) { var postBody = null; // verify the required parameter 'username' is set @@ -295,7 +295,7 @@ return this.apiClient.callApi( '/user/{username}', 'DELETE', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType, callback + contentTypes, accepts, returnType ); } diff --git a/samples/client/petstore/javascript/src/ApiClient.js b/samples/client/petstore/javascript/src/ApiClient.js index 9968b2dfc88..a102b4fb0cb 100644 --- a/samples/client/petstore/javascript/src/ApiClient.js +++ b/samples/client/petstore/javascript/src/ApiClient.js @@ -214,6 +214,8 @@ request.accept(accept); } + + request.end(function(error, response) { if (callback) { var data = null; @@ -225,6 +227,7 @@ }); return request; + }; ApiClient.parseDate = function parseDate(str) { From 2e1e0be2d5f240597dd666c065105cf03462b4b8 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 9 Feb 2016 13:45:12 +0100 Subject: [PATCH 109/189] Add VendorExtensions to root swagger --- .../src/main/java/io/swagger/codegen/CodegenConfig.java | 2 ++ .../src/main/java/io/swagger/codegen/DefaultCodegen.java | 5 +++++ .../main/java/io/swagger/codegen/DefaultGenerator.java | 8 ++++++++ 3 files changed, 15 insertions(+) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConfig.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConfig.java index 720f2f8aa67..9bb5b89089a 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConfig.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConfig.java @@ -18,6 +18,8 @@ public interface CodegenConfig { String getHelp(); Map additionalProperties(); + + Map vendorExtensions(); String testPackage(); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java index dd1faa82ed4..0ea82226cef 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java @@ -71,6 +71,7 @@ public class DefaultCodegen { protected String templateDir; protected String embeddedTemplateDir; protected Map additionalProperties = new HashMap(); + protected Map vendorExtensions = new HashMap(); protected List supportingFiles = new ArrayList(); protected List cliOptions = new ArrayList(); protected boolean skipOverwrite; @@ -247,6 +248,10 @@ public class DefaultCodegen { return additionalProperties; } + public Map vendorExtensions() { + return vendorExtensions; + } + public List supportingFiles() { return supportingFiles; } diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java index eda6c2a456b..94716051020 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java @@ -133,6 +133,10 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { config.additionalProperties().put("termsOfService", info.getTermsOfService()); } } + + if(swagger.getVendorExtensions() != null) { + config.vendorExtensions().putAll(swagger.getVendorExtensions()); + } StringBuilder hostBuilder = new StringBuilder(); String scheme; @@ -273,6 +277,10 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { operation.put("classname", config.toApiName(tag)); operation.put("classVarName", config.toApiVarName(tag)); operation.put("importPath", config.toApiImport(tag)); + + if(!config.vendorExtensions().isEmpty()) { + operation.put("vendorExtensions", config.vendorExtensions()); + } // Pass sortParamsByRequiredFlag through to the Mustache template... boolean sortParamsByRequiredFlag = true; From fed231c46db88d9c7456fbee03d128efce52641b Mon Sep 17 00:00:00 2001 From: wing328 Date: Tue, 9 Feb 2016 22:13:47 +0800 Subject: [PATCH 110/189] fix documentation comment in Configuration class (C#), make compile-mono permission executable --- .../resources/csharp/Configuration.mustache | 4 +-- .../Lib/SwaggerClient/compile-mono.sh | 0 .../src/Properties/AssemblyInfo.cs | 33 ------------------- .../csharp/IO/Swagger/Client/Configuration.cs | 4 +-- 4 files changed, 4 insertions(+), 37 deletions(-) mode change 100644 => 100755 samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/compile-mono.sh delete mode 100644 samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/Properties/AssemblyInfo.cs diff --git a/modules/swagger-codegen/src/main/resources/csharp/Configuration.mustache b/modules/swagger-codegen/src/main/resources/csharp/Configuration.mustache index e7a19003e15..5a61114e2c4 100644 --- a/modules/swagger-codegen/src/main/resources/csharp/Configuration.mustache +++ b/modules/swagger-codegen/src/main/resources/csharp/Configuration.mustache @@ -98,9 +98,9 @@ namespace {{packageName}}.Client public ApiClient ApiClient; /// - /// Set the ApiClient using Default or ApiClient instance + /// Set the ApiClient using Default or ApiClient instance. /// - /// An instance of ApiClient + /// An instance of ApiClient. /// public void setApiClientUsingDefault (ApiClient apiClient = null) { diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/compile-mono.sh b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/compile-mono.sh old mode 100644 new mode 100755 diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/Properties/AssemblyInfo.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/Properties/AssemblyInfo.cs deleted file mode 100644 index 1de9edb2a81..00000000000 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; -using System.Windows; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Swagger Library")] -[assembly: AssemblyDescription("A library generated from a Swagger doc")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Swagger")] -[assembly: AssemblyProduct("SwaggerLibrary")] -[assembly: AssemblyCopyright("No Copyright")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0")] -[assembly: AssemblyFileVersion("1.0.0")] diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/Configuration.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/Configuration.cs index e55fc875f42..2622a9b11fc 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/Configuration.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/Configuration.cs @@ -98,9 +98,9 @@ namespace IO.Swagger.Client public ApiClient ApiClient; /// - /// Set the ApiClient using Default or ApiClient instance + /// Set the ApiClient using Default or ApiClient instance. /// - /// An instance of ApiClient + /// An instance of ApiClient. /// public void setApiClientUsingDefault (ApiClient apiClient = null) { From dd29cf9d53b4e100275e243b0c83d5c3ea3325e2 Mon Sep 17 00:00:00 2001 From: delenius Date: Tue, 9 Feb 2016 07:35:45 -0800 Subject: [PATCH 111/189] Use defaultValue for the usePromise CliOption --- .../io/swagger/codegen/languages/JavascriptClientCodegen.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java index 20c7fc62e6b..5bde96b68b2 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java @@ -83,7 +83,8 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo cliOptions.add(new CliOption(PROJECT_LICENSE_NAME, "name of the license the project uses (Default: using info.license.name)")); cliOptions.add(new CliOption(USE_PROMISES, - "use Promises as return values from the client API, instead of superagent callbacks (Default: false)")); + "use Promises as return values from the client API, instead of superagent callbacks") + .defaultValue(Boolean.FALSE.toString())); } @Override From d56d626450cd9bd9d20c18aba5514fe934a0fd8a Mon Sep 17 00:00:00 2001 From: delenius Date: Tue, 9 Feb 2016 07:50:12 -0800 Subject: [PATCH 112/189] Remove wildcards from imports --- .../languages/JavascriptClientCodegen.java | 26 ++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java index 5bde96b68b2..2b848393e97 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java @@ -1,18 +1,38 @@ package io.swagger.codegen.languages; import com.google.common.base.Strings; -import io.swagger.codegen.*; -import io.swagger.models.*; + +import io.swagger.codegen.CliOption; +import io.swagger.codegen.CodegenConfig; +import io.swagger.codegen.CodegenConstants; +import io.swagger.codegen.CodegenModel; +import io.swagger.codegen.CodegenOperation; +import io.swagger.codegen.CodegenProperty; +import io.swagger.codegen.CodegenType; +import io.swagger.codegen.SupportingFile; +import io.swagger.codegen.DefaultCodegen; +import io.swagger.models.Info; +import io.swagger.models.License; +import io.swagger.models.Model; +import io.swagger.models.Operation; +import io.swagger.models.Swagger; import io.swagger.models.properties.ArrayProperty; import io.swagger.models.properties.MapProperty; import io.swagger.models.properties.Property; import io.swagger.models.properties.RefProperty; + import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.File; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; public class JavascriptClientCodegen extends DefaultCodegen implements CodegenConfig { @SuppressWarnings("hiding") From cf7fc1a61bd68d85ec2eb29699dc7bff68b36a5b Mon Sep 17 00:00:00 2001 From: Joseph Zuromski Date: Tue, 9 Feb 2016 08:30:27 -0800 Subject: [PATCH 113/189] make SwaggerClient a shared scheme --- .../xcschemes/SwaggerClient.xcscheme | 102 ++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 samples/client/petstore/swift/SwaggerClientTests/SwaggerClient.xcodeproj/xcshareddata/xcschemes/SwaggerClient.xcscheme diff --git a/samples/client/petstore/swift/SwaggerClientTests/SwaggerClient.xcodeproj/xcshareddata/xcschemes/SwaggerClient.xcscheme b/samples/client/petstore/swift/SwaggerClientTests/SwaggerClient.xcodeproj/xcshareddata/xcschemes/SwaggerClient.xcscheme new file mode 100644 index 00000000000..5ba034cec55 --- /dev/null +++ b/samples/client/petstore/swift/SwaggerClientTests/SwaggerClient.xcodeproj/xcshareddata/xcschemes/SwaggerClient.xcscheme @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From cdc9fb5f5e15178c6345110382beeb1823bf42d3 Mon Sep 17 00:00:00 2001 From: David Keene Date: Tue, 9 Feb 2016 09:33:10 -0800 Subject: [PATCH 114/189] fixing var name --- .../swagger-codegen/src/main/resources/swift/Models.mustache | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/resources/swift/Models.mustache b/modules/swagger-codegen/src/main/resources/swift/Models.mustache index cf0e8862658..5b3c6dc6a57 100644 --- a/modules/swagger-codegen/src/main/resources/swift/Models.mustache +++ b/modules/swagger-codegen/src/main/resources/swift/Models.mustache @@ -121,7 +121,7 @@ class Decoders { // treat as a java date return NSDate(timeIntervalSince1970: Double(sourceInt / 1000) ) } - fatalError("formatter failed to parse \(sourceString)") + fatalError("formatter failed to parse \(source)") } {{#models}}{{#model}} // Decoder for [{{{classname}}}] From 37d07e1012c303ba74afd101529f1fd9c204c04c Mon Sep 17 00:00:00 2001 From: Jim Schubert Date: Sun, 7 Feb 2016 16:55:08 -0500 Subject: [PATCH 115/189] [csharp][aspnet5] AbstractCSharpCodegen base This moves a bit of logic into a base type to prevent lots of duplicates. I've only converted csharp and aspnet5 generators, not csharp 2.0. This base class should provide enough flexibility to support other C# based client and server generators. --- .../languages/AbstractCSharpCodegen.java | 509 ++++++++++++++++ .../languages/AspNet5ServerCodegen.java | 466 ++------------- .../languages/CSharpClientCodegen.java | 563 +++--------------- .../aspnet5/AspNet5ServerOptionsTest.java | 2 - .../IO/Swagger/Properties/AssemblyInfo.cs | 33 + 5 files changed, 674 insertions(+), 899 deletions(-) create mode 100644 modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractCSharpCodegen.java create mode 100644 samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Properties/AssemblyInfo.cs diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractCSharpCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractCSharpCodegen.java new file mode 100644 index 00000000000..79659d841f5 --- /dev/null +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractCSharpCodegen.java @@ -0,0 +1,509 @@ +package io.swagger.codegen.languages; + +import io.swagger.codegen.*; +import io.swagger.models.properties.*; +import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.util.*; + +public abstract class AbstractCSharpCodegen extends DefaultCodegen implements CodegenConfig { + + protected boolean optionalAssemblyInfoFlag = true; + protected boolean optionalProjectFileFlag = false; + protected boolean optionalMethodArgumentFlag = true; + protected boolean useDateTimeOffsetFlag = false; + protected boolean useCollection = false; + protected boolean returnICollection = false; + + protected String packageVersion = "1.0.0"; + protected String packageName = "IO.Swagger"; + protected String sourceFolder = "src" + File.separator + packageName; + + protected Set collectionTypes; + protected Set mapTypes; + + protected Logger LOGGER = LoggerFactory.getLogger(AbstractCSharpCodegen.class); + + public AbstractCSharpCodegen() { + super(); + + outputFolder = "generated-code" + File.separator + this.getName(); + embeddedTemplateDir = templateDir = this.getName(); + + collectionTypes = new HashSet( + Arrays.asList( + "IList", "List", + "ICollection", "Collection", + "IEnumerable") + ); + + mapTypes = new HashSet( + Arrays.asList("IDictionary") + ); + + reservedWords = new HashSet( + Arrays.asList( + // local variable names in API methods (endpoints) + "path_", "pathParams", "queryParams", "headerParams", "formParams", "fileParams", + "postBody", "http_header_accepts", "http_header_accept", "apiKeyValue", "response", + "statusCode", + // C# reserved words + "abstract", "as", "base", "bool", "break", "byte", "case", "catch", "char", "checked", + "class", "const", "continue", "decimal", "default", "delegate", "do", "double", "else", + "enum", "event", "explicit", "extern", "false", "finally", "fixed", "float", "for", + "foreach", "goto", "if", "implicit", "in", "int", "interface", "internal", "is", "lock", + "long", "namespace", "new", "null", "object", "operator", "out", "override", "params", + "private", "protected", "public", "readonly", "ref", "return", "sbyte", "sealed", + "short", "sizeof", "stackalloc", "static", "string", "struct", "switch", "this", "throw", + "true", "try", "typeof", "uint", "ulong", "unchecked", "unsafe", "ushort", "using", + "virtual", "void", "volatile", "while") + ); + + // TODO: Either include fully qualified names here or handle in DefaultCodegen via lastIndexOf(".") search + languageSpecificPrimitives = new HashSet( + Arrays.asList( + "String", + "string", + "bool?", + "double?", + "int?", + "long?", + "float?", + "byte[]", + "ICollection", + "Collection", + "List", + "Dictionary", + "DateTime?", + "DateTimeOffset?", + "String", + "Boolean", + "Double", + "Int32", + "Int64", + "Float", + "Stream", // not really a primitive, we include it to avoid model import + "Object") + ); + + instantiationTypes.put("array", "List"); + instantiationTypes.put("list", "List"); + instantiationTypes.put("map", "Dictionary"); + + // Nullable types here assume C# 2 support is not part of base + typeMapping = new HashMap(); + typeMapping.put("string", "string"); + typeMapping.put("binary", "byte[]"); + typeMapping.put("boolean", "bool?"); + typeMapping.put("integer", "int?"); + typeMapping.put("float", "float?"); + typeMapping.put("long", "long?"); + typeMapping.put("double", "double?"); + typeMapping.put("number", "double?"); + typeMapping.put("datetime", "DateTime?"); + typeMapping.put("date", "DateTime?"); + typeMapping.put("file", "Stream"); + typeMapping.put("array", "List"); + typeMapping.put("list", "List"); + typeMapping.put("map", "Dictionary"); + typeMapping.put("object", "Object"); + } + + public void setReturnICollection(boolean returnICollection) { + this.returnICollection = returnICollection; + } + + public void setUseCollection(boolean useCollection) { + this.useCollection = useCollection; + if (useCollection) { + typeMapping.put("array", "Collection"); + typeMapping.put("list", "Collection"); + + instantiationTypes.put("array", "Collection"); + instantiationTypes.put("list", "Collection"); + } + } + + public void setOptionalMethodArgumentFlag(boolean flag) { + this.optionalMethodArgumentFlag = flag; + } + + protected void addOption(String key, String description, String defaultValue) { + CliOption option = new CliOption(key, description); + if (defaultValue != null) option.defaultValue(defaultValue); + cliOptions.add(option); + } + + protected void addSwitch(String key, String description, Boolean defaultValue) { + CliOption option = CliOption.newBoolean(key, description); + if (defaultValue != null) option.defaultValue(defaultValue.toString()); + cliOptions.add(option); + } + + public void useDateTimeOffset(boolean flag) { + this.useDateTimeOffsetFlag = flag; + if (flag) typeMapping.put("datetime", "DateTimeOffset?"); + else typeMapping.put("datetime", "DateTime?"); + } + + @Override + public void processOpts() { + super.processOpts(); + + // {{packageVersion}} + if (additionalProperties.containsKey(CodegenConstants.PACKAGE_VERSION)) { + setPackageVersion((String) additionalProperties.get(CodegenConstants.PACKAGE_VERSION)); + } else { + additionalProperties.put(CodegenConstants.PACKAGE_VERSION, packageVersion); + } + + // {{sourceFolder}} + if (additionalProperties.containsKey(CodegenConstants.SOURCE_FOLDER)) { + setSourceFolder((String) additionalProperties.get(CodegenConstants.SOURCE_FOLDER)); + } else { + additionalProperties.put(CodegenConstants.SOURCE_FOLDER, this.sourceFolder); + } + + // {{packageName}} + if (additionalProperties.containsKey(CodegenConstants.PACKAGE_NAME)) { + setPackageName((String) additionalProperties.get(CodegenConstants.PACKAGE_NAME)); + } else { + additionalProperties.put(CodegenConstants.PACKAGE_NAME, packageName); + } + + // {{useDateTimeOffset}} + if (additionalProperties.containsKey(CodegenConstants.USE_DATETIME_OFFSET)) { + useDateTimeOffset(Boolean.valueOf(additionalProperties.get(CodegenConstants.USE_DATETIME_OFFSET).toString())); + } + additionalProperties.put(CodegenConstants.USE_DATETIME_OFFSET, useDateTimeOffsetFlag); + + if (additionalProperties.containsKey(CodegenConstants.USE_COLLECTION)) { + setUseCollection(Boolean.valueOf(additionalProperties.get(CodegenConstants.USE_COLLECTION).toString())); + } + + if (additionalProperties.containsKey(CodegenConstants.RETURN_ICOLLECTION)) { + setReturnICollection(Boolean.valueOf(additionalProperties.get(CodegenConstants.RETURN_ICOLLECTION).toString())); + } + } + + @Override + public Map postProcessModels(Map objs) { + List models = (List) objs.get("models"); + for (Object _mo : models) { + Map mo = (Map) _mo; + CodegenModel cm = (CodegenModel) mo.get("model"); + for (CodegenProperty var : cm.vars) { + // check to see if model name is same as the property name + // which will result in compilation error + // if found, prepend with _ to workaround the limitation + if (var.name.equals(cm.name)) { + var.name = "_" + var.name; + } + } + } + return objs; + } + + @Override + public Map postProcessOperations(Map objs) { + super.postProcessOperations(objs); + if (objs != null) { + Map operations = (Map) objs.get("operations"); + if (operations != null) { + List ops = (List) operations.get("operation"); + for (CodegenOperation operation : ops) { + + // Check return types for collection + if (operation.returnType != null) { + String typeMapping; + int namespaceEnd = operation.returnType.lastIndexOf("."); + if (namespaceEnd > 0) { + typeMapping = operation.returnType.substring(namespaceEnd); + } else { + typeMapping = operation.returnType; + } + + if (this.collectionTypes.contains(typeMapping)) { + operation.isListContainer = true; + operation.returnContainer = operation.returnType; + if (this.returnICollection && ( + typeMapping.startsWith("List") || + typeMapping.startsWith("Collection"))) { + // NOTE: ICollection works for both List and Collection + int genericStart = typeMapping.indexOf("<"); + if (genericStart > 0) { + operation.returnType = "ICollection" + typeMapping.substring(genericStart); + } + } + } else { + operation.returnContainer = operation.returnType; + operation.isMapContainer = this.mapTypes.contains(typeMapping); + } + } + + processOperation(operation); + } + } + } + + return objs; + } + + protected void processOperation(CodegenOperation operation) { + // default noop + } + + @Override + public String apiFileFolder() { + return outputFolder + File.separator + sourceFolder + File.separator + apiPackage().replace('.', File.separatorChar); + } + + @Override + public String modelFileFolder() { + return outputFolder + File.separator + sourceFolder + File.separator + modelPackage().replace('.', File.separatorChar); + } + + @Override + public String toModelFilename(String name) { + // should be the same as the model name + return toModelName(name); + } + + @Override + public String toOperationId(String operationId) { + // throw exception if method name is empty + if (StringUtils.isEmpty(operationId)) { + throw new RuntimeException("Empty method name (operationId) not allowed"); + } + + // method name cannot use reserved keyword, e.g. return + if (reservedWords.contains(operationId)) { + throw new RuntimeException(operationId + " (reserved word) cannot be used as method name"); + } + + return camelize(sanitizeName(operationId)); + } + + @Override + public String toVarName(String name) { + // sanitize name + name = sanitizeName(name); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. + + // if it's all uppper case, do nothing + if (name.matches("^[A-Z_]*$")) { + return name; + } + + // camelize the variable name + // pet_id => PetId + name = camelize(name); + + // for reserved word or word starting with number, append _ + if (reservedWords.contains(name) || name.matches("^\\d.*")) { + name = escapeReservedWord(name); + } + + return name; + } + + @Override + public String toParamName(String name) { + // replace - with _ e.g. created-at => created_at + name = name.replaceAll("-", "_"); + + // if it's all uppper case, do nothing + if (name.matches("^[A-Z_]*$")) { + return name; + } + + // camelize(lower) the variable name + // pet_id => petId + name = camelize(name, true); + + // for reserved word or word starting with number, append _ + if (reservedWords.contains(name) || name.matches("^\\d.*")) { + name = escapeReservedWord(name); + } + + return name; + } + + @Override + public String escapeReservedWord(String name) { + return "_" + name; + } + + /** + * Return the example value of the property + * + * @param p Swagger property object + * @return string presentation of the example value of the property + */ + @Override + public String toExampleValue(Property p) { + if (p instanceof StringProperty) { + StringProperty dp = (StringProperty) p; + if (dp.getExample() != null) { + return "\"" + dp.getExample().toString() + "\""; + } + } else if (p instanceof BooleanProperty) { + BooleanProperty dp = (BooleanProperty) p; + if (dp.getExample() != null) { + return dp.getExample().toString(); + } + } else if (p instanceof DateProperty) { + // TODO + } else if (p instanceof DateTimeProperty) { + // TODO + } else if (p instanceof DoubleProperty) { + DoubleProperty dp = (DoubleProperty) p; + if (dp.getExample() != null) { + return dp.getExample().toString(); + } + } else if (p instanceof FloatProperty) { + FloatProperty dp = (FloatProperty) p; + if (dp.getExample() != null) { + return dp.getExample().toString(); + } + } else if (p instanceof IntegerProperty) { + IntegerProperty dp = (IntegerProperty) p; + if (dp.getExample() != null) { + return dp.getExample().toString(); + } + } else if (p instanceof LongProperty) { + LongProperty dp = (LongProperty) p; + if (dp.getExample() != null) { + return dp.getExample().toString(); + } + } + + return null; + } + + /** + * Return the default value of the property + * + * @param p Swagger property object + * @return string presentation of the default value of the property + */ + @Override + public String toDefaultValue(Property p) { + if (p instanceof StringProperty) { + StringProperty dp = (StringProperty) p; + if (dp.getDefault() != null) { + return "\"" + dp.getDefault().toString() + "\""; + } + } else if (p instanceof BooleanProperty) { + BooleanProperty dp = (BooleanProperty) p; + if (dp.getDefault() != null) { + return dp.getDefault().toString(); + } + } else if (p instanceof DateProperty) { + // TODO + } else if (p instanceof DateTimeProperty) { + // TODO + } else if (p instanceof DoubleProperty) { + DoubleProperty dp = (DoubleProperty) p; + if (dp.getDefault() != null) { + return dp.getDefault().toString(); + } + } else if (p instanceof FloatProperty) { + FloatProperty dp = (FloatProperty) p; + if (dp.getDefault() != null) { + return dp.getDefault().toString(); + } + } else if (p instanceof IntegerProperty) { + IntegerProperty dp = (IntegerProperty) p; + if (dp.getDefault() != null) { + return dp.getDefault().toString(); + } + } else if (p instanceof LongProperty) { + LongProperty dp = (LongProperty) p; + if (dp.getDefault() != null) { + return dp.getDefault().toString(); + } + } + + return null; + } + + @Override + public String getSwaggerType(Property p) { + String swaggerType = super.getSwaggerType(p); + String type; + if (typeMapping.containsKey(swaggerType.toLowerCase())) { + type = typeMapping.get(swaggerType.toLowerCase()); + if (languageSpecificPrimitives.contains(type)) { + return type; + } + } else { + type = swaggerType; + } + return toModelName(type); + } + + @Override + public String getTypeDeclaration(Property p) { + if (p instanceof ArrayProperty) { + ArrayProperty ap = (ArrayProperty) p; + Property inner = ap.getItems(); + return getSwaggerType(p) + "<" + getTypeDeclaration(inner) + ">"; + } else if (p instanceof MapProperty) { + MapProperty mp = (MapProperty) p; + Property inner = mp.getAdditionalProperties(); + + return getSwaggerType(p) + ""; + } + return super.getTypeDeclaration(p); + } + + @Override + public String toModelName(String name) { + name = sanitizeName(name); + + // model name cannot use reserved keyword, e.g. return + if (reservedWords.contains(name)) { + throw new RuntimeException(name + " (reserved word) cannot be used as a model name"); + } + + // camelize the model name + // phone_number => PhoneNumber + return camelize(name); + } + + @Override + public String apiTestFileFolder() { + return outputFolder + ".Test"; + } + + @Override + public String modelTestFileFolder() { + return outputFolder + ".Test"; + } + + @Override + public String toApiTestFilename(String name) { + return toApiName(name) + "Tests"; + } + + @Override + public String toModelTestFilename(String name) { + return toModelName(name) + "Tests"; + } + + + public void setPackageName(String packageName) { + this.packageName = packageName; + } + + public void setPackageVersion(String packageVersion) { + this.packageVersion = packageVersion; + } + + public void setSourceFolder(String sourceFolder) { + this.sourceFolder = sourceFolder; + } +} diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AspNet5ServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AspNet5ServerCodegen.java index b6339ee11c6..25290aa5244 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AspNet5ServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AspNet5ServerCodegen.java @@ -9,16 +9,7 @@ import org.slf4j.LoggerFactory; import java.io.File; import java.util.*; -public class AspNet5ServerCodegen extends DefaultCodegen implements CodegenConfig { - protected boolean useDateTimeOffsetFlag = false; - protected String packageName = "IO.Swagger"; - protected String packageVersion = "1.0.0"; - protected boolean useCollection = false; - protected boolean returnICollection = false; - protected String sourceFolder = "src" + File.separator + packageName; - - protected Set collectionTypes; - protected Set mapTypes; +public class AspNet5ServerCodegen extends AbstractCSharpCodegen { @SuppressWarnings("hiding") protected Logger LOGGER = LoggerFactory.getLogger(AspNet5ServerCodegen.class); @@ -26,90 +17,21 @@ public class AspNet5ServerCodegen extends DefaultCodegen implements CodegenConfi public AspNet5ServerCodegen() { super(); - outputFolder = "generated-code" + File.separator + "aspnet5"; - embeddedTemplateDir = templateDir = "aspnet5"; + outputFolder = "generated-code" + File.separator + this.getName(); modelTemplateFiles.put("model.mustache", ".cs"); apiTemplateFiles.put("controller.mustache", ".cs"); - // TODO: Create a base C# abstract type to avoid duplication of language functionality - collectionTypes = new HashSet( - Arrays.asList( - "IList", "List", - "ICollection", "Collection", - "IEnumerable") - ); - mapTypes = new HashSet( - Arrays.asList("IDictionary") - ); - - reservedWords = new HashSet( - Arrays.asList( - // local variable names in API methods (endpoints) - "path_", "pathParams", "queryParams", "headerParams", "formParams", "fileParams", - "postBody", "http_header_accepts", "http_header_accept", "apiKeyValue", "response", - "statusCode", - // C# reserved words - "abstract", "as", "base", "bool", "break", "byte", "case", "catch", "char", "checked", - "class", "const", "continue", "decimal", "default", "delegate", "do", "double", "else", - "enum", "event", "explicit", "extern", "false", "finally", "fixed", "float", "for", - "foreach", "goto", "if", "implicit", "in", "int", "interface", "internal", "is", "lock", - "long", "namespace", "new", "null", "object", "operator", "out", "override", "params", - "private", "protected", "public", "readonly", "ref", "return", "sbyte", "sealed", - "short", "sizeof", "stackalloc", "static", "string", "struct", "switch", "this", "throw", - "true", "try", "typeof", "uint", "ulong", "unchecked", "unsafe", "ushort", "using", - "virtual", "void", "volatile", "while") - ); - - languageSpecificPrimitives = new HashSet( - Arrays.asList( - "String", - "string", - "bool?", - "double?", - "int?", - "long?", - "float?", - "byte[]", - "ICollection", - "Collection", - "List", - "Dictionary", - "DateTime?", - "DateTimeOffset?", - "String", - "Boolean", - "Double", - "Integer", - "Long", - "Float", - "Stream", // not really a primitive, we include it to avoid model import - "Object") - ); - - instantiationTypes.put("array", "List"); - instantiationTypes.put("list", "List"); - instantiationTypes.put("map", "Dictionary"); - - typeMapping = new HashMap(); - typeMapping.put("string", "string"); - typeMapping.put("binary", "byte[]"); - typeMapping.put("boolean", "bool?"); - typeMapping.put("integer", "int?"); - typeMapping.put("float", "float?"); - typeMapping.put("long", "long?"); - typeMapping.put("double", "double?"); - typeMapping.put("number", "double?"); - typeMapping.put("datetime", "DateTime?"); - typeMapping.put("date", "DateTime?"); - typeMapping.put("file", "Stream"); - typeMapping.put("array", "List"); - typeMapping.put("list", "List"); - typeMapping.put("map", "Dictionary"); - typeMapping.put("object", "Object"); + // contextually reserved words + reservedWords.add("var"); + reservedWords.add("async"); + reservedWords.add("await"); + reservedWords.add("dynamic"); + reservedWords.add("yield"); cliOptions.clear(); + // CLI options addOption(CodegenConstants.PACKAGE_NAME, "C# package name (convention: Title.Case).", this.packageName); @@ -122,82 +44,46 @@ public class AspNet5ServerCodegen extends DefaultCodegen implements CodegenConfi CodegenConstants.SOURCE_FOLDER_DESC, sourceFolder); + // CLI Switches addSwitch(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG_DESC, - Boolean.TRUE); - - addSwitch(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, - CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG_DESC, - Boolean.TRUE); + this.sortParamsByRequiredFlag); addSwitch(CodegenConstants.USE_DATETIME_OFFSET, CodegenConstants.USE_DATETIME_OFFSET_DESC, - Boolean.FALSE); + this.useDateTimeOffsetFlag); addSwitch(CodegenConstants.USE_COLLECTION, CodegenConstants.USE_COLLECTION_DESC, - Boolean.FALSE); + this.useCollection); addSwitch(CodegenConstants.RETURN_ICOLLECTION, CodegenConstants.RETURN_ICOLLECTION_DESC, - Boolean.FALSE); + this.returnICollection); } - private void addOption(String key, String description, String defaultValue){ - CliOption option = new CliOption(key, description); - if(defaultValue != null) option.defaultValue(defaultValue); - cliOptions.add(option); + @Override + public CodegenType getTag() { + return CodegenType.SERVER; } - private void addSwitch(String key, String description, Boolean defaultValue){ - CliOption option = CliOption.newBoolean(key, description); - if(defaultValue != null) option.defaultValue(defaultValue.toString()); - cliOptions.add(option); + @Override + public String getName() { + return "aspnet5"; + } + + @Override + public String getHelp() { + return "Generates an ASP.NET 5 Web API server."; } @Override public void processOpts() { super.processOpts(); - // {{packageVersion}} - if (additionalProperties.containsKey(CodegenConstants.PACKAGE_VERSION)) { - setPackageVersion((String) additionalProperties.get(CodegenConstants.PACKAGE_VERSION)); - } else { - additionalProperties.put(CodegenConstants.PACKAGE_VERSION, packageVersion); - } - - // {{sourceFolder}} - if (additionalProperties.containsKey(CodegenConstants.SOURCE_FOLDER)){ - setSourceFolder((String) additionalProperties.get(CodegenConstants.SOURCE_FOLDER)); - } else { - additionalProperties.put(CodegenConstants.SOURCE_FOLDER, this.sourceFolder); - } - - // {{packageName}} - if (additionalProperties.containsKey(CodegenConstants.PACKAGE_NAME)) { - setPackageName((String) additionalProperties.get(CodegenConstants.PACKAGE_NAME)); - } else { - additionalProperties.put(CodegenConstants.PACKAGE_NAME, packageName); - } - apiPackage = packageName + ".Controllers"; modelPackage = packageName + ".Models"; - // {{useDateTimeOffset}} - if (additionalProperties.containsKey(CodegenConstants.USE_DATETIME_OFFSET)) - { - useDateTimeOffset(Boolean.valueOf(additionalProperties.get(CodegenConstants.USE_DATETIME_OFFSET).toString())); - } - additionalProperties.put(CodegenConstants.USE_DATETIME_OFFSET, useDateTimeOffsetFlag); - - if (additionalProperties.containsKey(CodegenConstants.USE_COLLECTION)){ - setUseCollection(Boolean.valueOf(additionalProperties.get(CodegenConstants.USE_COLLECTION).toString())); - } - - if (additionalProperties.containsKey(CodegenConstants.RETURN_ICOLLECTION)){ - setReturnICollection(Boolean.valueOf(additionalProperties.get(CodegenConstants.RETURN_ICOLLECTION).toString())); - } - supportingFiles.add(new SupportingFile("global.json", "", "global.json")); supportingFiles.add(new SupportingFile("build.mustache", "", "build.sh")); supportingFiles.add(new SupportingFile("Dockerfile.mustache", this.sourceFolder, "Dockerfile")); @@ -207,43 +93,11 @@ public class AspNet5ServerCodegen extends DefaultCodegen implements CodegenConfi supportingFiles.add(new SupportingFile("project.mustache", this.sourceFolder, "project.json")); supportingFiles.add(new SupportingFile("Startup.mustache", this.sourceFolder, "Startup.cs")); - supportingFiles.add(new SupportingFile("Properties"+File.separator +"launchSettings.json", this.sourceFolder + File.separator + "Properties", "launchSettings.json")); + supportingFiles.add(new SupportingFile("Properties" + File.separator + "launchSettings.json", this.sourceFolder + File.separator + "Properties", "launchSettings.json")); - supportingFiles.add(new SupportingFile("wwwroot" +File.separator + "README.md", this.sourceFolder + File.separator + "wwwroot", "README.md")); - supportingFiles.add(new SupportingFile("wwwroot" +File.separator + "index.html", this.sourceFolder + File.separator + "wwwroot", "index.html")); - supportingFiles.add(new SupportingFile("wwwroot" +File.separator + "web.config", this.sourceFolder + File.separator + "wwwroot", "web.config")); - } - - public void useDateTimeOffset(boolean flag) { - this.useDateTimeOffsetFlag = flag; - if (flag) typeMapping.put("datetime", "DateTimeOffset?"); - else typeMapping.put("datetime", "DateTime?"); - } - - public void setReturnICollection(boolean returnICollection) { - this.returnICollection = returnICollection; - } - - public void setUseCollection(boolean useCollection) { - this.useCollection = useCollection; - if(useCollection){ - typeMapping.put("array", "Collection"); - typeMapping.put("list", "Collection"); - - instantiationTypes.put("array", "Collection"); - instantiationTypes.put("list", "Collection"); - } - } - - @Override - public CodegenType getTag() { return CodegenType.SERVER; } - - @Override - public String getName() { return "aspnet5"; } - - @Override - public String getHelp() { - return "Generates an ASP.NET 5 Web API server."; + supportingFiles.add(new SupportingFile("wwwroot" + File.separator + "README.md", this.sourceFolder + File.separator + "wwwroot", "README.md")); + supportingFiles.add(new SupportingFile("wwwroot" + File.separator + "index.html", this.sourceFolder + File.separator + "wwwroot", "index.html")); + supportingFiles.add(new SupportingFile("wwwroot" + File.separator + "web.config", this.sourceFolder + File.separator + "wwwroot", "web.config")); } @Override @@ -253,263 +107,23 @@ public class AspNet5ServerCodegen extends DefaultCodegen implements CodegenConfi @Override public String modelFileFolder() { - return outputFolder + File.separator + sourceFolder + File.separator + "Models"; + return outputFolder + File.separator + sourceFolder + File.separator + "Models"; } - // TODO: Create a base C# abstract type to avoid duplication of language functionality @Override - public String escapeReservedWord(String name) { - return "_" + name; - } + protected void processOperation(CodegenOperation operation) { + super.processOperation(operation); - // TODO: Create a base C# abstract type to avoid duplication of language functionality - @Override - public String toVarName(String name) { - // sanitize name - name = sanitizeName(name); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. - - // if it's all uppper case, do nothing - if (name.matches("^[A-Z_]*$")) { - return name; - } - - // camelize the variable name - // pet_id => PetId - name = camelize(name); - - // for reserved word or word starting with number, append _ - if (reservedWords.contains(name) || name.matches("^\\d.*")) { - name = escapeReservedWord(name); - } - - return name; - } - - // TODO: Create a base C# abstract type to avoid duplication of language functionality - @Override - public String toParamName(String name) { - // replace - with _ e.g. created-at => created_at - name = name.replaceAll("-", "_"); - - // if it's all uppper case, do nothing - if (name.matches("^[A-Z_]*$")) { - return name; - } - - // camelize(lower) the variable name - // pet_id => petId - name = camelize(name, true); - - // for reserved word or word starting with number, append _ - if (reservedWords.contains(name) || name.matches("^\\d.*")) { - name = escapeReservedWord(name); - } - - return name; - } - - // TODO: Create a base C# abstract type to avoid duplication of language functionality - @Override - public String toModelName(String name) { - name = sanitizeName(name); - - // model name cannot use reserved keyword, e.g. return - if (reservedWords.contains(name)) { - throw new RuntimeException(name + " (reserved word) cannot be used as a model name"); - } - - // camelize the model name - // phone_number => PhoneNumber - return camelize(name); - } - - // TODO: Create a base C# abstract type to avoid duplication of language functionality - @Override - public String toModelFilename(String name) { - // should be the same as the model name - return toModelName(name); - } - - // TODO: Create a base C# abstract type to avoid duplication of language functionality - @Override - public Map postProcessOperations(Map objs) { - super.postProcessOperations(objs); - if(objs != null) { - Map operations = (Map) objs.get("operations"); - if (operations != null) { - List ops = (List) operations.get("operation"); - for (CodegenOperation operation : ops) { - // HACK: Unlikely in the wild, but we need to clean operation paths for MVC Routing - if(operation.path != null){ - String original = operation.path; - operation.path = operation.path.replace("?", "/"); - if(!original.equals(operation.path)){ - LOGGER.warn("Normalized " + original + " to " + operation.path + ". Please verify generated source."); - } - } - - // Check return types for collection - if (operation.returnType != null) { - String typeMapping; - int namespaceEnd = operation.returnType.lastIndexOf("."); - if(namespaceEnd > 0) { - typeMapping = operation.returnType.substring(namespaceEnd); - } else { - typeMapping = operation.returnType; - } - - if(this.collectionTypes.contains(typeMapping)){ - operation.isListContainer = true; - operation.returnContainer = operation.returnType; - if( this.returnICollection && ( - typeMapping.startsWith("List")|| - typeMapping.startsWith("Collection")) ) { - // NOTE: ICollection works for both List and Collection - int genericStart = typeMapping.indexOf("<"); - if(genericStart > 0) { - operation.returnType = "ICollection" + typeMapping.substring(genericStart); - } - } - } else { - operation.returnContainer = operation.returnType; - operation.isMapContainer = this.mapTypes.contains(typeMapping); - } - } - - // Converts, for example, PUT to HttpPut for controller attributes - operation.httpMethod = "Http" + operation.httpMethod.substring(0,1) + operation.httpMethod.substring(1).toLowerCase(); - } + // HACK: Unlikely in the wild, but we need to clean operation paths for MVC Routing + if (operation.path != null) { + String original = operation.path; + operation.path = operation.path.replace("?", "/"); + if (!original.equals(operation.path)) { + LOGGER.warn("Normalized " + original + " to " + operation.path + ". Please verify generated source."); } } - return objs; - } - - // TODO: Create a base C# abstract type to avoid duplication of language functionality - @Override - public String getTypeDeclaration(Property p) { - if (p instanceof ArrayProperty) { - ArrayProperty ap = (ArrayProperty) p; - Property inner = ap.getItems(); - return getSwaggerType(p) + "<" + getTypeDeclaration(inner) + ">"; - } else if (p instanceof MapProperty) { - MapProperty mp = (MapProperty) p; - Property inner = mp.getAdditionalProperties(); - - return getSwaggerType(p) + ""; - } - return super.getTypeDeclaration(p); - } - - // TODO: Create a base C# abstract type to avoid duplication of language functionality - @Override - public String getSwaggerType(Property p) { - String swaggerType = super.getSwaggerType(p); - String type = null; - if (typeMapping.containsKey(swaggerType.toLowerCase())) { - type = typeMapping.get(swaggerType.toLowerCase()); - if (languageSpecificPrimitives.contains(type)) { - return type; - } - } else { - type = swaggerType; - } - return toModelName(type); - } - - // TODO: Create a base C# abstract type to avoid duplication of language functionality - @Override - public String toOperationId(String operationId) { - // throw exception if method name is empty - if (StringUtils.isEmpty(operationId)) { - throw new RuntimeException("Empty method name (operationId) not allowed"); - } - - // method name cannot use reserved keyword, e.g. return - if (reservedWords.contains(operationId)) { - throw new RuntimeException(operationId + " (reserved word) cannot be used as method name"); - } - - return camelize(sanitizeName(operationId)); - } - - // TODO: Create a base C# abstract type to avoid duplication of language functionality - @Override - public Map postProcessModels(Map objs) { - List models = (List) objs.get("models"); - for (Object _mo : models) { - Map mo = (Map) _mo; - CodegenModel cm = (CodegenModel) mo.get("model"); - for (CodegenProperty var : cm.vars) { - // check to see if model name is same as the property name - // which will result in compilation error - // if found, prepend with _ to workaround the limitation - if (var.name.equals(cm.name)) { - var.name = "_" + var.name; - } - } - } - return objs; - } - - // TODO: Create a base C# abstract type to avoid duplication of language functionality - /** - * Return the default value of the property - * - * @param p Swagger property object - * @return string presentation of the default value of the property - */ - @Override - public String toDefaultValue(Property p) { - if (p instanceof StringProperty) { - StringProperty dp = (StringProperty) p; - if (dp.getDefault() != null) { - return "\"" + dp.getDefault().toString() + "\""; - } - } else if (p instanceof BooleanProperty) { - BooleanProperty dp = (BooleanProperty) p; - if (dp.getDefault() != null) { - return dp.getDefault().toString(); - } - } else if (p instanceof DateProperty) { - // TODO - } else if (p instanceof DateTimeProperty) { - // TODO - } else if (p instanceof DoubleProperty) { - DoubleProperty dp = (DoubleProperty) p; - if (dp.getDefault() != null) { - return dp.getDefault().toString(); - } - } else if (p instanceof FloatProperty) { - FloatProperty dp = (FloatProperty) p; - if (dp.getDefault() != null) { - return dp.getDefault().toString(); - } - } else if (p instanceof IntegerProperty) { - IntegerProperty dp = (IntegerProperty) p; - if (dp.getDefault() != null) { - return dp.getDefault().toString(); - } - } else if (p instanceof LongProperty) { - LongProperty dp = (LongProperty) p; - if (dp.getDefault() != null) { - return dp.getDefault().toString(); - } - } - - return null; - } - - - public void setPackageName(String packageName) { - this.packageName = packageName; - } - - public void setPackageVersion(String packageVersion) { - this.packageVersion = packageVersion; - } - - public void setSourceFolder(String sourceFolder) { - this.sourceFolder = sourceFolder; + // Converts, for example, PUT to HttpPut for controller attributes + operation.httpMethod = "Http" + operation.httpMethod.substring(0, 1) + operation.httpMethod.substring(1).toLowerCase(); } } diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java index 1d6a40831b0..0da5b72f57f 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java @@ -22,159 +22,85 @@ import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig { - @SuppressWarnings({ "unused", "hiding" }) +public class CSharpClientCodegen extends AbstractCSharpCodegen { + @SuppressWarnings({"unused", "hiding"}) private static final Logger LOGGER = LoggerFactory.getLogger(CSharpClientCodegen.class); - protected boolean optionalAssemblyInfoFlag = true; - protected boolean optionalProjectFileFlag = false; - protected boolean optionalMethodArgumentFlag = true; - protected boolean useDateTimeOffsetFlag = false; - protected boolean useCollection = false; - protected boolean returnICollection = false; + protected String packageGuid = "{" + java.util.UUID.randomUUID().toString().toUpperCase() + "}"; protected String packageTitle = "Swagger Library"; protected String packageProductName = "SwaggerLibrary"; protected String packageDescription = "A library generated from a Swagger doc"; protected String packageCompany = "Swagger"; protected String packageCopyright = "No Copyright"; - protected String packageName = "IO.Swagger"; - protected String packageVersion = "1.0.0"; protected String clientPackage = "IO.Swagger.Client"; - protected String sourceFolder = "src" + File.separator + "main" + File.separator + "csharp"; public CSharpClientCodegen() { super(); - outputFolder = "generated-code" + File.separator + "csharp"; modelTemplateFiles.put("model.mustache", ".cs"); apiTemplateFiles.put("api.mustache", ".cs"); - embeddedTemplateDir = templateDir = "csharp"; - apiPackage = "IO.Swagger.Api"; - modelPackage = "IO.Swagger.Model"; modelTestTemplateFiles.put("model_test.mustache", ".cs"); apiTestTemplateFiles.put("api_test.mustache", ".cs"); - reservedWords = new HashSet( - Arrays.asList( - // local variable names in API methods (endpoints) - "path_", "pathParams", "queryParams", "headerParams", "formParams", "fileParams", - "postBody", "http_header_accepts", "http_header_accept", "apiKeyValue", "response", - "statusCode", - // C# reserved words - "abstract", "as", "base", "bool", "break", "byte", "case", "catch", "char", "checked", - "class", "const", "continue", "decimal", "default", "delegate", "do", "double", "else", - "enum", "event", "explicit", "extern", "false", "finally", "fixed", "float", "for", - "foreach", "goto", "if", "implicit", "in", "int", "interface", "internal", "is", "lock", - "long", "namespace", "new", "null", "object", "operator", "out", "override", "params", - "private", "protected", "public", "readonly", "ref", "return", "sbyte", "sealed", - "short", "sizeof", "stackalloc", "static", "string", "struct", "switch", "this", "throw", - "true", "try", "typeof", "uint", "ulong", "unchecked", "unsafe", "ushort", "using", - "virtual", "void", "volatile", "while") - ); - - - languageSpecificPrimitives = new HashSet( - Arrays.asList( - "String", - "string", - "bool?", - "double?", - "int?", - "long?", - "float?", - "byte[]", - "ICollection", - "Collection", - "List", - "Dictionary", - "DateTime?", - "DateTimeOffset?", - "String", - "Boolean", - "Double", - "Integer", - "Long", - "Float", - "Stream", // not really a primitive, we include it to avoid model import - "Object") - ); - - instantiationTypes.put("array", "List"); - instantiationTypes.put("list", "List"); - instantiationTypes.put("map", "Dictionary"); - - typeMapping = new HashMap(); - typeMapping.put("string", "string"); - typeMapping.put("binary", "byte[]"); - typeMapping.put("boolean", "bool?"); - typeMapping.put("integer", "int?"); - typeMapping.put("float", "float?"); - typeMapping.put("long", "long?"); - typeMapping.put("double", "double?"); - typeMapping.put("number", "double?"); - typeMapping.put("datetime", "DateTime?"); - typeMapping.put("date", "DateTime?"); - typeMapping.put("file", "Stream"); - typeMapping.put("array", "List"); - typeMapping.put("list", "List"); - typeMapping.put("map", "Dictionary"); - typeMapping.put("object", "Object"); + // C# client default + setSourceFolder("src" + File.separator + "main" + File.separator + "csharp"); cliOptions.clear(); - cliOptions.add(new CliOption(CodegenConstants.PACKAGE_NAME, "C# package name (convention: Camel.Case).") - .defaultValue("IO.Swagger")); - cliOptions.add(new CliOption(CodegenConstants.PACKAGE_VERSION, "C# package version.").defaultValue("1.0.0")); - cliOptions.add(CliOption.newBoolean(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, - CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG_DESC).defaultValue(Boolean.TRUE.toString())); - cliOptions.add(CliOption.newBoolean(CodegenConstants.OPTIONAL_METHOD_ARGUMENT, "C# Optional method argument, " + - "e.g. void square(int x=10) (.net 4.0+ only).")); - cliOptions.add(CliOption.newBoolean(CodegenConstants.OPTIONAL_ASSEMBLY_INFO, - CodegenConstants.OPTIONAL_ASSEMBLY_INFO_DESC).defaultValue(Boolean.TRUE.toString())); - cliOptions.add(new CliOption(CodegenConstants.SOURCE_FOLDER, CodegenConstants.SOURCE_FOLDER_DESC).defaultValue(sourceFolder)); - cliOptions.add(CliOption.newBoolean(CodegenConstants.USE_DATETIME_OFFSET, CodegenConstants.USE_DATETIME_OFFSET_DESC)); - cliOptions.add( CliOption.newBoolean(CodegenConstants.USE_COLLECTION, CodegenConstants.USE_COLLECTION_DESC) - .defaultValue(Boolean.FALSE.toString()) ); - cliOptions.add( CliOption.newBoolean(CodegenConstants.RETURN_ICOLLECTION, CodegenConstants.RETURN_ICOLLECTION_DESC) - .defaultValue(Boolean.FALSE.toString()) ); - cliOptions.add(CliOption.newBoolean(CodegenConstants.OPTIONAL_PROJECT_FILE, - CodegenConstants.OPTIONAL_PROJECT_FILE_DESC).defaultValue(Boolean.FALSE.toString())); - cliOptions.add(new CliOption(CodegenConstants.OPTIONAL_PROJECT_GUID, CodegenConstants.OPTIONAL_PROJECT_GUID_DESC)); + // CLI options + addOption(CodegenConstants.PACKAGE_NAME, + "C# package name (convention: Title.Case).", + this.packageName); + + addOption(CodegenConstants.PACKAGE_VERSION, + "C# package version.", + this.packageVersion); + + addOption(CodegenConstants.SOURCE_FOLDER, + CodegenConstants.SOURCE_FOLDER_DESC, + sourceFolder); + + addOption(CodegenConstants.OPTIONAL_PROJECT_GUID, + CodegenConstants.OPTIONAL_PROJECT_GUID_DESC, + null); + + // CLI Switches + addSwitch(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, + CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG_DESC, + this.sortParamsByRequiredFlag); + + addSwitch(CodegenConstants.USE_DATETIME_OFFSET, + CodegenConstants.USE_DATETIME_OFFSET_DESC, + this.useDateTimeOffsetFlag); + + addSwitch(CodegenConstants.USE_COLLECTION, + CodegenConstants.USE_COLLECTION_DESC, + this.useCollection); + + addSwitch(CodegenConstants.RETURN_ICOLLECTION, + CodegenConstants.RETURN_ICOLLECTION_DESC, + this.returnICollection); + + addSwitch(CodegenConstants.OPTIONAL_METHOD_ARGUMENT, + "C# Optional method argument, e.g. void square(int x=10) (.net 4.0+ only).", + this.optionalMethodArgumentFlag); + + addSwitch(CodegenConstants.OPTIONAL_ASSEMBLY_INFO, + CodegenConstants.OPTIONAL_ASSEMBLY_INFO_DESC, + this.optionalAssemblyInfoFlag); + + addSwitch(CodegenConstants.OPTIONAL_PROJECT_FILE, + CodegenConstants.OPTIONAL_PROJECT_FILE_DESC, + this.optionalProjectFileFlag); } @Override public void processOpts() { super.processOpts(); - if (additionalProperties.containsKey(CodegenConstants.PACKAGE_VERSION)) { - setPackageVersion((String) additionalProperties.get(CodegenConstants.PACKAGE_VERSION)); - } else { - additionalProperties.put(CodegenConstants.PACKAGE_VERSION, packageVersion); - } - - if (additionalProperties.containsKey(CodegenConstants.SOURCE_FOLDER)){ - setSourceFolder((String) additionalProperties.get(CodegenConstants.SOURCE_FOLDER)); - } - else - { - additionalProperties.put(CodegenConstants.SOURCE_FOLDER, this.sourceFolder); - } - - if (additionalProperties.containsKey(CodegenConstants.PACKAGE_NAME)) { - setPackageName((String) additionalProperties.get(CodegenConstants.PACKAGE_NAME)); - apiPackage = packageName + ".Api"; - modelPackage = packageName + ".Model"; - clientPackage = packageName + ".Client"; - } else { - additionalProperties.put(CodegenConstants.PACKAGE_NAME, packageName); - } - - // Use DateTimeOffset - if (additionalProperties.containsKey(CodegenConstants.USE_DATETIME_OFFSET)) - { - useDateTimeOffset(Boolean.valueOf(additionalProperties.get(CodegenConstants.USE_DATETIME_OFFSET).toString())); - } - additionalProperties.put(CodegenConstants.USE_DATETIME_OFFSET, useDateTimeOffsetFlag); + apiPackage = packageName + ".Api"; + modelPackage = packageName + ".Model"; + clientPackage = packageName + ".Client"; additionalProperties.put("clientPackage", clientPackage); @@ -184,51 +110,40 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig additionalProperties.put("packageDescription", packageDescription); additionalProperties.put("packageCompany", packageCompany); additionalProperties.put("packageCopyright", packageCopyright); - - if (additionalProperties.containsKey(CodegenConstants.OPTIONAL_PROJECT_FILE)) - { + + if (additionalProperties.containsKey(CodegenConstants.OPTIONAL_PROJECT_FILE)) { setOptionalProjectFileFlag(Boolean.valueOf( - additionalProperties.get(CodegenConstants.OPTIONAL_PROJECT_FILE).toString())); + additionalProperties.get(CodegenConstants.OPTIONAL_PROJECT_FILE).toString())); } - - if (additionalProperties.containsKey(CodegenConstants.OPTIONAL_PROJECT_GUID)) - { + + if (additionalProperties.containsKey(CodegenConstants.OPTIONAL_PROJECT_GUID)) { setPackageGuid((String) additionalProperties.get(CodegenConstants.OPTIONAL_PROJECT_GUID)); } - additionalProperties.put("packageGuid", packageGuid); - + additionalProperties.put("packageGuid", packageGuid); + if (additionalProperties.containsKey(CodegenConstants.OPTIONAL_METHOD_ARGUMENT)) { setOptionalMethodArgumentFlag(Boolean.valueOf(additionalProperties .get(CodegenConstants.OPTIONAL_METHOD_ARGUMENT).toString())); } additionalProperties.put("optionalMethodArgument", optionalMethodArgumentFlag); - + if (additionalProperties.containsKey(CodegenConstants.OPTIONAL_ASSEMBLY_INFO)) { setOptionalAssemblyInfoFlag(Boolean.valueOf(additionalProperties .get(CodegenConstants.OPTIONAL_ASSEMBLY_INFO).toString())); } - if (additionalProperties.containsKey(CodegenConstants.USE_COLLECTION)){ - setUseCollection(Boolean.valueOf(additionalProperties.get(CodegenConstants.USE_COLLECTION).toString())); - } - - if (additionalProperties.containsKey(CodegenConstants.RETURN_ICOLLECTION)){ - setReturnICollection(Boolean.valueOf(additionalProperties.get(CodegenConstants.RETURN_ICOLLECTION).toString())); - } - - String packageFolder = sourceFolder + File.separator + packageName.replace(".", java.io.File.separator); String clientPackageDir = sourceFolder + File.separator + clientPackage.replace(".", java.io.File.separator); - + //Compute the relative path to the bin directory where the external assemblies live //This is necessary to properly generate the project file int packageDepth = packageFolder.length() - packageFolder.replace(java.io.File.separator, "").length(); String binRelativePath = "..\\"; - for (int i=0; i < packageDepth; i = i+1) + for (int i = 0; i < packageDepth; i = i + 1) binRelativePath += "..\\"; binRelativePath += "bin\\"; additionalProperties.put("binRelativePath", binRelativePath); - + supportingFiles.add(new SupportingFile("Configuration.mustache", clientPackageDir, "Configuration.cs")); supportingFiles.add(new SupportingFile("ApiClient.mustache", @@ -237,7 +152,7 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig clientPackageDir, "ApiException.cs")); supportingFiles.add(new SupportingFile("ApiResponse.mustache", clientPackageDir, "ApiResponse.cs")); - + supportingFiles.add(new SupportingFile("Newtonsoft.Json.dll", "bin", "Newtonsoft.Json.dll")); supportingFiles.add(new SupportingFile("RestSharp.dll", "bin", "RestSharp.dll")); supportingFiles.add(new SupportingFile("compile.mustache", "", "compile.bat")); @@ -253,6 +168,33 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig } } + @Override + public Map postProcessOperations(Map objs) { + super.postProcessOperations(objs); + if (objs != null) { + Map operations = (Map) objs.get("operations"); + if (operations != null) { + List ops = (List) operations.get("operation"); + for (CodegenOperation operation : ops) { + if (operation.returnType != null) { + operation.returnContainer = operation.returnType; + if (this.returnICollection && ( + operation.returnType.startsWith("List") || + operation.returnType.startsWith("Collection"))) { + // NOTE: ICollection works for both List and Collection + int genericStart = operation.returnType.indexOf("<"); + if (genericStart > 0) { + operation.returnType = "ICollection" + operation.returnType.substring(genericStart); + } + } + } + } + } + } + + return objs; + } + @Override public CodegenType getTag() { return CodegenType.CLIENT; @@ -268,177 +210,6 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig return "Generates a CSharp client library."; } - @Override - public String escapeReservedWord(String name) { - return "_" + name; - } - - @Override - public String apiTestFileFolder() { - return outputFolder + ".Test"; - } - - @Override - public String modelTestFileFolder() { - return outputFolder + ".Test"; - } - - @Override - public String apiFileFolder() { - return outputFolder + File.separator + sourceFolder + File.separator + apiPackage().replace('.', File.separatorChar); - } - - @Override - public String modelFileFolder() { - return outputFolder + File.separator + sourceFolder + File.separator + modelPackage().replace('.', File.separatorChar); - } - - @Override - public String toVarName(String name) { - // sanitize name - name = sanitizeName(name); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. - - // if it's all uppper case, do nothing - if (name.matches("^[A-Z_]*$")) { - return name; - } - - // camelize the variable name - // pet_id => PetId - name = camelize(name); - - // for reserved word or word starting with number, append _ - if (reservedWords.contains(name) || name.matches("^\\d.*")) { - name = escapeReservedWord(name); - } - - return name; - } - - @Override - public String toParamName(String name) { - // replace - with _ e.g. created-at => created_at - name = name.replaceAll("-", "_"); - - // if it's all uppper case, do nothing - if (name.matches("^[A-Z_]*$")) { - return name; - } - - // camelize(lower) the variable name - // pet_id => petId - name = camelize(name, true); - - // for reserved word or word starting with number, append _ - if (reservedWords.contains(name) || name.matches("^\\d.*")) { - name = escapeReservedWord(name); - } - - return name; - } - - @Override - public String toModelName(String name) { - name = sanitizeName(name); - - // model name cannot use reserved keyword, e.g. return - if (reservedWords.contains(name)) { - throw new RuntimeException(name + " (reserved word) cannot be used as a model name"); - } - - // camelize the model name - // phone_number => PhoneNumber - return camelize(name); - } - - @Override - public String toModelFilename(String name) { - // should be the same as the model name - return toModelName(name); - } - - @Override - public String toApiTestFilename(String name) { - return toApiName(name) + "Tests"; - } - - @Override - public String toModelTestFilename(String name) { - return toModelName(name) + "Tests"; - } - - @Override - public Map postProcessOperations(Map objs) { - super.postProcessOperations(objs); - if(objs != null) { - Map operations = (Map) objs.get("operations"); - if (operations != null) { - List ops = (List) operations.get("operation"); - for (CodegenOperation operation : ops) { - if (operation.returnType != null) { - operation.returnContainer = operation.returnType; - if( this.returnICollection && ( - operation.returnType.startsWith("List")|| - operation.returnType.startsWith("Collection")) ) { - // NOTE: ICollection works for both List and Collection - int genericStart = operation.returnType.indexOf("<"); - if(genericStart > 0) { - operation.returnType = "ICollection" + operation.returnType.substring(genericStart); - } - } - } - } - } - } - - return objs; - } - - @Override - public String getTypeDeclaration(Property p) { - if (p instanceof ArrayProperty) { - ArrayProperty ap = (ArrayProperty) p; - Property inner = ap.getItems(); - return getSwaggerType(p) + "<" + getTypeDeclaration(inner) + ">"; - } else if (p instanceof MapProperty) { - MapProperty mp = (MapProperty) p; - Property inner = mp.getAdditionalProperties(); - - return getSwaggerType(p) + ""; - } - return super.getTypeDeclaration(p); - } - - @Override - public String getSwaggerType(Property p) { - String swaggerType = super.getSwaggerType(p); - String type = null; - if (typeMapping.containsKey(swaggerType.toLowerCase())) { - type = typeMapping.get(swaggerType.toLowerCase()); - if (languageSpecificPrimitives.contains(type)) { - return type; - } - } else { - type = swaggerType; - } - return toModelName(type); - } - - @Override - public String toOperationId(String operationId) { - // throw exception if method name is empty - if (StringUtils.isEmpty(operationId)) { - throw new RuntimeException("Empty method name (operationId) not allowed"); - } - - // method name cannot use reserved keyword, e.g. return - if (reservedWords.contains(operationId)) { - throw new RuntimeException(operationId + " (reserved word) cannot be used as method name"); - } - - return camelize(sanitizeName(operationId)); - } - public void setOptionalAssemblyInfoFlag(boolean flag) { this.optionalAssemblyInfoFlag = flag; } @@ -446,159 +217,9 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig public void setOptionalProjectFileFlag(boolean flag) { this.optionalProjectFileFlag = flag; } - - public void setOptionalMethodArgumentFlag(boolean flag) { - this.optionalMethodArgumentFlag = flag; - } - - public void setReturnICollection(boolean returnICollection) { - this.returnICollection = returnICollection; - } - - public void setUseCollection(boolean useCollection) { - this.useCollection = useCollection; - if(useCollection){ - typeMapping.put("array", "Collection"); - typeMapping.put("list", "Collection"); - - instantiationTypes.put("array", "Collection"); - instantiationTypes.put("list", "Collection"); - } - } - - public void useDateTimeOffset(boolean flag) { - this.useDateTimeOffsetFlag = flag; - if (flag) - typeMapping.put("datetime", "DateTimeOffset?"); - else - typeMapping.put("datetime", "DateTime?"); - } public void setPackageGuid(String packageGuid) { this.packageGuid = packageGuid; } - - public void setPackageName(String packageName) { - this.packageName = packageName; - } - public void setPackageVersion(String packageVersion) { - this.packageVersion = packageVersion; - } - - public void setSourceFolder(String sourceFolder) { - this.sourceFolder = sourceFolder; - } - - @Override - public Map postProcessModels(Map objs) { - List models = (List) objs.get("models"); - for (Object _mo : models) { - Map mo = (Map) _mo; - CodegenModel cm = (CodegenModel) mo.get("model"); - for (CodegenProperty var : cm.vars) { - // check to see if model name is same as the property name - // which will result in compilation error - // if found, prepend with _ to workaround the limitation - if (var.name.equals(cm.name)) { - var.name = "_" + var.name; - } - } - } - return objs; - } - - /** - * Return the default value of the property - * - * @param p Swagger property object - * @return string presentation of the default value of the property - */ - @Override - public String toDefaultValue(Property p) { - if (p instanceof StringProperty) { - StringProperty dp = (StringProperty) p; - if (dp.getDefault() != null) { - return "\"" + dp.getDefault().toString() + "\""; - } - } else if (p instanceof BooleanProperty) { - BooleanProperty dp = (BooleanProperty) p; - if (dp.getDefault() != null) { - return dp.getDefault().toString(); - } - } else if (p instanceof DateProperty) { - // TODO - } else if (p instanceof DateTimeProperty) { - // TODO - } else if (p instanceof DoubleProperty) { - DoubleProperty dp = (DoubleProperty) p; - if (dp.getDefault() != null) { - return dp.getDefault().toString(); - } - } else if (p instanceof FloatProperty) { - FloatProperty dp = (FloatProperty) p; - if (dp.getDefault() != null) { - return dp.getDefault().toString(); - } - } else if (p instanceof IntegerProperty) { - IntegerProperty dp = (IntegerProperty) p; - if (dp.getDefault() != null) { - return dp.getDefault().toString(); - } - } else if (p instanceof LongProperty) { - LongProperty dp = (LongProperty) p; - if (dp.getDefault() != null) { - return dp.getDefault().toString(); - } - } - - return null; - } - - /** - * Return the example value of the property - * - * @param p Swagger property object - * @return string presentation of the example value of the property - */ - @Override - public String toExampleValue(Property p) { - if (p instanceof StringProperty) { - StringProperty dp = (StringProperty) p; - if (dp.getExample() != null) { - return "\"" + dp.getExample().toString() + "\""; - } - } else if (p instanceof BooleanProperty) { - BooleanProperty dp = (BooleanProperty) p; - if (dp.getExample() != null) { - return dp.getExample().toString(); - } - } else if (p instanceof DateProperty) { - // TODO - } else if (p instanceof DateTimeProperty) { - // TODO - } else if (p instanceof DoubleProperty) { - DoubleProperty dp = (DoubleProperty) p; - if (dp.getExample() != null) { - return dp.getExample().toString(); - } - } else if (p instanceof FloatProperty) { - FloatProperty dp = (FloatProperty) p; - if (dp.getExample() != null) { - return dp.getExample().toString(); - } - } else if (p instanceof IntegerProperty) { - IntegerProperty dp = (IntegerProperty) p; - if (dp.getExample() != null) { - return dp.getExample().toString(); - } - } else if (p instanceof LongProperty) { - LongProperty dp = (LongProperty) p; - if (dp.getExample() != null) { - return dp.getExample().toString(); - } - } - - return null; - } } diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/aspnet5/AspNet5ServerOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/aspnet5/AspNet5ServerOptionsTest.java index 8c53c8913f3..f42eee01fe0 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/aspnet5/AspNet5ServerOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/aspnet5/AspNet5ServerOptionsTest.java @@ -3,9 +3,7 @@ package io.swagger.codegen.aspnet5; import io.swagger.codegen.AbstractOptionsTest; import io.swagger.codegen.CodegenConfig; import io.swagger.codegen.languages.AspNet5ServerCodegen; -import io.swagger.codegen.languages.CSharpClientCodegen; import io.swagger.codegen.options.AspNet5ServerOptionsProvider; -import io.swagger.codegen.options.CSharpClientOptionsProvider; import mockit.Expectations; import mockit.Tested; diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Properties/AssemblyInfo.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Properties/AssemblyInfo.cs new file mode 100644 index 00000000000..1de9edb2a81 --- /dev/null +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.InteropServices; +using System.Windows; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Swagger Library")] +[assembly: AssemblyDescription("A library generated from a Swagger doc")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Swagger")] +[assembly: AssemblyProduct("SwaggerLibrary")] +[assembly: AssemblyCopyright("No Copyright")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0")] +[assembly: AssemblyFileVersion("1.0.0")] From 694d735edc37500d774d3618c6a1a37cb2953e05 Mon Sep 17 00:00:00 2001 From: Joseph Zuromski Date: Tue, 9 Feb 2016 12:59:14 -0800 Subject: [PATCH 116/189] [Swift] fix issue 1994: make sure we don't crash if rawValue returns nil when trying to create an enumeration - instead return nil which allows the instance variable to be nil in this case (it will still try to unwrap the optional though if you declare the enumeration as a required property) note: there aren't really any tests I can add to validate this since the service is always returning valid enumerations. but I did update the sample code. --- .../swagger-codegen/src/main/resources/swift/Models.mustache | 2 +- .../swift/PetstoreClient/Classes/Swaggers/Models.swift | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/swift/Models.mustache b/modules/swagger-codegen/src/main/resources/swift/Models.mustache index af8f5c875a7..4bb6d1a3609 100644 --- a/modules/swagger-codegen/src/main/resources/swift/Models.mustache +++ b/modules/swagger-codegen/src/main/resources/swift/Models.mustache @@ -126,7 +126,7 @@ class Decoders { Decoders.addDecoder(clazz: {{{classname}}}.self) { (source: AnyObject) -> {{{classname}}} in let sourceDictionary = source as! [NSObject:AnyObject] let instance = {{classname}}(){{#vars}}{{#isEnum}} - instance.{{name}} = (sourceDictionary["{{name}}"] as? String).map { {{classname}}.{{datatypeWithEnum}}(rawValue: $0)! }{{#unwrapRequired}}{{#required}}!{{/required}}{{/unwrapRequired}} {{/isEnum}}{{^isEnum}} + instance.{{name}} = {{classname}}.{{datatypeWithEnum}}(rawValue: (sourceDictionary["{{name}}"] as? String) ?? ""){{#unwrapRequired}}{{#required}}!{{/required}}{{/unwrapRequired}} {{/isEnum}}{{^isEnum}} instance.{{name}} = Decoders.decode{{^unwrapRequired}}Optional{{/unwrapRequired}}{{#unwrapRequired}}{{^required}}Optional{{/required}}{{/unwrapRequired}}(clazz: {{{baseType}}}.self, source: sourceDictionary["{{name}}"]{{#unwrapRequired}}{{#required}}!{{/required}}{{/unwrapRequired}}){{/isEnum}}{{/vars}} return instance }{{/model}} diff --git a/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/Models.swift b/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/Models.swift index 8266d08a1b2..fd79652c614 100644 --- a/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/Models.swift +++ b/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/Models.swift @@ -165,7 +165,7 @@ class Decoders { instance.name = Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["name"]) instance.photoUrls = Decoders.decodeOptional(clazz: Array.self, source: sourceDictionary["photoUrls"]) instance.tags = Decoders.decodeOptional(clazz: Array.self, source: sourceDictionary["tags"]) - instance.status = (sourceDictionary["status"] as? String).map { Pet.Status(rawValue: $0)! } + instance.status = Pet.Status(rawValue: (sourceDictionary["status"] as? String) ?? "") return instance } @@ -196,7 +196,7 @@ class Decoders { instance.petId = Decoders.decodeOptional(clazz: Int.self, source: sourceDictionary["petId"]) instance.quantity = Decoders.decodeOptional(clazz: Int.self, source: sourceDictionary["quantity"]) instance.shipDate = Decoders.decodeOptional(clazz: NSDate.self, source: sourceDictionary["shipDate"]) - instance.status = (sourceDictionary["status"] as? String).map { Order.Status(rawValue: $0)! } + instance.status = Order.Status(rawValue: (sourceDictionary["status"] as? String) ?? "") instance.complete = Decoders.decodeOptional(clazz: Bool.self, source: sourceDictionary["complete"]) return instance } From a442e1a60d995bd31429f737ab8f20c6ae8f4531 Mon Sep 17 00:00:00 2001 From: Tatsuki Sugiura Date: Wed, 10 Feb 2016 15:06:31 +0900 Subject: [PATCH 117/189] ruby: Fix boolean convertion on json to model attribute. Current code will converts boolean true of json to false because ruby's boolean is not matched with any regex. --- .../src/main/resources/ruby/base_object.mustache | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/resources/ruby/base_object.mustache b/modules/swagger-codegen/src/main/resources/ruby/base_object.mustache index d4ea5b334a6..d54354c982d 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/base_object.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/base_object.mustache @@ -31,7 +31,7 @@ when :Float value.to_f when :BOOLEAN - if value =~ /^(true|t|yes|y|1)$/i + if value.to_s =~ /^(true|t|yes|y|1)$/i true else false From 0ea7ae1c1657e43c617213c6cc713a4a275cfedd Mon Sep 17 00:00:00 2001 From: Tatsuki Sugiura Date: Wed, 10 Feb 2016 19:18:03 +0900 Subject: [PATCH 118/189] ruby: Add test for boolean convertion. --- .../ruby/lib/petstore/models/category.rb | 2 +- .../ruby/lib/petstore/models/order.rb | 2 +- .../petstore/ruby/lib/petstore/models/pet.rb | 2 +- .../petstore/ruby/lib/petstore/models/tag.rb | 2 +- .../petstore/ruby/lib/petstore/models/user.rb | 2 +- .../petstore/ruby/spec/base_object_spec.rb | 29 +++++++++++++++---- 6 files changed, 29 insertions(+), 10 deletions(-) diff --git a/samples/client/petstore/ruby/lib/petstore/models/category.rb b/samples/client/petstore/ruby/lib/petstore/models/category.rb index 01126b58e89..5427f0d6b2e 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/category.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/category.rb @@ -110,7 +110,7 @@ module Petstore when :Float value.to_f when :BOOLEAN - if value =~ /^(true|t|yes|y|1)$/i + if value.to_s =~ /^(true|t|yes|y|1)$/i true else false diff --git a/samples/client/petstore/ruby/lib/petstore/models/order.rb b/samples/client/petstore/ruby/lib/petstore/models/order.rb index fd6264496d5..61d545e57b7 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/order.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/order.rb @@ -160,7 +160,7 @@ module Petstore when :Float value.to_f when :BOOLEAN - if value =~ /^(true|t|yes|y|1)$/i + if value.to_s =~ /^(true|t|yes|y|1)$/i true else false diff --git a/samples/client/petstore/ruby/lib/petstore/models/pet.rb b/samples/client/petstore/ruby/lib/petstore/models/pet.rb index 380d740fb97..78a2747de16 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/pet.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/pet.rb @@ -164,7 +164,7 @@ module Petstore when :Float value.to_f when :BOOLEAN - if value =~ /^(true|t|yes|y|1)$/i + if value.to_s =~ /^(true|t|yes|y|1)$/i true else false diff --git a/samples/client/petstore/ruby/lib/petstore/models/tag.rb b/samples/client/petstore/ruby/lib/petstore/models/tag.rb index 9289df5c01b..33362d56ce0 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/tag.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/tag.rb @@ -110,7 +110,7 @@ module Petstore when :Float value.to_f when :BOOLEAN - if value =~ /^(true|t|yes|y|1)$/i + if value.to_s =~ /^(true|t|yes|y|1)$/i true else false diff --git a/samples/client/petstore/ruby/lib/petstore/models/user.rb b/samples/client/petstore/ruby/lib/petstore/models/user.rb index 742a16b3b2d..9f61101cfda 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/user.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/user.rb @@ -171,7 +171,7 @@ module Petstore when :Float value.to_f when :BOOLEAN - if value =~ /^(true|t|yes|y|1)$/i + if value.to_s =~ /^(true|t|yes|y|1)$/i true else false diff --git a/samples/client/petstore/ruby/spec/base_object_spec.rb b/samples/client/petstore/ruby/spec/base_object_spec.rb index a2614ba9c16..61dcb4d6d9d 100644 --- a/samples/client/petstore/ruby/spec/base_object_spec.rb +++ b/samples/client/petstore/ruby/spec/base_object_spec.rb @@ -1,7 +1,7 @@ require 'spec_helper' class ArrayMapObject < Petstore::Category - attr_accessor :int_arr, :pet_arr, :int_map, :pet_map, :int_arr_map, :pet_arr_map + attr_accessor :int_arr, :pet_arr, :int_map, :pet_map, :int_arr_map, :pet_arr_map, :boolean_true_arr, :boolean_false_arr def self.attribute_map { @@ -10,7 +10,9 @@ class ArrayMapObject < Petstore::Category :int_map => :int_map, :pet_map => :pet_map, :int_arr_map => :int_arr_map, - :pet_arr_map => :pet_arr_map + :pet_arr_map => :pet_arr_map, + :boolean_true_arr => :boolean_true_arr, + :boolean_false_arr => :boolean_false_arr, } end @@ -21,7 +23,9 @@ class ArrayMapObject < Petstore::Category :int_map => :'Hash', :pet_map => :'Hash', :int_arr_map => :'Hash>', - :pet_arr_map => :'Hash>' + :pet_arr_map => :'Hash>', + :boolean_true_arr => :'Array', + :boolean_false_arr => :'Array', } end end @@ -37,7 +41,9 @@ describe 'BaseObject' do int_map: {'int' => 123}, pet_map: {'pet' => {name: 'Kitty'}}, int_arr_map: {'int_arr' => [123, 456]}, - pet_arr_map: {'pet_arr' => [{name: 'Kitty'}]} + pet_arr_map: {'pet_arr' => [{name: 'Kitty'}]}, + boolean_true_arr: [true, "true", "TruE", 1, "y", "yes", "1", "t", "T"], + boolean_false_arr: [false, "", 0, "0", "f", nil, "null"], } end @@ -71,11 +77,24 @@ describe 'BaseObject' do pet = arr.first pet.should be_a(Petstore::Pet) pet.name.should == 'Kitty' + + obj.boolean_true_arr.should be_a(Array) + obj.boolean_true_arr.each do |b| + b.should eq true + end + + obj.boolean_false_arr.should be_a(Array) + obj.boolean_false_arr.each do |b| + b.should eq false + end end it 'works for #to_hash' do obj.build_from_hash(data) - obj.to_hash.should == data + expect_data = data.dup + expect_data[:boolean_true_arr].map! {true} + expect_data[:boolean_false_arr].map! {false} + obj.to_hash.should == expect_data end end end From 863c77ae6e2de2e5a944d4269c1a50bd5693e3cc Mon Sep 17 00:00:00 2001 From: Robert Clochard Date: Wed, 10 Feb 2016 14:29:55 +0100 Subject: [PATCH 119/189] Fixes typo template folder for javascript in bin-promise-script the folder name for the template starts with a capital letter. --- bin/javascript-promise-petstore.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/javascript-promise-petstore.sh b/bin/javascript-promise-petstore.sh index e82fef3039d..f6e7ef13913 100755 --- a/bin/javascript-promise-petstore.sh +++ b/bin/javascript-promise-petstore.sh @@ -26,7 +26,7 @@ fi # if you've executed sbt assembly previously it will use that instead. export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties" -ags="$@ generate -t modules/swagger-codegen/src/main/resources/javascript \ +ags="$@ generate -t modules/swagger-codegen/src/main/resources/Javascript \ -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l javascript \ -o samples/client/petstore/javascript-promise \ --additional-properties usePromises=true" From 785509a10ff1d6bf5747c8dc6b5633267c0aa198 Mon Sep 17 00:00:00 2001 From: Robert Clochard Date: Wed, 10 Feb 2016 14:34:40 +0100 Subject: [PATCH 120/189] Fixes typo in template folder for javascript in bin-script The template folder for javascript starts wit a capital letter. Shell script will fail on linux because of java.io.FileNotFoundException for the module.mustache --- bin/javascript-petstore.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/javascript-petstore.sh b/bin/javascript-petstore.sh index 9bf3ae70898..11fadd17d49 100755 --- a/bin/javascript-petstore.sh +++ b/bin/javascript-petstore.sh @@ -26,6 +26,6 @@ fi # if you've executed sbt assembly previously it will use that instead. export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties" -ags="$@ generate -t modules/swagger-codegen/src/main/resources/javascript -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l javascript -o samples/client/petstore/javascript" +ags="$@ generate -t modules/swagger-codegen/src/main/resources/Javascript -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l javascript -o samples/client/petstore/javascript" java -DappName=PetstoreClient $JAVA_OPTS -jar $executable $ags From 722fbe606c7d9354015a79cce4556cc745a63667 Mon Sep 17 00:00:00 2001 From: delenius Date: Mon, 8 Feb 2016 18:16:05 -0800 Subject: [PATCH 121/189] Add option to omit getters/setters on models --- .../codegen/languages/JavascriptClientCodegen.java | 11 ++++++++++- .../src/main/resources/Javascript/model.mustache | 2 ++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java index 2b848393e97..3bd7fe4ac74 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java @@ -44,6 +44,7 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo private static final String PROJECT_VERSION = "projectVersion"; private static final String PROJECT_LICENSE_NAME = "projectLicenseName"; private static final String USE_PROMISES = "usePromises"; + private static final String OMIT_MODEL_METHODS = "omitModelMethods"; protected String projectName; protected String moduleName; @@ -53,6 +54,7 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo protected String sourceFolder = "src"; protected String localVariablePrefix = ""; protected boolean usePromises = false; + protected boolean omitModelMethods = false; public JavascriptClientCodegen() { super(); @@ -105,6 +107,9 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo cliOptions.add(new CliOption(USE_PROMISES, "use Promises as return values from the client API, instead of superagent callbacks") .defaultValue(Boolean.FALSE.toString())); + cliOptions.add(new CliOption(OMIT_MODEL_METHODS, + "omits generation of getters and setters for model classes") + .defaultValue(Boolean.FALSE.toString())); } @Override @@ -174,7 +179,10 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo if (additionalProperties.containsKey(USE_PROMISES)) { usePromises = Boolean.parseBoolean((String)additionalProperties.get(USE_PROMISES)); } - + if (additionalProperties.containsKey(OMIT_MODEL_METHODS)) { + omitModelMethods = Boolean.parseBoolean((String)additionalProperties.get(OMIT_MODEL_METHODS)); + } + if (swagger.getInfo() != null) { Info info = swagger.getInfo(); if (StringUtils.isBlank(projectName) && info.getTitle() != null) { @@ -218,6 +226,7 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo additionalProperties.put(CodegenConstants.LOCAL_VARIABLE_PREFIX, localVariablePrefix); additionalProperties.put(CodegenConstants.SOURCE_FOLDER, sourceFolder); additionalProperties.put(USE_PROMISES, usePromises); + additionalProperties.put(OMIT_MODEL_METHODS, omitModelMethods); supportingFiles.add(new SupportingFile("package.mustache", "", "package.json")); supportingFiles.add(new SupportingFile("index.mustache", sourceFolder, "index.js")); diff --git a/modules/swagger-codegen/src/main/resources/Javascript/model.mustache b/modules/swagger-codegen/src/main/resources/Javascript/model.mustache index 49b79bbac07..634648d68c6 100644 --- a/modules/swagger-codegen/src/main/resources/Javascript/model.mustache +++ b/modules/swagger-codegen/src/main/resources/Javascript/model.mustache @@ -45,6 +45,7 @@ return this; } + {{^omitModelMethods}} {{#vars}} /**{{#description}} * get {{{description}}}{{/description}}{{#minimum}} @@ -64,6 +65,7 @@ this['{{baseName}}'] = {{name}}; } {{/vars}} + {{/omitModelMethods}} {{classname}}.prototype.toJson = function() { return JSON.stringify(this); From 1a9cb4488a82e7e1131bafc362e0899343e8da6f Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Wed, 10 Feb 2016 12:10:02 -0800 Subject: [PATCH 122/189] added `writeOptional` method to avoid clobbering files --- .../io/swagger/codegen/DefaultCodegen.java | 19 +++++++ .../codegen/languages/JavaClientCodegen.java | 55 +++++-------------- .../languages/JavaInflectorServerCodegen.java | 13 ++--- .../languages/JavaJerseyServerCodegen.java | 6 +- .../languages/JavaResteasyServerCodegen.java | 14 ++--- .../languages/NodeJSServerCodegen.java | 6 +- .../swagger/codegen/DefaultGeneratorTest.java | 7 ++- 7 files changed, 57 insertions(+), 63 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java index dd1faa82ed4..10d18ff25a5 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java @@ -2207,4 +2207,23 @@ public class DefaultCodegen { // $php_variable => php_variable return name.replaceAll("[^a-zA-Z0-9_]", ""); } + + /** + * only write if the file doesn't exist + * + * @param supportingFile + */ + public void writeOptional(SupportingFile supportingFile) { + String folder = supportingFile.folder; + if(!"".equals(folder)) { + folder += File.separator + supportingFile.destinationFilename; + } + else { + folder = supportingFile.destinationFilename; + } + if(!new File(folder).exists()) { + System.out.println("writing file " + folder); + supportingFiles.add(supportingFile); + } + } } diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java index 9adef8d85b0..67750ea790c 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java @@ -1,45 +1,20 @@ package io.swagger.codegen.languages; import com.google.common.base.Strings; - -import org.apache.commons.lang.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.File; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import io.swagger.codegen.CliOption; -import io.swagger.codegen.CodegenConfig; -import io.swagger.codegen.CodegenConstants; -import io.swagger.codegen.CodegenModel; -import io.swagger.codegen.CodegenOperation; -import io.swagger.codegen.CodegenParameter; -import io.swagger.codegen.CodegenProperty; -import io.swagger.codegen.CodegenType; -import io.swagger.codegen.DefaultCodegen; -import io.swagger.codegen.SupportingFile; +import io.swagger.codegen.*; import io.swagger.models.Model; import io.swagger.models.Operation; import io.swagger.models.Path; import io.swagger.models.Swagger; import io.swagger.models.parameters.FormParameter; import io.swagger.models.parameters.Parameter; -import io.swagger.models.properties.ArrayProperty; -import io.swagger.models.properties.BooleanProperty; -import io.swagger.models.properties.DoubleProperty; -import io.swagger.models.properties.FloatProperty; -import io.swagger.models.properties.IntegerProperty; -import io.swagger.models.properties.LongProperty; -import io.swagger.models.properties.MapProperty; -import io.swagger.models.properties.Property; -import io.swagger.models.properties.StringProperty; +import io.swagger.models.properties.*; +import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.util.*; public class JavaClientCodegen extends DefaultCodegen implements CodegenConfig { @SuppressWarnings("hiding") @@ -258,13 +233,13 @@ public class JavaClientCodegen extends DefaultCodegen implements CodegenConfig { importMapping.put("StringUtil", invokerPackage + ".StringUtil"); final String invokerFolder = (sourceFolder + '/' + invokerPackage).replace(".", "/"); - supportingFiles.add(new SupportingFile("pom.mustache", "", "pom.xml")); - supportingFiles.add(new SupportingFile("README.mustache", "", "README.md")); - supportingFiles.add(new SupportingFile("build.gradle.mustache", "", "build.gradle")); - supportingFiles.add(new SupportingFile("settings.gradle.mustache", "", "settings.gradle")); - supportingFiles.add(new SupportingFile("gradle.properties.mustache", "", "gradle.properties")); - supportingFiles.add(new SupportingFile("manifest.mustache", projectFolder, "AndroidManifest.xml")); - supportingFiles.add(new SupportingFile("ApiClient.mustache", invokerFolder, "ApiClient.java")); + writeOptional(new SupportingFile("pom.mustache", "", "pom.xml")); + writeOptional(new SupportingFile("README.mustache", "", "README.md")); + writeOptional(new SupportingFile("build.gradle.mustache", "", "build.gradle")); + writeOptional(new SupportingFile("settings.gradle.mustache", "", "settings.gradle")); + writeOptional(new SupportingFile("gradle.properties.mustache", "", "gradle.properties")); + writeOptional(new SupportingFile("manifest.mustache", projectFolder, "AndroidManifest.xml")); + writeOptional(new SupportingFile("ApiClient.mustache", invokerFolder, "ApiClient.java")); supportingFiles.add(new SupportingFile("StringUtil.mustache", invokerFolder, "StringUtil.java")); final String authFolder = (sourceFolder + '/' + invokerPackage + ".auth").replace(".", "/"); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaInflectorServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaInflectorServerCodegen.java index c21859d7d62..892e8b2fe3a 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaInflectorServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaInflectorServerCodegen.java @@ -8,12 +8,11 @@ import io.swagger.models.properties.ArrayProperty; import io.swagger.models.properties.MapProperty; import io.swagger.models.properties.Property; import io.swagger.util.Yaml; - -import java.util.*; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.*; + public class JavaInflectorServerCodegen extends JavaClientCodegen implements CodegenConfig { private static final Logger LOGGER = LoggerFactory.getLogger(JavaInflectorServerCodegen.class); @@ -72,10 +71,10 @@ public class JavaInflectorServerCodegen extends JavaClientCodegen implements Cod super.processOpts(); supportingFiles.clear(); - supportingFiles.add(new SupportingFile("pom.mustache", "", "pom.xml")); - supportingFiles.add(new SupportingFile("README.mustache", "", "README.md")); - supportingFiles.add(new SupportingFile("web.mustache", "src/main/webapp/WEB-INF", "web.xml")); - supportingFiles.add(new SupportingFile("inflector.mustache", "", "inflector.yaml")); + writeOptional(new SupportingFile("pom.mustache", "", "pom.xml")); + writeOptional(new SupportingFile("README.mustache", "", "README.md")); + writeOptional(new SupportingFile("web.mustache", "src/main/webapp/WEB-INF", "web.xml")); + writeOptional(new SupportingFile("inflector.mustache", "", "inflector.yaml")); supportingFiles.add(new SupportingFile("swagger.mustache", "src/main/swagger", "swagger.yaml") diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJerseyServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJerseyServerCodegen.java index c819d1869fa..09865ca1e3d 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJerseyServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJerseyServerCodegen.java @@ -72,13 +72,13 @@ public class JavaJerseyServerCodegen extends AbstractJavaJAXRSServerCodegen } supportingFiles.clear(); - supportingFiles.add(new SupportingFile("pom.mustache", "", "pom.xml")); - supportingFiles.add(new SupportingFile("README.mustache", "", "README.md")); + writeOptional(new SupportingFile("pom.mustache", "", "pom.xml")); + writeOptional(new SupportingFile("README.mustache", "", "README.md")); supportingFiles.add(new SupportingFile("ApiException.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "ApiException.java")); supportingFiles.add(new SupportingFile("ApiOriginFilter.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "ApiOriginFilter.java")); supportingFiles.add(new SupportingFile("ApiResponseMessage.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "ApiResponseMessage.java")); supportingFiles.add(new SupportingFile("NotFoundException.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "NotFoundException.java")); - supportingFiles.add(new SupportingFile("web.mustache", ("src/main/webapp/WEB-INF"), "web.xml")); + writeOptional(new SupportingFile("web.mustache", ("src/main/webapp/WEB-INF"), "web.xml")); supportingFiles.add(new SupportingFile("StringUtil.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "StringUtil.java")); if ( additionalProperties.containsKey("dateLibrary") ) { diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaResteasyServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaResteasyServerCodegen.java index 91bce545e28..af917b3edd0 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaResteasyServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaResteasyServerCodegen.java @@ -89,10 +89,10 @@ public class JavaResteasyServerCodegen extends JavaClientCodegen implements Code } supportingFiles.clear(); - supportingFiles.add(new SupportingFile("pom.mustache", "", "pom.xml")); - supportingFiles.add(new SupportingFile("gradle.mustache", "", "build.gradle")); - supportingFiles.add(new SupportingFile("settingsGradle.mustache", "", "settings.gradle")); - supportingFiles.add(new SupportingFile("README.mustache", "", "README.md")); + writeOptional(new SupportingFile("pom.mustache", "", "pom.xml")); + writeOptional(new SupportingFile("gradle.mustache", "", "build.gradle")); + writeOptional(new SupportingFile("settingsGradle.mustache", "", "settings.gradle")); + writeOptional(new SupportingFile("README.mustache", "", "README.md")); supportingFiles.add(new SupportingFile("ApiException.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "ApiException.java")); supportingFiles.add(new SupportingFile("ApiOriginFilter.mustache", @@ -101,11 +101,11 @@ public class JavaResteasyServerCodegen extends JavaClientCodegen implements Code (sourceFolder + '/' + apiPackage).replace(".", "/"), "ApiResponseMessage.java")); supportingFiles.add(new SupportingFile("NotFoundException.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "NotFoundException.java")); - supportingFiles.add(new SupportingFile("web.mustache", + writeOptional(new SupportingFile("web.mustache", ("src/main/webapp/WEB-INF"), "web.xml")); - supportingFiles.add(new SupportingFile("jboss-web.mustache", + writeOptional(new SupportingFile("jboss-web.mustache", ("src/main/webapp/WEB-INF"), "jboss-web.xml")); - supportingFiles.add(new SupportingFile("RestApplication.mustache", + writeOptional(new SupportingFile("RestApplication.mustache", (sourceFolder + '/' + invokerPackage).replace(".", "/"), "RestApplication.java")); supportingFiles.add(new SupportingFile("StringUtil.mustache", (sourceFolder + '/' + invokerPackage).replace(".", "/"), "StringUtil.java")); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/NodeJSServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/NodeJSServerCodegen.java index b1e90ac8fdb..3031bb56f85 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/NodeJSServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/NodeJSServerCodegen.java @@ -89,15 +89,15 @@ public class NodeJSServerCodegen extends DefaultCodegen implements CodegenConfig "api", "swagger.yaml") ); - supportingFiles.add(new SupportingFile("index.mustache", + writeOptional(new SupportingFile("index.mustache", "", "index.js") ); - supportingFiles.add(new SupportingFile("package.mustache", + writeOptional(new SupportingFile("package.mustache", "", "package.json") ); - supportingFiles.add(new SupportingFile("README.mustache", + writeOptional(new SupportingFile("README.mustache", "", "README.md") ); diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/DefaultGeneratorTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/DefaultGeneratorTest.java index 8cd04c932f9..67f40c0cd93 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/DefaultGeneratorTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/DefaultGeneratorTest.java @@ -164,8 +164,8 @@ public class DefaultGeneratorTest { changeContent(order); //delete file final File pom = new File(output, POM_FILE); - if (!pom.delete()) { - fail(); + if (pom.exists() && !pom.delete()) { + fail("it doesn't delete"); } //generate content third time with skipOverwrite flag, so changed file should not be rewritten @@ -173,7 +173,8 @@ public class DefaultGeneratorTest { codegenConfig.setSkipOverwrite(true); new DefaultGenerator().opts(clientOptInput).generate(); assertEquals(FileUtils.readFileToString(order, StandardCharsets.UTF_8), TEST_SKIP_OVERWRITE); - assertTrue(pom.exists()); + // Disabling this check, it's not valid with the DefaultCodegen.writeOptional(...) arg +// assertTrue(pom.exists()); } @Test From 06fcb95f645236b9175ef92ad96e6a64837f6ffb Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Wed, 10 Feb 2016 13:17:33 -0800 Subject: [PATCH 123/189] removed println --- .../src/main/java/io/swagger/codegen/DefaultCodegen.java | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java index 10d18ff25a5..a289b8d686a 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java @@ -2222,7 +2222,6 @@ public class DefaultCodegen { folder = supportingFile.destinationFilename; } if(!new File(folder).exists()) { - System.out.println("writing file " + folder); supportingFiles.add(supportingFile); } } From 3282c1f325286916cf550fcd250b749a9f313a0a Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Wed, 10 Feb 2016 14:42:28 -0800 Subject: [PATCH 124/189] formatting --- .../JavaJaxRS/jersey1_18/apiServiceImpl.mustache | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/jersey1_18/apiServiceImpl.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/jersey1_18/apiServiceImpl.mustache index 09741c1e03e..bb5d9875812 100644 --- a/modules/swagger-codegen/src/main/resources/JavaJaxRS/jersey1_18/apiServiceImpl.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/jersey1_18/apiServiceImpl.mustache @@ -22,13 +22,13 @@ import javax.ws.rs.core.SecurityContext; {{>generatedAnnotation}} {{#operations}} public class {{classname}}ServiceImpl extends {{classname}}Service { - {{#operation}} - @Override - public Response {{nickname}}({{#allParams}}{{>serviceQueryParams}}{{>servicePathParams}}{{>serviceHeaderParams}}{{>serviceBodyParams}}{{>serviceFormParams}},{{/allParams}}SecurityContext securityContext) - throws NotFoundException { - // do some magic! - return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); - } - {{/operation}} + {{#operation}} + @Override + public Response {{nickname}}({{#allParams}}{{>serviceQueryParams}}{{>servicePathParams}}{{>serviceHeaderParams}}{{>serviceBodyParams}}{{>serviceFormParams}},{{/allParams}}SecurityContext securityContext) + throws NotFoundException { + // do some magic! + return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); + } + {{/operation}} } {{/operations}} From cb196eb35149d7b30464d49c752b08668c7c6f6f Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Wed, 10 Feb 2016 15:25:51 -0800 Subject: [PATCH 125/189] set example when defined --- .../main/java/io/swagger/codegen/DefaultCodegen.java | 3 +++ .../codegen/languages/JavaJerseyServerCodegen.java | 11 +++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java index a289b8d686a..89361218f02 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java @@ -593,6 +593,9 @@ public class DefaultCodegen { */ @SuppressWarnings("static-method") public String toExampleValue(Property p) { + if(p.getExample() != null) { + return p.getExample().toString(); + } if (p instanceof StringProperty) { return "null"; } else if (p instanceof BooleanProperty) { diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJerseyServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJerseyServerCodegen.java index 09865ca1e3d..beec6776656 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJerseyServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJerseyServerCodegen.java @@ -63,8 +63,15 @@ public class JavaJerseyServerCodegen extends AbstractJavaJAXRSServerCodegen } @Override - public void processOpts() - { + public void postProcessModelProperty(CodegenModel model, CodegenProperty property) { + super.postProcessModelProperty(model, property); + if("null".equals(property.example)) { + property.example = null; + } + } + + @Override + public void processOpts() { super.processOpts(); if ( additionalProperties.containsKey(CodegenConstants.IMPL_FOLDER) ) { From ab5ca625c142e6dcfd164cd3501f5ad5587c1cb5 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Wed, 10 Feb 2016 15:28:00 -0800 Subject: [PATCH 126/189] added example property --- .../swagger-codegen/src/main/resources/Java/pojo.mustache | 2 +- .../src/main/resources/JavaInflector/pojo.mustache | 2 +- .../resources/JavaJaxRS/jersey1_18/apiServiceImpl.mustache | 2 +- .../src/main/resources/JavaJaxRS/jersey1_18/pojo.mustache | 7 ++++++- .../test/java/io/swagger/codegen/java/JavaModelTest.java | 4 +++- 5 files changed, 12 insertions(+), 5 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/Java/pojo.mustache b/modules/swagger-codegen/src/main/resources/Java/pojo.mustache index 0bc15c0ecb0..0c898f276cb 100644 --- a/modules/swagger-codegen/src/main/resources/Java/pojo.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/pojo.mustache @@ -15,7 +15,7 @@ public class {{classname}} {{#parent}}extends {{{parent}}}{{/parent}} {{#seriali * maximum: {{maximum}}{{/maximum}} **/ {{#vendorExtensions.extraAnnotation}}{{vendorExtensions.extraAnnotation}}{{/vendorExtensions.extraAnnotation}} - @ApiModelProperty({{#required}}required = {{required}}, {{/required}}value = "{{{description}}}") + @ApiModelProperty({{#example}}example = "{{example}}", {{/example}}{{#required}}required = {{required}}, {{/required}}value = "{{{description}}}") @JsonProperty("{{baseName}}") public {{{datatypeWithEnum}}} {{getter}}() { return {{name}}; diff --git a/modules/swagger-codegen/src/main/resources/JavaInflector/pojo.mustache b/modules/swagger-codegen/src/main/resources/JavaInflector/pojo.mustache index eea33d346d4..b1404c64164 100644 --- a/modules/swagger-codegen/src/main/resources/JavaInflector/pojo.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaInflector/pojo.mustache @@ -15,7 +15,7 @@ public class {{classname}} {{#parent}}extends {{{parent}}}{{/parent}} {{#seriali * maximum: {{maximum}}{{/maximum}} **/ {{#vendorExtensions.extraAnnotation}}{{vendorExtensions.extraAnnotation}}{{/vendorExtensions.extraAnnotation}} - @ApiModelProperty({{#required}}required = {{required}}, {{/required}}value = "{{{description}}}") + @ApiModelProperty({{#example}}example = "{{example}}", {{/example}}{{#required}}required = {{required}}, {{/required}}value = "{{{description}}}") @JsonProperty("{{baseName}}") public {{{datatypeWithEnum}}} {{getter}}() { return {{name}}; diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/jersey1_18/apiServiceImpl.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/jersey1_18/apiServiceImpl.mustache index bb5d9875812..f4c558e7b11 100644 --- a/modules/swagger-codegen/src/main/resources/JavaJaxRS/jersey1_18/apiServiceImpl.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/jersey1_18/apiServiceImpl.mustache @@ -24,7 +24,7 @@ import javax.ws.rs.core.SecurityContext; public class {{classname}}ServiceImpl extends {{classname}}Service { {{#operation}} @Override - public Response {{nickname}}({{#allParams}}{{>serviceQueryParams}}{{>servicePathParams}}{{>serviceHeaderParams}}{{>serviceBodyParams}}{{>serviceFormParams}},{{/allParams}}SecurityContext securityContext) + public Response {{nickname}}({{#allParams}}{{>serviceQueryParams}}{{>servicePathParams}}{{>serviceHeaderParams}}{{>serviceBodyParams}}{{>serviceFormParams}}, {{/allParams}}SecurityContext securityContext) throws NotFoundException { // do some magic! return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/jersey1_18/pojo.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/jersey1_18/pojo.mustache index eea33d346d4..58bfed16381 100644 --- a/modules/swagger-codegen/src/main/resources/JavaJaxRS/jersey1_18/pojo.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/jersey1_18/pojo.mustache @@ -14,8 +14,13 @@ public class {{classname}} {{#parent}}extends {{{parent}}}{{/parent}} {{#seriali * minimum: {{minimum}}{{/minimum}}{{#maximum}} * maximum: {{maximum}}{{/maximum}} **/ + public {{classname}} {{name}}({{{datatypeWithEnum}}} {{name}}) { + this.{{name}} = {{name}}; + return this; + } + {{#vendorExtensions.extraAnnotation}}{{vendorExtensions.extraAnnotation}}{{/vendorExtensions.extraAnnotation}} - @ApiModelProperty({{#required}}required = {{required}}, {{/required}}value = "{{{description}}}") + @ApiModelProperty({{#example}}example = "{{example}}", {{/example}}{{#required}}required = {{required}}, {{/required}}value = "{{{description}}}") @JsonProperty("{{baseName}}") public {{{datatypeWithEnum}}} {{getter}}() { return {{name}}; diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/java/JavaModelTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/java/JavaModelTest.java index f8c8bae6128..1cf7d4ea714 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/java/JavaModelTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/java/JavaModelTest.java @@ -32,7 +32,8 @@ public class JavaModelTest { final Model model = new ModelImpl() .description("a sample model") .property("id", new LongProperty()) - .property("name", new StringProperty()) + .property("name", new StringProperty() + .example("Tony")) .property("createdAt", new DateTimeProperty()) .required("id") .required("name"); @@ -66,6 +67,7 @@ public class JavaModelTest { Assert.assertEquals(property2.name, "name"); Assert.assertEquals(property2.defaultValue, "null"); Assert.assertEquals(property2.baseType, "String"); + Assert.assertEquals(property2.example, "Tony"); Assert.assertTrue(property2.hasMore); Assert.assertTrue(property2.required); Assert.assertTrue(property2.isNotContainer); From 54e78bd533e9c95f1afb8ac4ba3987e11a578d83 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Wed, 10 Feb 2016 15:40:47 -0800 Subject: [PATCH 127/189] added builders --- .../swagger-codegen/src/main/resources/Java/pojo.mustache | 5 +++++ .../src/main/resources/JavaInflector/pojo.mustache | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/modules/swagger-codegen/src/main/resources/Java/pojo.mustache b/modules/swagger-codegen/src/main/resources/Java/pojo.mustache index 0c898f276cb..c8c6b885379 100644 --- a/modules/swagger-codegen/src/main/resources/Java/pojo.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/pojo.mustache @@ -14,6 +14,11 @@ public class {{classname}} {{#parent}}extends {{{parent}}}{{/parent}} {{#seriali * minimum: {{minimum}}{{/minimum}}{{#maximum}} * maximum: {{maximum}}{{/maximum}} **/ + public {{classname}} {{name}}({{{datatypeWithEnum}}} {{name}}) { + this.{{name}} = {{name}}; + return this; + } + {{#vendorExtensions.extraAnnotation}}{{vendorExtensions.extraAnnotation}}{{/vendorExtensions.extraAnnotation}} @ApiModelProperty({{#example}}example = "{{example}}", {{/example}}{{#required}}required = {{required}}, {{/required}}value = "{{{description}}}") @JsonProperty("{{baseName}}") diff --git a/modules/swagger-codegen/src/main/resources/JavaInflector/pojo.mustache b/modules/swagger-codegen/src/main/resources/JavaInflector/pojo.mustache index b1404c64164..58bfed16381 100644 --- a/modules/swagger-codegen/src/main/resources/JavaInflector/pojo.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaInflector/pojo.mustache @@ -14,6 +14,11 @@ public class {{classname}} {{#parent}}extends {{{parent}}}{{/parent}} {{#seriali * minimum: {{minimum}}{{/minimum}}{{#maximum}} * maximum: {{maximum}}{{/maximum}} **/ + public {{classname}} {{name}}({{{datatypeWithEnum}}} {{name}}) { + this.{{name}} = {{name}}; + return this; + } + {{#vendorExtensions.extraAnnotation}}{{vendorExtensions.extraAnnotation}}{{/vendorExtensions.extraAnnotation}} @ApiModelProperty({{#example}}example = "{{example}}", {{/example}}{{#required}}required = {{required}}, {{/required}}value = "{{{description}}}") @JsonProperty("{{baseName}}") From 3d9a331666d53bf4cbff0f9201fc6e5594b0ab8b Mon Sep 17 00:00:00 2001 From: wing328 Date: Thu, 11 Feb 2016 08:24:51 +0800 Subject: [PATCH 128/189] automaticallay generate test cases for Perl --- .../codegen/languages/PerlClientCodegen.java | 23 ++++ .../src/main/resources/perl/api_test.mustache | 46 +++++++ .../main/resources/perl/object_test.mustache | 18 +++ samples/client/petstore/perl/README.md | 2 +- .../perl/lib/WWW/SwaggerClient/PetApi.pm | 10 +- .../perl/lib/WWW/SwaggerClient/Role.pm | 4 +- samples/client/petstore/perl/t/CategoryTest.t | 14 +++ samples/client/petstore/perl/t/OrderTest.t | 14 +++ samples/client/petstore/perl/t/PetApiTest.t | 118 ++++++++++++++++++ samples/client/petstore/perl/t/PetTest.t | 14 +++ samples/client/petstore/perl/t/StoreApiTest.t | 64 ++++++++++ samples/client/petstore/perl/t/TagTest.t | 14 +++ samples/client/petstore/perl/t/UserApiTest.t | 98 +++++++++++++++ samples/client/petstore/perl/t/UserTest.t | 14 +++ .../petstore/perl/{t => tests}/01_pet_api.t | 0 .../petstore/perl/{t => tests}/02_store_api.t | 0 .../perl/{t => tests}/03_api_factory.t | 0 .../petstore/perl/{t => tests}/04_role.t | 0 .../perl/{t => tests}/05_long_module_name.t | 0 19 files changed, 445 insertions(+), 8 deletions(-) create mode 100644 modules/swagger-codegen/src/main/resources/perl/api_test.mustache create mode 100644 modules/swagger-codegen/src/main/resources/perl/object_test.mustache create mode 100644 samples/client/petstore/perl/t/CategoryTest.t create mode 100644 samples/client/petstore/perl/t/OrderTest.t create mode 100644 samples/client/petstore/perl/t/PetApiTest.t create mode 100644 samples/client/petstore/perl/t/PetTest.t create mode 100644 samples/client/petstore/perl/t/StoreApiTest.t create mode 100644 samples/client/petstore/perl/t/TagTest.t create mode 100644 samples/client/petstore/perl/t/UserApiTest.t create mode 100644 samples/client/petstore/perl/t/UserTest.t rename samples/client/petstore/perl/{t => tests}/01_pet_api.t (100%) rename samples/client/petstore/perl/{t => tests}/02_store_api.t (100%) rename samples/client/petstore/perl/{t => tests}/03_api_factory.t (100%) rename samples/client/petstore/perl/{t => tests}/04_role.t (100%) rename samples/client/petstore/perl/{t => tests}/05_long_module_name.t (100%) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PerlClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PerlClientCodegen.java index 4948d3cf7f8..edb54828468 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PerlClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PerlClientCodegen.java @@ -30,6 +30,8 @@ public class PerlClientCodegen extends DefaultCodegen implements CodegenConfig { outputFolder = "generated-code" + File.separatorChar + "perl"; modelTemplateFiles.put("object.mustache", ".pm"); apiTemplateFiles.put("api.mustache", ".pm"); + modelTestTemplateFiles.put("object_test.mustache", ".t"); + apiTestTemplateFiles.put("api_test.mustache", ".t"); embeddedTemplateDir = templateDir = "perl"; @@ -142,6 +144,17 @@ public class PerlClientCodegen extends DefaultCodegen implements CodegenConfig { return (outputFolder + "/lib/" + modulePathPart + modelPackage()).replace('/', File.separatorChar); } + + @Override + public String apiTestFileFolder() { + return (outputFolder + "/t").replace('/', File.separatorChar); + } + + @Override + public String modelTestFileFolder() { + return (outputFolder + "/t").replace('/', File.separatorChar); + } + @Override public String getTypeDeclaration(Property p) { if (p instanceof ArrayProperty) { @@ -218,6 +231,16 @@ public class PerlClientCodegen extends DefaultCodegen implements CodegenConfig { return toModelName(name); } + @Override + public String toModelTestFilename(String name) { + return toModelFilename(name) + "Test"; + } + + @Override + public String toApiTestFilename(String name) { + return toApiFilename(name) + "Test"; + } + @Override public String toApiFilename(String name) { // replace - with _ e.g. created-at => created_at diff --git a/modules/swagger-codegen/src/main/resources/perl/api_test.mustache b/modules/swagger-codegen/src/main/resources/perl/api_test.mustache new file mode 100644 index 00000000000..2bab3f8aa86 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/perl/api_test.mustache @@ -0,0 +1,46 @@ +# +# Copyright 2016 SmartBear Software +# +# Licensed 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. +# +# +# NOTE: This class is auto generated by the swagger code generator program. +# Do not edit the class manually. +# +use Test::More tests => 1; #TODO update number of test cases +use Test::Exception; + +use lib 'lib'; +use strict; +use warnings; + +use_ok('{{moduleName}}::{{classname}}'); + +my $api = {{moduleName}}::{{classname}}->new(); +isa_ok($api, '{{moduleName}}::{{classname}}'); + +{{#operations}} +{{#operation}} +# +# {{{nickname}}} test +# +{ +{{#allParams}} my ${{paramName}} = undef; # replace NULL with a proper value +{{/allParams}} + my $result = $api->{{nickname}}({{#allParams}}{{paramName}} => ${{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}); +} + +{{/operation}} +{{/operations}} + +1; diff --git a/modules/swagger-codegen/src/main/resources/perl/object_test.mustache b/modules/swagger-codegen/src/main/resources/perl/object_test.mustache new file mode 100644 index 00000000000..acefaf569d6 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/perl/object_test.mustache @@ -0,0 +1,18 @@ +use Test::More tests => 2; +use Test::Exception; + +use lib 'lib'; +use strict; +use warnings; + +{{#models}} +{{#model}} + +use_ok('{{moduleName}}::Object::{{classname}}'); + +my $instance = {{moduleName}}::Object::{{classname}}->new(); + +isa_ok($instance, '{{moduleName}}::Object::{{classname}}'); + +{{/model}} +{{/models}} diff --git a/samples/client/petstore/perl/README.md b/samples/client/petstore/perl/README.md index e2685dd2468..d0e4d50476e 100644 --- a/samples/client/petstore/perl/README.md +++ b/samples/client/petstore/perl/README.md @@ -8,7 +8,7 @@ WWW::SwaggerClient::Role - a Moose role for the Swagger Petstore Automatically generated by the Perl Swagger Codegen project: -- Build date: 2016-01-17T19:21:19.346+08:00 +- Build date: 2016-02-11T08:22:52.982+08:00 - Build package: class io.swagger.codegen.languages.PerlClientCodegen - Codegen version: diff --git a/samples/client/petstore/perl/lib/WWW/SwaggerClient/PetApi.pm b/samples/client/petstore/perl/lib/WWW/SwaggerClient/PetApi.pm index 5caa831de85..47dd6b1acc9 100644 --- a/samples/client/petstore/perl/lib/WWW/SwaggerClient/PetApi.pm +++ b/samples/client/petstore/perl/lib/WWW/SwaggerClient/PetApi.pm @@ -679,10 +679,10 @@ sub upload_file { __PACKAGE__->method_documentation->{ get_pet_by_id_with_byte_array } = { summary => 'Fake endpoint to test byte array return by 'Find pet by ID'', params => $params, - returns => 'binary', + returns => 'string', }; } -# @return binary +# @return string # sub get_pet_by_id_with_byte_array { my ($self, %args) = @_; @@ -732,7 +732,7 @@ sub get_pet_by_id_with_byte_array { if (!$response) { return; } - my $_response_object = $self->{api_client}->deserialize('binary', $response); + my $_response_object = $self->{api_client}->deserialize('string', $response); return $_response_object; } @@ -742,11 +742,11 @@ sub get_pet_by_id_with_byte_array { # # Fake endpoint to test byte array in body parameter for adding a new pet to the store # -# @param binary $body Pet object in the form of byte array (optional) +# @param string $body Pet object in the form of byte array (optional) { my $params = { 'body' => { - data_type => 'binary', + data_type => 'string', description => 'Pet object in the form of byte array', required => '0', }, diff --git a/samples/client/petstore/perl/lib/WWW/SwaggerClient/Role.pm b/samples/client/petstore/perl/lib/WWW/SwaggerClient/Role.pm index cc1e39c6657..98484b46c6e 100644 --- a/samples/client/petstore/perl/lib/WWW/SwaggerClient/Role.pm +++ b/samples/client/petstore/perl/lib/WWW/SwaggerClient/Role.pm @@ -37,7 +37,7 @@ has version_info => ( is => 'ro', default => sub { { app_name => 'Swagger Petstore', app_version => '1.0.0', - generated_date => '2016-01-17T19:21:19.346+08:00', + generated_date => '2016-02-11T08:22:52.982+08:00', generator_class => 'class io.swagger.codegen.languages.PerlClientCodegen', } }, documentation => 'Information about the application version and the codegen codebase version' @@ -103,7 +103,7 @@ Automatically generated by the Perl Swagger Codegen project: =over 4 -=item Build date: 2016-01-17T19:21:19.346+08:00 +=item Build date: 2016-02-11T08:22:52.982+08:00 =item Build package: class io.swagger.codegen.languages.PerlClientCodegen diff --git a/samples/client/petstore/perl/t/CategoryTest.t b/samples/client/petstore/perl/t/CategoryTest.t new file mode 100644 index 00000000000..93534938102 --- /dev/null +++ b/samples/client/petstore/perl/t/CategoryTest.t @@ -0,0 +1,14 @@ +use Test::More tests => 2; +use Test::Exception; + +use lib 'lib'; +use strict; +use warnings; + + +use_ok('WWW::SwaggerClient::Object::Category'); + +my $instance = WWW::SwaggerClient::Object::Category->new(); + +isa_ok($instance, 'WWW::SwaggerClient::Object::Category'); + diff --git a/samples/client/petstore/perl/t/OrderTest.t b/samples/client/petstore/perl/t/OrderTest.t new file mode 100644 index 00000000000..5ec9b3d9802 --- /dev/null +++ b/samples/client/petstore/perl/t/OrderTest.t @@ -0,0 +1,14 @@ +use Test::More tests => 2; +use Test::Exception; + +use lib 'lib'; +use strict; +use warnings; + + +use_ok('WWW::SwaggerClient::Object::Order'); + +my $instance = WWW::SwaggerClient::Object::Order->new(); + +isa_ok($instance, 'WWW::SwaggerClient::Object::Order'); + diff --git a/samples/client/petstore/perl/t/PetApiTest.t b/samples/client/petstore/perl/t/PetApiTest.t new file mode 100644 index 00000000000..5bc2a6fbab8 --- /dev/null +++ b/samples/client/petstore/perl/t/PetApiTest.t @@ -0,0 +1,118 @@ +# +# Copyright 2016 SmartBear Software +# +# Licensed 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. +# +# +# NOTE: This class is auto generated by the swagger code generator program. +# Do not edit the class manually. +# +use Test::More tests => 1; #TODO update number of test cases +use Test::Exception; + +use lib 'lib'; +use strict; +use warnings; + +use_ok('WWW::SwaggerClient::PetApi'); + +my $api = WWW::SwaggerClient::PetApi->new(); +isa_ok($api, 'WWW::SwaggerClient::PetApi'); + +# +# update_pet test +# +{ + my $body = undef; # replace NULL with a proper value + my $result = $api->update_pet(body => $body); +} + +# +# add_pet test +# +{ + my $body = undef; # replace NULL with a proper value + my $result = $api->add_pet(body => $body); +} + +# +# find_pets_by_status test +# +{ + my $status = undef; # replace NULL with a proper value + my $result = $api->find_pets_by_status(status => $status); +} + +# +# find_pets_by_tags test +# +{ + my $tags = undef; # replace NULL with a proper value + my $result = $api->find_pets_by_tags(tags => $tags); +} + +# +# get_pet_by_id test +# +{ + my $pet_id = undef; # replace NULL with a proper value + my $result = $api->get_pet_by_id(pet_id => $pet_id); +} + +# +# update_pet_with_form test +# +{ + my $pet_id = undef; # replace NULL with a proper value + my $name = undef; # replace NULL with a proper value + my $status = undef; # replace NULL with a proper value + my $result = $api->update_pet_with_form(pet_id => $pet_id, name => $name, status => $status); +} + +# +# delete_pet test +# +{ + my $pet_id = undef; # replace NULL with a proper value + my $api_key = undef; # replace NULL with a proper value + my $result = $api->delete_pet(pet_id => $pet_id, api_key => $api_key); +} + +# +# upload_file test +# +{ + my $pet_id = undef; # replace NULL with a proper value + my $additional_metadata = undef; # replace NULL with a proper value + my $file = undef; # replace NULL with a proper value + my $result = $api->upload_file(pet_id => $pet_id, additional_metadata => $additional_metadata, file => $file); +} + +# +# get_pet_by_id_with_byte_array test +# +{ + my $pet_id = undef; # replace NULL with a proper value + my $result = $api->get_pet_by_id_with_byte_array(pet_id => $pet_id); +} + +# +# add_pet_using_byte_array test +# +{ + my $body = undef; # replace NULL with a proper value + my $result = $api->add_pet_using_byte_array(body => $body); +} + + +1; diff --git a/samples/client/petstore/perl/t/PetTest.t b/samples/client/petstore/perl/t/PetTest.t new file mode 100644 index 00000000000..bae56462a36 --- /dev/null +++ b/samples/client/petstore/perl/t/PetTest.t @@ -0,0 +1,14 @@ +use Test::More tests => 2; +use Test::Exception; + +use lib 'lib'; +use strict; +use warnings; + + +use_ok('WWW::SwaggerClient::Object::Pet'); + +my $instance = WWW::SwaggerClient::Object::Pet->new(); + +isa_ok($instance, 'WWW::SwaggerClient::Object::Pet'); + diff --git a/samples/client/petstore/perl/t/StoreApiTest.t b/samples/client/petstore/perl/t/StoreApiTest.t new file mode 100644 index 00000000000..fa41c8e7a87 --- /dev/null +++ b/samples/client/petstore/perl/t/StoreApiTest.t @@ -0,0 +1,64 @@ +# +# Copyright 2016 SmartBear Software +# +# Licensed 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. +# +# +# NOTE: This class is auto generated by the swagger code generator program. +# Do not edit the class manually. +# +use Test::More tests => 1; #TODO update number of test cases +use Test::Exception; + +use lib 'lib'; +use strict; +use warnings; + +use_ok('WWW::SwaggerClient::StoreApi'); + +my $api = WWW::SwaggerClient::StoreApi->new(); +isa_ok($api, 'WWW::SwaggerClient::StoreApi'); + +# +# get_inventory test +# +{ + my $result = $api->get_inventory(); +} + +# +# place_order test +# +{ + my $body = undef; # replace NULL with a proper value + my $result = $api->place_order(body => $body); +} + +# +# get_order_by_id test +# +{ + my $order_id = undef; # replace NULL with a proper value + my $result = $api->get_order_by_id(order_id => $order_id); +} + +# +# delete_order test +# +{ + my $order_id = undef; # replace NULL with a proper value + my $result = $api->delete_order(order_id => $order_id); +} + + +1; diff --git a/samples/client/petstore/perl/t/TagTest.t b/samples/client/petstore/perl/t/TagTest.t new file mode 100644 index 00000000000..49a44e4e843 --- /dev/null +++ b/samples/client/petstore/perl/t/TagTest.t @@ -0,0 +1,14 @@ +use Test::More tests => 2; +use Test::Exception; + +use lib 'lib'; +use strict; +use warnings; + + +use_ok('WWW::SwaggerClient::Object::Tag'); + +my $instance = WWW::SwaggerClient::Object::Tag->new(); + +isa_ok($instance, 'WWW::SwaggerClient::Object::Tag'); + diff --git a/samples/client/petstore/perl/t/UserApiTest.t b/samples/client/petstore/perl/t/UserApiTest.t new file mode 100644 index 00000000000..97294919612 --- /dev/null +++ b/samples/client/petstore/perl/t/UserApiTest.t @@ -0,0 +1,98 @@ +# +# Copyright 2016 SmartBear Software +# +# Licensed 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. +# +# +# NOTE: This class is auto generated by the swagger code generator program. +# Do not edit the class manually. +# +use Test::More tests => 1; #TODO update number of test cases +use Test::Exception; + +use lib 'lib'; +use strict; +use warnings; + +use_ok('WWW::SwaggerClient::UserApi'); + +my $api = WWW::SwaggerClient::UserApi->new(); +isa_ok($api, 'WWW::SwaggerClient::UserApi'); + +# +# create_user test +# +{ + my $body = undef; # replace NULL with a proper value + my $result = $api->create_user(body => $body); +} + +# +# create_users_with_array_input test +# +{ + my $body = undef; # replace NULL with a proper value + my $result = $api->create_users_with_array_input(body => $body); +} + +# +# create_users_with_list_input test +# +{ + my $body = undef; # replace NULL with a proper value + my $result = $api->create_users_with_list_input(body => $body); +} + +# +# login_user test +# +{ + my $username = undef; # replace NULL with a proper value + my $password = undef; # replace NULL with a proper value + my $result = $api->login_user(username => $username, password => $password); +} + +# +# logout_user test +# +{ + my $result = $api->logout_user(); +} + +# +# get_user_by_name test +# +{ + my $username = undef; # replace NULL with a proper value + my $result = $api->get_user_by_name(username => $username); +} + +# +# update_user test +# +{ + my $username = undef; # replace NULL with a proper value + my $body = undef; # replace NULL with a proper value + my $result = $api->update_user(username => $username, body => $body); +} + +# +# delete_user test +# +{ + my $username = undef; # replace NULL with a proper value + my $result = $api->delete_user(username => $username); +} + + +1; diff --git a/samples/client/petstore/perl/t/UserTest.t b/samples/client/petstore/perl/t/UserTest.t new file mode 100644 index 00000000000..edf1d66777b --- /dev/null +++ b/samples/client/petstore/perl/t/UserTest.t @@ -0,0 +1,14 @@ +use Test::More tests => 2; +use Test::Exception; + +use lib 'lib'; +use strict; +use warnings; + + +use_ok('WWW::SwaggerClient::Object::User'); + +my $instance = WWW::SwaggerClient::Object::User->new(); + +isa_ok($instance, 'WWW::SwaggerClient::Object::User'); + diff --git a/samples/client/petstore/perl/t/01_pet_api.t b/samples/client/petstore/perl/tests/01_pet_api.t similarity index 100% rename from samples/client/petstore/perl/t/01_pet_api.t rename to samples/client/petstore/perl/tests/01_pet_api.t diff --git a/samples/client/petstore/perl/t/02_store_api.t b/samples/client/petstore/perl/tests/02_store_api.t similarity index 100% rename from samples/client/petstore/perl/t/02_store_api.t rename to samples/client/petstore/perl/tests/02_store_api.t diff --git a/samples/client/petstore/perl/t/03_api_factory.t b/samples/client/petstore/perl/tests/03_api_factory.t similarity index 100% rename from samples/client/petstore/perl/t/03_api_factory.t rename to samples/client/petstore/perl/tests/03_api_factory.t diff --git a/samples/client/petstore/perl/t/04_role.t b/samples/client/petstore/perl/tests/04_role.t similarity index 100% rename from samples/client/petstore/perl/t/04_role.t rename to samples/client/petstore/perl/tests/04_role.t diff --git a/samples/client/petstore/perl/t/05_long_module_name.t b/samples/client/petstore/perl/tests/05_long_module_name.t similarity index 100% rename from samples/client/petstore/perl/t/05_long_module_name.t rename to samples/client/petstore/perl/tests/05_long_module_name.t From c7766457bd93dfbcf5956e9dea0323456809a0ce Mon Sep 17 00:00:00 2001 From: delenius Date: Tue, 9 Feb 2016 10:58:10 -0800 Subject: [PATCH 129/189] Don't set missing optional params in models Fixes #2103. In the constructFromObject methods, we were always setting all the parameters, including optional ones that were missing in the `data` object. Because of the `convertToType` calls, this had the effect of producing the *strings* `"undefined"` or `"null"` as property values on the constructed object! This obviously leads to difficult bugs. This commit makes sure that we first check that the data field exists in the data object. Note that both `null` and `undefined` values will be skipped. --- .../main/resources/Javascript/model.mustache | 4 ++- .../javascript-promise/src/model/Category.js | 8 +++-- .../javascript-promise/src/model/Order.js | 24 ++++++++++---- .../javascript-promise/src/model/Pet.js | 24 ++++++++++---- .../javascript-promise/src/model/Tag.js | 8 +++-- .../javascript-promise/src/model/User.js | 32 ++++++++++++++----- .../petstore/javascript/src/model/Category.js | 8 +++-- .../petstore/javascript/src/model/Order.js | 24 ++++++++++---- .../petstore/javascript/src/model/Pet.js | 24 ++++++++++---- .../petstore/javascript/src/model/Tag.js | 8 +++-- .../petstore/javascript/src/model/User.js | 32 ++++++++++++++----- 11 files changed, 147 insertions(+), 49 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/Javascript/model.mustache b/modules/swagger-codegen/src/main/resources/Javascript/model.mustache index 634648d68c6..fd64156bb52 100644 --- a/modules/swagger-codegen/src/main/resources/Javascript/model.mustache +++ b/modules/swagger-codegen/src/main/resources/Javascript/model.mustache @@ -40,7 +40,9 @@ return this; } {{#vars}} - this['{{baseName}}']{{{defaultValueWithParam}}} + if (data['{{baseName}}']) { + this['{{baseName}}']{{{defaultValueWithParam}}} + } {{/vars}} return this; } diff --git a/samples/client/petstore/javascript-promise/src/model/Category.js b/samples/client/petstore/javascript-promise/src/model/Category.js index 4b58f1e7c4d..26742d7036b 100644 --- a/samples/client/petstore/javascript-promise/src/model/Category.js +++ b/samples/client/petstore/javascript-promise/src/model/Category.js @@ -38,9 +38,13 @@ return this; } - this['id'] = ApiClient.convertToType(data['id'], 'Integer'); + if (data['id']) { + this['id'] = ApiClient.convertToType(data['id'], 'Integer'); + } - this['name'] = ApiClient.convertToType(data['name'], 'String'); + if (data['name']) { + this['name'] = ApiClient.convertToType(data['name'], 'String'); + } return this; } diff --git a/samples/client/petstore/javascript-promise/src/model/Order.js b/samples/client/petstore/javascript-promise/src/model/Order.js index c9dd8403a4f..0d5b90d319a 100644 --- a/samples/client/petstore/javascript-promise/src/model/Order.js +++ b/samples/client/petstore/javascript-promise/src/model/Order.js @@ -87,17 +87,29 @@ var StatusEnum = function StatusEnum() { return this; } - this['id'] = ApiClient.convertToType(data['id'], 'Integer'); + if (data['id']) { + this['id'] = ApiClient.convertToType(data['id'], 'Integer'); + } - this['petId'] = ApiClient.convertToType(data['petId'], 'Integer'); + if (data['petId']) { + this['petId'] = ApiClient.convertToType(data['petId'], 'Integer'); + } - this['quantity'] = ApiClient.convertToType(data['quantity'], 'Integer'); + if (data['quantity']) { + this['quantity'] = ApiClient.convertToType(data['quantity'], 'Integer'); + } - this['shipDate'] = ApiClient.convertToType(data['shipDate'], 'Date'); + if (data['shipDate']) { + this['shipDate'] = ApiClient.convertToType(data['shipDate'], 'Date'); + } - this['status'] = ApiClient.convertToType(data['status'], 'String'); + if (data['status']) { + this['status'] = ApiClient.convertToType(data['status'], 'String'); + } - this['complete'] = ApiClient.convertToType(data['complete'], 'Boolean'); + if (data['complete']) { + this['complete'] = ApiClient.convertToType(data['complete'], 'Boolean'); + } return this; } diff --git a/samples/client/petstore/javascript-promise/src/model/Pet.js b/samples/client/petstore/javascript-promise/src/model/Pet.js index 60b24a3f8e5..67bacb19390 100644 --- a/samples/client/petstore/javascript-promise/src/model/Pet.js +++ b/samples/client/petstore/javascript-promise/src/model/Pet.js @@ -89,17 +89,29 @@ var StatusEnum = function StatusEnum() { return this; } - this['id'] = ApiClient.convertToType(data['id'], 'Integer'); + if (data['id']) { + this['id'] = ApiClient.convertToType(data['id'], 'Integer'); + } - this['category'].constructFromObject(data['category']); + if (data['category']) { + this['category'].constructFromObject(data['category']); + } - this['name'] = ApiClient.convertToType(data['name'], 'String'); + if (data['name']) { + this['name'] = ApiClient.convertToType(data['name'], 'String'); + } - this['photoUrls'] = ApiClient.convertToType(data['photoUrls'], ['String']); + if (data['photoUrls']) { + this['photoUrls'] = ApiClient.convertToType(data['photoUrls'], ['String']); + } - this['tags'] = ApiClient.convertToType(data['tags'], [Tag]); + if (data['tags']) { + this['tags'] = ApiClient.convertToType(data['tags'], [Tag]); + } - this['status'] = ApiClient.convertToType(data['status'], 'String'); + if (data['status']) { + this['status'] = ApiClient.convertToType(data['status'], 'String'); + } return this; } diff --git a/samples/client/petstore/javascript-promise/src/model/Tag.js b/samples/client/petstore/javascript-promise/src/model/Tag.js index ac3d5373491..563c1ee9df8 100644 --- a/samples/client/petstore/javascript-promise/src/model/Tag.js +++ b/samples/client/petstore/javascript-promise/src/model/Tag.js @@ -38,9 +38,13 @@ return this; } - this['id'] = ApiClient.convertToType(data['id'], 'Integer'); + if (data['id']) { + this['id'] = ApiClient.convertToType(data['id'], 'Integer'); + } - this['name'] = ApiClient.convertToType(data['name'], 'String'); + if (data['name']) { + this['name'] = ApiClient.convertToType(data['name'], 'String'); + } return this; } diff --git a/samples/client/petstore/javascript-promise/src/model/User.js b/samples/client/petstore/javascript-promise/src/model/User.js index 2ee006e0ac9..67c45561d3c 100644 --- a/samples/client/petstore/javascript-promise/src/model/User.js +++ b/samples/client/petstore/javascript-promise/src/model/User.js @@ -69,21 +69,37 @@ return this; } - this['id'] = ApiClient.convertToType(data['id'], 'Integer'); + if (data['id']) { + this['id'] = ApiClient.convertToType(data['id'], 'Integer'); + } - this['username'] = ApiClient.convertToType(data['username'], 'String'); + if (data['username']) { + this['username'] = ApiClient.convertToType(data['username'], 'String'); + } - this['firstName'] = ApiClient.convertToType(data['firstName'], 'String'); + if (data['firstName']) { + this['firstName'] = ApiClient.convertToType(data['firstName'], 'String'); + } - this['lastName'] = ApiClient.convertToType(data['lastName'], 'String'); + if (data['lastName']) { + this['lastName'] = ApiClient.convertToType(data['lastName'], 'String'); + } - this['email'] = ApiClient.convertToType(data['email'], 'String'); + if (data['email']) { + this['email'] = ApiClient.convertToType(data['email'], 'String'); + } - this['password'] = ApiClient.convertToType(data['password'], 'String'); + if (data['password']) { + this['password'] = ApiClient.convertToType(data['password'], 'String'); + } - this['phone'] = ApiClient.convertToType(data['phone'], 'String'); + if (data['phone']) { + this['phone'] = ApiClient.convertToType(data['phone'], 'String'); + } - this['userStatus'] = ApiClient.convertToType(data['userStatus'], 'Integer'); + if (data['userStatus']) { + this['userStatus'] = ApiClient.convertToType(data['userStatus'], 'Integer'); + } return this; } diff --git a/samples/client/petstore/javascript/src/model/Category.js b/samples/client/petstore/javascript/src/model/Category.js index 4b58f1e7c4d..26742d7036b 100644 --- a/samples/client/petstore/javascript/src/model/Category.js +++ b/samples/client/petstore/javascript/src/model/Category.js @@ -38,9 +38,13 @@ return this; } - this['id'] = ApiClient.convertToType(data['id'], 'Integer'); + if (data['id']) { + this['id'] = ApiClient.convertToType(data['id'], 'Integer'); + } - this['name'] = ApiClient.convertToType(data['name'], 'String'); + if (data['name']) { + this['name'] = ApiClient.convertToType(data['name'], 'String'); + } return this; } diff --git a/samples/client/petstore/javascript/src/model/Order.js b/samples/client/petstore/javascript/src/model/Order.js index c9dd8403a4f..0d5b90d319a 100644 --- a/samples/client/petstore/javascript/src/model/Order.js +++ b/samples/client/petstore/javascript/src/model/Order.js @@ -87,17 +87,29 @@ var StatusEnum = function StatusEnum() { return this; } - this['id'] = ApiClient.convertToType(data['id'], 'Integer'); + if (data['id']) { + this['id'] = ApiClient.convertToType(data['id'], 'Integer'); + } - this['petId'] = ApiClient.convertToType(data['petId'], 'Integer'); + if (data['petId']) { + this['petId'] = ApiClient.convertToType(data['petId'], 'Integer'); + } - this['quantity'] = ApiClient.convertToType(data['quantity'], 'Integer'); + if (data['quantity']) { + this['quantity'] = ApiClient.convertToType(data['quantity'], 'Integer'); + } - this['shipDate'] = ApiClient.convertToType(data['shipDate'], 'Date'); + if (data['shipDate']) { + this['shipDate'] = ApiClient.convertToType(data['shipDate'], 'Date'); + } - this['status'] = ApiClient.convertToType(data['status'], 'String'); + if (data['status']) { + this['status'] = ApiClient.convertToType(data['status'], 'String'); + } - this['complete'] = ApiClient.convertToType(data['complete'], 'Boolean'); + if (data['complete']) { + this['complete'] = ApiClient.convertToType(data['complete'], 'Boolean'); + } return this; } diff --git a/samples/client/petstore/javascript/src/model/Pet.js b/samples/client/petstore/javascript/src/model/Pet.js index 60b24a3f8e5..67bacb19390 100644 --- a/samples/client/petstore/javascript/src/model/Pet.js +++ b/samples/client/petstore/javascript/src/model/Pet.js @@ -89,17 +89,29 @@ var StatusEnum = function StatusEnum() { return this; } - this['id'] = ApiClient.convertToType(data['id'], 'Integer'); + if (data['id']) { + this['id'] = ApiClient.convertToType(data['id'], 'Integer'); + } - this['category'].constructFromObject(data['category']); + if (data['category']) { + this['category'].constructFromObject(data['category']); + } - this['name'] = ApiClient.convertToType(data['name'], 'String'); + if (data['name']) { + this['name'] = ApiClient.convertToType(data['name'], 'String'); + } - this['photoUrls'] = ApiClient.convertToType(data['photoUrls'], ['String']); + if (data['photoUrls']) { + this['photoUrls'] = ApiClient.convertToType(data['photoUrls'], ['String']); + } - this['tags'] = ApiClient.convertToType(data['tags'], [Tag]); + if (data['tags']) { + this['tags'] = ApiClient.convertToType(data['tags'], [Tag]); + } - this['status'] = ApiClient.convertToType(data['status'], 'String'); + if (data['status']) { + this['status'] = ApiClient.convertToType(data['status'], 'String'); + } return this; } diff --git a/samples/client/petstore/javascript/src/model/Tag.js b/samples/client/petstore/javascript/src/model/Tag.js index ac3d5373491..563c1ee9df8 100644 --- a/samples/client/petstore/javascript/src/model/Tag.js +++ b/samples/client/petstore/javascript/src/model/Tag.js @@ -38,9 +38,13 @@ return this; } - this['id'] = ApiClient.convertToType(data['id'], 'Integer'); + if (data['id']) { + this['id'] = ApiClient.convertToType(data['id'], 'Integer'); + } - this['name'] = ApiClient.convertToType(data['name'], 'String'); + if (data['name']) { + this['name'] = ApiClient.convertToType(data['name'], 'String'); + } return this; } diff --git a/samples/client/petstore/javascript/src/model/User.js b/samples/client/petstore/javascript/src/model/User.js index 2ee006e0ac9..67c45561d3c 100644 --- a/samples/client/petstore/javascript/src/model/User.js +++ b/samples/client/petstore/javascript/src/model/User.js @@ -69,21 +69,37 @@ return this; } - this['id'] = ApiClient.convertToType(data['id'], 'Integer'); + if (data['id']) { + this['id'] = ApiClient.convertToType(data['id'], 'Integer'); + } - this['username'] = ApiClient.convertToType(data['username'], 'String'); + if (data['username']) { + this['username'] = ApiClient.convertToType(data['username'], 'String'); + } - this['firstName'] = ApiClient.convertToType(data['firstName'], 'String'); + if (data['firstName']) { + this['firstName'] = ApiClient.convertToType(data['firstName'], 'String'); + } - this['lastName'] = ApiClient.convertToType(data['lastName'], 'String'); + if (data['lastName']) { + this['lastName'] = ApiClient.convertToType(data['lastName'], 'String'); + } - this['email'] = ApiClient.convertToType(data['email'], 'String'); + if (data['email']) { + this['email'] = ApiClient.convertToType(data['email'], 'String'); + } - this['password'] = ApiClient.convertToType(data['password'], 'String'); + if (data['password']) { + this['password'] = ApiClient.convertToType(data['password'], 'String'); + } - this['phone'] = ApiClient.convertToType(data['phone'], 'String'); + if (data['phone']) { + this['phone'] = ApiClient.convertToType(data['phone'], 'String'); + } - this['userStatus'] = ApiClient.convertToType(data['userStatus'], 'Integer'); + if (data['userStatus']) { + this['userStatus'] = ApiClient.convertToType(data['userStatus'], 'Integer'); + } return this; } From 7cb2898f47a12319dbb3e8f1bbc243ae4da3806d Mon Sep 17 00:00:00 2001 From: wing328 Date: Thu, 11 Feb 2016 09:30:41 +0800 Subject: [PATCH 130/189] update perl pom with new test folder --- samples/client/petstore/perl/pom.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/samples/client/petstore/perl/pom.xml b/samples/client/petstore/perl/pom.xml index 4aa0040f82e..d761d022cd6 100644 --- a/samples/client/petstore/perl/pom.xml +++ b/samples/client/petstore/perl/pom.xml @@ -35,7 +35,7 @@ perl - t/01_pet_api.t + tests/01_pet_api.t @@ -48,7 +48,7 @@ perl - t/02_store_api.t + tests/02_store_api.t @@ -61,7 +61,7 @@ perl - t/03_api_factory.t + tests/03_api_factory.t @@ -74,7 +74,7 @@ perl - t/04_role.t + tests/04_role.t From aa09678b510d550c088069b4ca482bfa45665d50 Mon Sep 17 00:00:00 2001 From: hideya kawahara Date: Thu, 11 Feb 2016 19:50:14 +0900 Subject: [PATCH 131/189] add missing sanitization for operationId --- .../swagger/codegen/languages/SwiftCodegen.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SwiftCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SwiftCodegen.java index 2d7a4244529..9f190761f83 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SwiftCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SwiftCodegen.java @@ -293,6 +293,21 @@ public class SwiftCodegen extends DefaultCodegen implements CodegenConfig { return initialCaps(name) + "API"; } + @Override + public String toOperationId(String operationId) { + // throw exception if method name is empty + if (StringUtils.isEmpty(operationId)) { + throw new RuntimeException("Empty method name (operationId) not allowed"); + } + + // method name cannot use reserved keyword, e.g. return + if (reservedWords.contains(operationId)) { + throw new RuntimeException(operationId + " (reserved word) cannot be used as method name"); + } + + return camelize(sanitizeName(operationId), true); + } + @Override public CodegenOperation fromOperation(String path, String httpMethod, Operation operation, Map definitions, Swagger swagger) { path = normalizePath(path); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. From 698649f6fdd9c0b02edc5d97a935fb76732ae057 Mon Sep 17 00:00:00 2001 From: Michael Vorburger Date: Fri, 12 Feb 2016 02:06:22 +0100 Subject: [PATCH 132/189] build.gradle missing 2 libs (pom.xml has) jackson-jaxrs-json-provider & com.brsanthu:migbase64 are missing from the build.gradle mustache template (but the pom.xml one has them) PS: Why are there no automated tests that detect this? --- .../src/main/resources/Java/build.gradle.mustache | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/swagger-codegen/src/main/resources/Java/build.gradle.mustache b/modules/swagger-codegen/src/main/resources/Java/build.gradle.mustache index e1065049e09..605472d67b3 100644 --- a/modules/swagger-codegen/src/main/resources/Java/build.gradle.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/build.gradle.mustache @@ -108,7 +108,9 @@ dependencies { compile "com.fasterxml.jackson.core:jackson-core:$jackson_version" compile "com.fasterxml.jackson.core:jackson-annotations:$jackson_version" compile "com.fasterxml.jackson.core:jackson-databind:$jackson_version" + compile "com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:$jackson_version" compile "com.fasterxml.jackson.datatype:jackson-datatype-joda:2.1.5" compile "joda-time:joda-time:$jodatime_version" + compile "com.brsanthu:migbase64:2.2" testCompile "junit:junit:$junit_version" } From 21b1d195894a15232ea850bdfd82651458f5c9c7 Mon Sep 17 00:00:00 2001 From: RaGe Date: Fri, 12 Feb 2016 00:07:58 -0500 Subject: [PATCH 133/189] Closes #2118 Add basePath without url to jmeter sampler path --- modules/swagger-codegen/src/main/resources/JMeter/api.mustache | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/resources/JMeter/api.mustache b/modules/swagger-codegen/src/main/resources/JMeter/api.mustache index 1af63c2d66d..b52f7f3b97c 100644 --- a/modules/swagger-codegen/src/main/resources/JMeter/api.mustache +++ b/modules/swagger-codegen/src/main/resources/JMeter/api.mustache @@ -103,7 +103,7 @@ - {{vendorExtensions.x-path}} + {{basePathWithoutHost}}{{vendorExtensions.x-path}} {{httpMethod}} true false From 874d9dc54a0d346ce070d2d4f2a61718d1ef8b96 Mon Sep 17 00:00:00 2001 From: wing328 Date: Fri, 12 Feb 2016 17:15:53 +0800 Subject: [PATCH 134/189] add uuid mapping to c# abstract base class --- .../io/swagger/codegen/languages/AbstractCSharpCodegen.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractCSharpCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractCSharpCodegen.java index 79659d841f5..2a5d9957fd1 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractCSharpCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractCSharpCodegen.java @@ -85,6 +85,7 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen implements Co "Int32", "Int64", "Float", + "Guid", "Stream", // not really a primitive, we include it to avoid model import "Object") ); @@ -110,6 +111,7 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen implements Co typeMapping.put("list", "List"); typeMapping.put("map", "Dictionary"); typeMapping.put("object", "Object"); + typeMapping.put("uuid", "Guid"); } public void setReturnICollection(boolean returnICollection) { From 81593bc4f6c910da7518b64ea91b8317af1e7096 Mon Sep 17 00:00:00 2001 From: wing328 Date: Fri, 12 Feb 2016 18:46:19 +0800 Subject: [PATCH 135/189] add delay script, update CI test to run ruby test first --- samples/client/petstore/ruby/press_anykey_to_continue.sh | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 samples/client/petstore/ruby/press_anykey_to_continue.sh diff --git a/samples/client/petstore/ruby/press_anykey_to_continue.sh b/samples/client/petstore/ruby/press_anykey_to_continue.sh new file mode 100644 index 00000000000..8976ca65367 --- /dev/null +++ b/samples/client/petstore/ruby/press_anykey_to_continue.sh @@ -0,0 +1,8 @@ +#!/bin/bash +# a script to simply wait for X seconds before contining the CI tests +# the delay can help prevent 2 CI tests running at the same time as +# all CI tests use the same petstore server for testing. + +TIMEOUT=$(( ( RANDOM % 60 ) + 1 )) + +read -p 'Press any key to continue or wait for $TIMEOUT seconds' -t $TIMEOUT From 86154f87c34b761d88c63cd71346a1e382bfd1f5 Mon Sep 17 00:00:00 2001 From: delenius Date: Thu, 11 Feb 2016 09:02:45 -0800 Subject: [PATCH 136/189] Use objects for enums, not constructor functions Fixes #2101. --- .../src/main/resources/Javascript/enumClass.mustache | 8 +++----- .../javascript-promise/src/model/Category.js | 2 ++ .../petstore/javascript-promise/src/model/Order.js | 12 ++++++------ .../petstore/javascript-promise/src/model/Pet.js | 12 ++++++------ .../petstore/javascript-promise/src/model/Tag.js | 2 ++ .../petstore/javascript-promise/src/model/User.js | 2 ++ .../client/petstore/javascript/src/model/Category.js | 2 ++ .../client/petstore/javascript/src/model/Order.js | 12 ++++++------ samples/client/petstore/javascript/src/model/Pet.js | 12 ++++++------ samples/client/petstore/javascript/src/model/Tag.js | 2 ++ samples/client/petstore/javascript/src/model/User.js | 2 ++ 11 files changed, 39 insertions(+), 29 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/Javascript/enumClass.mustache b/modules/swagger-codegen/src/main/resources/Javascript/enumClass.mustache index aa7d8bf50fd..341c55ca977 100644 --- a/modules/swagger-codegen/src/main/resources/Javascript/enumClass.mustache +++ b/modules/swagger-codegen/src/main/resources/Javascript/enumClass.mustache @@ -6,14 +6,12 @@ if ( typeof define === "function" && define.amd ) { }); } -var {{datatypeWithEnum}} = function {{datatypeWithEnum}}() { - var self = this; - +var {{datatypeWithEnum}} = { {{#allowableValues}}{{#enumVars}} /** * @const */ - self.{{name}} = "{{value}}"{{^-last}}, - {{/-last}}{{#-last}};{{/-last}}{{/enumVars}}{{/allowableValues}} + {{name}}: "{{value}}"{{^-last}}, + {{/-last}}{{/enumVars}}{{/allowableValues}} } diff --git a/samples/client/petstore/javascript-promise/src/model/Category.js b/samples/client/petstore/javascript-promise/src/model/Category.js index 26742d7036b..61d1b9b8f61 100644 --- a/samples/client/petstore/javascript-promise/src/model/Category.js +++ b/samples/client/petstore/javascript-promise/src/model/Category.js @@ -50,6 +50,7 @@ } + /** * @return {Integer} **/ @@ -78,6 +79,7 @@ this['name'] = name; } + Category.prototype.toJson = function() { return JSON.stringify(this); diff --git a/samples/client/petstore/javascript-promise/src/model/Order.js b/samples/client/petstore/javascript-promise/src/model/Order.js index 0d5b90d319a..ef318c61b8a 100644 --- a/samples/client/petstore/javascript-promise/src/model/Order.js +++ b/samples/client/petstore/javascript-promise/src/model/Order.js @@ -24,24 +24,22 @@ if ( typeof define === "function" && define.amd ) { }); } -var StatusEnum = function StatusEnum() { - var self = this; - +var StatusEnum = { /** * @const */ - self.PLACED = "placed", + PLACED: "placed", /** * @const */ - self.APPROVED = "approved", + APPROVED: "approved", /** * @const */ - self.DELIVERED = "delivered"; + DELIVERED: "delivered" } @@ -115,6 +113,7 @@ var StatusEnum = function StatusEnum() { } + /** * @return {Integer} **/ @@ -201,6 +200,7 @@ var StatusEnum = function StatusEnum() { this['complete'] = complete; } + Order.prototype.toJson = function() { return JSON.stringify(this); diff --git a/samples/client/petstore/javascript-promise/src/model/Pet.js b/samples/client/petstore/javascript-promise/src/model/Pet.js index 67bacb19390..78484070859 100644 --- a/samples/client/petstore/javascript-promise/src/model/Pet.js +++ b/samples/client/petstore/javascript-promise/src/model/Pet.js @@ -24,24 +24,22 @@ if ( typeof define === "function" && define.amd ) { }); } -var StatusEnum = function StatusEnum() { - var self = this; - +var StatusEnum = { /** * @const */ - self.AVAILABLE = "available", + AVAILABLE: "available", /** * @const */ - self.PENDING = "pending", + PENDING: "pending", /** * @const */ - self.SOLD = "sold"; + SOLD: "sold" } @@ -117,6 +115,7 @@ var StatusEnum = function StatusEnum() { } + /** * @return {Integer} **/ @@ -203,6 +202,7 @@ var StatusEnum = function StatusEnum() { this['status'] = status; } + Pet.prototype.toJson = function() { return JSON.stringify(this); diff --git a/samples/client/petstore/javascript-promise/src/model/Tag.js b/samples/client/petstore/javascript-promise/src/model/Tag.js index 563c1ee9df8..ab1497a0796 100644 --- a/samples/client/petstore/javascript-promise/src/model/Tag.js +++ b/samples/client/petstore/javascript-promise/src/model/Tag.js @@ -50,6 +50,7 @@ } + /** * @return {Integer} **/ @@ -78,6 +79,7 @@ this['name'] = name; } + Tag.prototype.toJson = function() { return JSON.stringify(this); diff --git a/samples/client/petstore/javascript-promise/src/model/User.js b/samples/client/petstore/javascript-promise/src/model/User.js index 67c45561d3c..bb8a8f99008 100644 --- a/samples/client/petstore/javascript-promise/src/model/User.js +++ b/samples/client/petstore/javascript-promise/src/model/User.js @@ -105,6 +105,7 @@ } + /** * @return {Integer} **/ @@ -219,6 +220,7 @@ this['userStatus'] = userStatus; } + User.prototype.toJson = function() { return JSON.stringify(this); diff --git a/samples/client/petstore/javascript/src/model/Category.js b/samples/client/petstore/javascript/src/model/Category.js index 26742d7036b..61d1b9b8f61 100644 --- a/samples/client/petstore/javascript/src/model/Category.js +++ b/samples/client/petstore/javascript/src/model/Category.js @@ -50,6 +50,7 @@ } + /** * @return {Integer} **/ @@ -78,6 +79,7 @@ this['name'] = name; } + Category.prototype.toJson = function() { return JSON.stringify(this); diff --git a/samples/client/petstore/javascript/src/model/Order.js b/samples/client/petstore/javascript/src/model/Order.js index 0d5b90d319a..ef318c61b8a 100644 --- a/samples/client/petstore/javascript/src/model/Order.js +++ b/samples/client/petstore/javascript/src/model/Order.js @@ -24,24 +24,22 @@ if ( typeof define === "function" && define.amd ) { }); } -var StatusEnum = function StatusEnum() { - var self = this; - +var StatusEnum = { /** * @const */ - self.PLACED = "placed", + PLACED: "placed", /** * @const */ - self.APPROVED = "approved", + APPROVED: "approved", /** * @const */ - self.DELIVERED = "delivered"; + DELIVERED: "delivered" } @@ -115,6 +113,7 @@ var StatusEnum = function StatusEnum() { } + /** * @return {Integer} **/ @@ -201,6 +200,7 @@ var StatusEnum = function StatusEnum() { this['complete'] = complete; } + Order.prototype.toJson = function() { return JSON.stringify(this); diff --git a/samples/client/petstore/javascript/src/model/Pet.js b/samples/client/petstore/javascript/src/model/Pet.js index 67bacb19390..78484070859 100644 --- a/samples/client/petstore/javascript/src/model/Pet.js +++ b/samples/client/petstore/javascript/src/model/Pet.js @@ -24,24 +24,22 @@ if ( typeof define === "function" && define.amd ) { }); } -var StatusEnum = function StatusEnum() { - var self = this; - +var StatusEnum = { /** * @const */ - self.AVAILABLE = "available", + AVAILABLE: "available", /** * @const */ - self.PENDING = "pending", + PENDING: "pending", /** * @const */ - self.SOLD = "sold"; + SOLD: "sold" } @@ -117,6 +115,7 @@ var StatusEnum = function StatusEnum() { } + /** * @return {Integer} **/ @@ -203,6 +202,7 @@ var StatusEnum = function StatusEnum() { this['status'] = status; } + Pet.prototype.toJson = function() { return JSON.stringify(this); diff --git a/samples/client/petstore/javascript/src/model/Tag.js b/samples/client/petstore/javascript/src/model/Tag.js index 563c1ee9df8..ab1497a0796 100644 --- a/samples/client/petstore/javascript/src/model/Tag.js +++ b/samples/client/petstore/javascript/src/model/Tag.js @@ -50,6 +50,7 @@ } + /** * @return {Integer} **/ @@ -78,6 +79,7 @@ this['name'] = name; } + Tag.prototype.toJson = function() { return JSON.stringify(this); diff --git a/samples/client/petstore/javascript/src/model/User.js b/samples/client/petstore/javascript/src/model/User.js index 67c45561d3c..bb8a8f99008 100644 --- a/samples/client/petstore/javascript/src/model/User.js +++ b/samples/client/petstore/javascript/src/model/User.js @@ -105,6 +105,7 @@ } + /** * @return {Integer} **/ @@ -219,6 +220,7 @@ this['userStatus'] = userStatus; } + User.prototype.toJson = function() { return JSON.stringify(this); From fa2333717a1e8d837e28be4d1a26c284ec5fd3d4 Mon Sep 17 00:00:00 2001 From: delenius Date: Wed, 10 Feb 2016 13:35:24 -0800 Subject: [PATCH 137/189] Use static model factory methods The `constructFromObject` factory methods should be class methods (or "static" methods), not instance methods. With this commit, ApiClient no longer calls the model constructors directly. Instead, it calls the new static factory method to get the new instance. If there is no data on the top level, null is returned. It is still possible for users to call the model constructors directly, of course. --- .../languages/JavascriptClientCodegen.java | 4 +-- .../resources/Javascript/ApiClient.mustache | 3 +-- .../main/resources/Javascript/model.mustache | 9 ++++--- .../javascript-promise/src/ApiClient.js | 3 +-- .../javascript-promise/src/model/Category.js | 13 ++++++---- .../javascript-promise/src/model/Order.js | 21 +++++++++------- .../javascript-promise/src/model/Pet.js | 21 +++++++++------- .../javascript-promise/src/model/Tag.js | 13 ++++++---- .../javascript-promise/src/model/User.js | 25 +++++++++++-------- .../petstore/javascript/src/ApiClient.js | 3 +-- .../petstore/javascript/src/model/Category.js | 13 ++++++---- .../petstore/javascript/src/model/Order.js | 21 +++++++++------- .../petstore/javascript/src/model/Pet.js | 21 +++++++++------- .../petstore/javascript/src/model/Tag.js | 13 ++++++---- .../petstore/javascript/src/model/User.js | 25 +++++++++++-------- 15 files changed, 118 insertions(+), 90 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java index 3bd7fe4ac74..f921b02cd78 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java @@ -339,10 +339,10 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo @Override public String toDefaultValueWithParam(String name, Property p) { + String type = normalizeType(getTypeDeclaration(p)); if (p instanceof RefProperty) { - return ".constructFromObject(data['" + name + "']);"; + return " = " + type + ".constructFromObject(data['" + name + "']);"; } else { - String type = normalizeType(getTypeDeclaration(p)); return " = ApiClient.convertToType(data['" + name + "'], " + type + ");"; } } diff --git a/modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache index 38867a6f341..14239caf455 100644 --- a/modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache +++ b/modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache @@ -262,8 +262,7 @@ default: if (typeof type === 'function') { // for model type like: User - var model = new type(); - model.constructFromObject(data); + var model = type.constructFromObject(data); return model; } else if (Array.isArray(type)) { // for array type like: ['String'] diff --git a/modules/swagger-codegen/src/main/resources/Javascript/model.mustache b/modules/swagger-codegen/src/main/resources/Javascript/model.mustache index fd64156bb52..5592b328cbe 100644 --- a/modules/swagger-codegen/src/main/resources/Javascript/model.mustache +++ b/modules/swagger-codegen/src/main/resources/Javascript/model.mustache @@ -35,16 +35,17 @@ {{/vars}} }; - {{classname}}.prototype.constructFromObject = function(data) { + {{classname}}.constructFromObject = function(data) { if (!data) { - return this; + return null; } + var _this = new {{classname}}(); {{#vars}} if (data['{{baseName}}']) { - this['{{baseName}}']{{{defaultValueWithParam}}} + _this['{{baseName}}']{{{defaultValueWithParam}}} } {{/vars}} - return this; + return _this; } {{^omitModelMethods}} diff --git a/samples/client/petstore/javascript-promise/src/ApiClient.js b/samples/client/petstore/javascript-promise/src/ApiClient.js index c6843ed7560..353494ea941 100644 --- a/samples/client/petstore/javascript-promise/src/ApiClient.js +++ b/samples/client/petstore/javascript-promise/src/ApiClient.js @@ -250,8 +250,7 @@ default: if (typeof type === 'function') { // for model type like: User - var model = new type(); - model.constructFromObject(data); + var model = type.constructFromObject(data); return model; } else if (Array.isArray(type)) { // for array type like: ['String'] diff --git a/samples/client/petstore/javascript-promise/src/model/Category.js b/samples/client/petstore/javascript-promise/src/model/Category.js index 26742d7036b..0e63bbd4297 100644 --- a/samples/client/petstore/javascript-promise/src/model/Category.js +++ b/samples/client/petstore/javascript-promise/src/model/Category.js @@ -33,23 +33,25 @@ }; - Category.prototype.constructFromObject = function(data) { + Category.constructFromObject = function(data) { if (!data) { - return this; + return null; } + var _this = new Category(); if (data['id']) { - this['id'] = ApiClient.convertToType(data['id'], 'Integer'); + _this['id'] = ApiClient.convertToType(data['id'], 'Integer'); } if (data['name']) { - this['name'] = ApiClient.convertToType(data['name'], 'String'); + _this['name'] = ApiClient.convertToType(data['name'], 'String'); } - return this; + return _this; } + /** * @return {Integer} **/ @@ -78,6 +80,7 @@ this['name'] = name; } + Category.prototype.toJson = function() { return JSON.stringify(this); diff --git a/samples/client/petstore/javascript-promise/src/model/Order.js b/samples/client/petstore/javascript-promise/src/model/Order.js index 0d5b90d319a..0632c1d2983 100644 --- a/samples/client/petstore/javascript-promise/src/model/Order.js +++ b/samples/client/petstore/javascript-promise/src/model/Order.js @@ -82,39 +82,41 @@ var StatusEnum = function StatusEnum() { }; - Order.prototype.constructFromObject = function(data) { + Order.constructFromObject = function(data) { if (!data) { - return this; + return null; } + var _this = new Order(); if (data['id']) { - this['id'] = ApiClient.convertToType(data['id'], 'Integer'); + _this['id'] = ApiClient.convertToType(data['id'], 'Integer'); } if (data['petId']) { - this['petId'] = ApiClient.convertToType(data['petId'], 'Integer'); + _this['petId'] = ApiClient.convertToType(data['petId'], 'Integer'); } if (data['quantity']) { - this['quantity'] = ApiClient.convertToType(data['quantity'], 'Integer'); + _this['quantity'] = ApiClient.convertToType(data['quantity'], 'Integer'); } if (data['shipDate']) { - this['shipDate'] = ApiClient.convertToType(data['shipDate'], 'Date'); + _this['shipDate'] = ApiClient.convertToType(data['shipDate'], 'Date'); } if (data['status']) { - this['status'] = ApiClient.convertToType(data['status'], 'String'); + _this['status'] = ApiClient.convertToType(data['status'], 'String'); } if (data['complete']) { - this['complete'] = ApiClient.convertToType(data['complete'], 'Boolean'); + _this['complete'] = ApiClient.convertToType(data['complete'], 'Boolean'); } - return this; + return _this; } + /** * @return {Integer} **/ @@ -201,6 +203,7 @@ var StatusEnum = function StatusEnum() { this['complete'] = complete; } + Order.prototype.toJson = function() { return JSON.stringify(this); diff --git a/samples/client/petstore/javascript-promise/src/model/Pet.js b/samples/client/petstore/javascript-promise/src/model/Pet.js index 67bacb19390..2d1212f5431 100644 --- a/samples/client/petstore/javascript-promise/src/model/Pet.js +++ b/samples/client/petstore/javascript-promise/src/model/Pet.js @@ -84,39 +84,41 @@ var StatusEnum = function StatusEnum() { }; - Pet.prototype.constructFromObject = function(data) { + Pet.constructFromObject = function(data) { if (!data) { - return this; + return null; } + var _this = new Pet(); if (data['id']) { - this['id'] = ApiClient.convertToType(data['id'], 'Integer'); + _this['id'] = ApiClient.convertToType(data['id'], 'Integer'); } if (data['category']) { - this['category'].constructFromObject(data['category']); + _this['category'] = Category.constructFromObject(data['category']); } if (data['name']) { - this['name'] = ApiClient.convertToType(data['name'], 'String'); + _this['name'] = ApiClient.convertToType(data['name'], 'String'); } if (data['photoUrls']) { - this['photoUrls'] = ApiClient.convertToType(data['photoUrls'], ['String']); + _this['photoUrls'] = ApiClient.convertToType(data['photoUrls'], ['String']); } if (data['tags']) { - this['tags'] = ApiClient.convertToType(data['tags'], [Tag]); + _this['tags'] = ApiClient.convertToType(data['tags'], [Tag]); } if (data['status']) { - this['status'] = ApiClient.convertToType(data['status'], 'String'); + _this['status'] = ApiClient.convertToType(data['status'], 'String'); } - return this; + return _this; } + /** * @return {Integer} **/ @@ -203,6 +205,7 @@ var StatusEnum = function StatusEnum() { this['status'] = status; } + Pet.prototype.toJson = function() { return JSON.stringify(this); diff --git a/samples/client/petstore/javascript-promise/src/model/Tag.js b/samples/client/petstore/javascript-promise/src/model/Tag.js index 563c1ee9df8..f2451493103 100644 --- a/samples/client/petstore/javascript-promise/src/model/Tag.js +++ b/samples/client/petstore/javascript-promise/src/model/Tag.js @@ -33,23 +33,25 @@ }; - Tag.prototype.constructFromObject = function(data) { + Tag.constructFromObject = function(data) { if (!data) { - return this; + return null; } + var _this = new Tag(); if (data['id']) { - this['id'] = ApiClient.convertToType(data['id'], 'Integer'); + _this['id'] = ApiClient.convertToType(data['id'], 'Integer'); } if (data['name']) { - this['name'] = ApiClient.convertToType(data['name'], 'String'); + _this['name'] = ApiClient.convertToType(data['name'], 'String'); } - return this; + return _this; } + /** * @return {Integer} **/ @@ -78,6 +80,7 @@ this['name'] = name; } + Tag.prototype.toJson = function() { return JSON.stringify(this); diff --git a/samples/client/petstore/javascript-promise/src/model/User.js b/samples/client/petstore/javascript-promise/src/model/User.js index 67c45561d3c..68dfc609d55 100644 --- a/samples/client/petstore/javascript-promise/src/model/User.js +++ b/samples/client/petstore/javascript-promise/src/model/User.js @@ -64,47 +64,49 @@ }; - User.prototype.constructFromObject = function(data) { + User.constructFromObject = function(data) { if (!data) { - return this; + return null; } + var _this = new User(); if (data['id']) { - this['id'] = ApiClient.convertToType(data['id'], 'Integer'); + _this['id'] = ApiClient.convertToType(data['id'], 'Integer'); } if (data['username']) { - this['username'] = ApiClient.convertToType(data['username'], 'String'); + _this['username'] = ApiClient.convertToType(data['username'], 'String'); } if (data['firstName']) { - this['firstName'] = ApiClient.convertToType(data['firstName'], 'String'); + _this['firstName'] = ApiClient.convertToType(data['firstName'], 'String'); } if (data['lastName']) { - this['lastName'] = ApiClient.convertToType(data['lastName'], 'String'); + _this['lastName'] = ApiClient.convertToType(data['lastName'], 'String'); } if (data['email']) { - this['email'] = ApiClient.convertToType(data['email'], 'String'); + _this['email'] = ApiClient.convertToType(data['email'], 'String'); } if (data['password']) { - this['password'] = ApiClient.convertToType(data['password'], 'String'); + _this['password'] = ApiClient.convertToType(data['password'], 'String'); } if (data['phone']) { - this['phone'] = ApiClient.convertToType(data['phone'], 'String'); + _this['phone'] = ApiClient.convertToType(data['phone'], 'String'); } if (data['userStatus']) { - this['userStatus'] = ApiClient.convertToType(data['userStatus'], 'Integer'); + _this['userStatus'] = ApiClient.convertToType(data['userStatus'], 'Integer'); } - return this; + return _this; } + /** * @return {Integer} **/ @@ -219,6 +221,7 @@ this['userStatus'] = userStatus; } + User.prototype.toJson = function() { return JSON.stringify(this); diff --git a/samples/client/petstore/javascript/src/ApiClient.js b/samples/client/petstore/javascript/src/ApiClient.js index a102b4fb0cb..1fea5d003a3 100644 --- a/samples/client/petstore/javascript/src/ApiClient.js +++ b/samples/client/petstore/javascript/src/ApiClient.js @@ -250,8 +250,7 @@ default: if (typeof type === 'function') { // for model type like: User - var model = new type(); - model.constructFromObject(data); + var model = type.constructFromObject(data); return model; } else if (Array.isArray(type)) { // for array type like: ['String'] diff --git a/samples/client/petstore/javascript/src/model/Category.js b/samples/client/petstore/javascript/src/model/Category.js index 26742d7036b..0e63bbd4297 100644 --- a/samples/client/petstore/javascript/src/model/Category.js +++ b/samples/client/petstore/javascript/src/model/Category.js @@ -33,23 +33,25 @@ }; - Category.prototype.constructFromObject = function(data) { + Category.constructFromObject = function(data) { if (!data) { - return this; + return null; } + var _this = new Category(); if (data['id']) { - this['id'] = ApiClient.convertToType(data['id'], 'Integer'); + _this['id'] = ApiClient.convertToType(data['id'], 'Integer'); } if (data['name']) { - this['name'] = ApiClient.convertToType(data['name'], 'String'); + _this['name'] = ApiClient.convertToType(data['name'], 'String'); } - return this; + return _this; } + /** * @return {Integer} **/ @@ -78,6 +80,7 @@ this['name'] = name; } + Category.prototype.toJson = function() { return JSON.stringify(this); diff --git a/samples/client/petstore/javascript/src/model/Order.js b/samples/client/petstore/javascript/src/model/Order.js index 0d5b90d319a..0632c1d2983 100644 --- a/samples/client/petstore/javascript/src/model/Order.js +++ b/samples/client/petstore/javascript/src/model/Order.js @@ -82,39 +82,41 @@ var StatusEnum = function StatusEnum() { }; - Order.prototype.constructFromObject = function(data) { + Order.constructFromObject = function(data) { if (!data) { - return this; + return null; } + var _this = new Order(); if (data['id']) { - this['id'] = ApiClient.convertToType(data['id'], 'Integer'); + _this['id'] = ApiClient.convertToType(data['id'], 'Integer'); } if (data['petId']) { - this['petId'] = ApiClient.convertToType(data['petId'], 'Integer'); + _this['petId'] = ApiClient.convertToType(data['petId'], 'Integer'); } if (data['quantity']) { - this['quantity'] = ApiClient.convertToType(data['quantity'], 'Integer'); + _this['quantity'] = ApiClient.convertToType(data['quantity'], 'Integer'); } if (data['shipDate']) { - this['shipDate'] = ApiClient.convertToType(data['shipDate'], 'Date'); + _this['shipDate'] = ApiClient.convertToType(data['shipDate'], 'Date'); } if (data['status']) { - this['status'] = ApiClient.convertToType(data['status'], 'String'); + _this['status'] = ApiClient.convertToType(data['status'], 'String'); } if (data['complete']) { - this['complete'] = ApiClient.convertToType(data['complete'], 'Boolean'); + _this['complete'] = ApiClient.convertToType(data['complete'], 'Boolean'); } - return this; + return _this; } + /** * @return {Integer} **/ @@ -201,6 +203,7 @@ var StatusEnum = function StatusEnum() { this['complete'] = complete; } + Order.prototype.toJson = function() { return JSON.stringify(this); diff --git a/samples/client/petstore/javascript/src/model/Pet.js b/samples/client/petstore/javascript/src/model/Pet.js index 67bacb19390..2d1212f5431 100644 --- a/samples/client/petstore/javascript/src/model/Pet.js +++ b/samples/client/petstore/javascript/src/model/Pet.js @@ -84,39 +84,41 @@ var StatusEnum = function StatusEnum() { }; - Pet.prototype.constructFromObject = function(data) { + Pet.constructFromObject = function(data) { if (!data) { - return this; + return null; } + var _this = new Pet(); if (data['id']) { - this['id'] = ApiClient.convertToType(data['id'], 'Integer'); + _this['id'] = ApiClient.convertToType(data['id'], 'Integer'); } if (data['category']) { - this['category'].constructFromObject(data['category']); + _this['category'] = Category.constructFromObject(data['category']); } if (data['name']) { - this['name'] = ApiClient.convertToType(data['name'], 'String'); + _this['name'] = ApiClient.convertToType(data['name'], 'String'); } if (data['photoUrls']) { - this['photoUrls'] = ApiClient.convertToType(data['photoUrls'], ['String']); + _this['photoUrls'] = ApiClient.convertToType(data['photoUrls'], ['String']); } if (data['tags']) { - this['tags'] = ApiClient.convertToType(data['tags'], [Tag]); + _this['tags'] = ApiClient.convertToType(data['tags'], [Tag]); } if (data['status']) { - this['status'] = ApiClient.convertToType(data['status'], 'String'); + _this['status'] = ApiClient.convertToType(data['status'], 'String'); } - return this; + return _this; } + /** * @return {Integer} **/ @@ -203,6 +205,7 @@ var StatusEnum = function StatusEnum() { this['status'] = status; } + Pet.prototype.toJson = function() { return JSON.stringify(this); diff --git a/samples/client/petstore/javascript/src/model/Tag.js b/samples/client/petstore/javascript/src/model/Tag.js index 563c1ee9df8..f2451493103 100644 --- a/samples/client/petstore/javascript/src/model/Tag.js +++ b/samples/client/petstore/javascript/src/model/Tag.js @@ -33,23 +33,25 @@ }; - Tag.prototype.constructFromObject = function(data) { + Tag.constructFromObject = function(data) { if (!data) { - return this; + return null; } + var _this = new Tag(); if (data['id']) { - this['id'] = ApiClient.convertToType(data['id'], 'Integer'); + _this['id'] = ApiClient.convertToType(data['id'], 'Integer'); } if (data['name']) { - this['name'] = ApiClient.convertToType(data['name'], 'String'); + _this['name'] = ApiClient.convertToType(data['name'], 'String'); } - return this; + return _this; } + /** * @return {Integer} **/ @@ -78,6 +80,7 @@ this['name'] = name; } + Tag.prototype.toJson = function() { return JSON.stringify(this); diff --git a/samples/client/petstore/javascript/src/model/User.js b/samples/client/petstore/javascript/src/model/User.js index 67c45561d3c..68dfc609d55 100644 --- a/samples/client/petstore/javascript/src/model/User.js +++ b/samples/client/petstore/javascript/src/model/User.js @@ -64,47 +64,49 @@ }; - User.prototype.constructFromObject = function(data) { + User.constructFromObject = function(data) { if (!data) { - return this; + return null; } + var _this = new User(); if (data['id']) { - this['id'] = ApiClient.convertToType(data['id'], 'Integer'); + _this['id'] = ApiClient.convertToType(data['id'], 'Integer'); } if (data['username']) { - this['username'] = ApiClient.convertToType(data['username'], 'String'); + _this['username'] = ApiClient.convertToType(data['username'], 'String'); } if (data['firstName']) { - this['firstName'] = ApiClient.convertToType(data['firstName'], 'String'); + _this['firstName'] = ApiClient.convertToType(data['firstName'], 'String'); } if (data['lastName']) { - this['lastName'] = ApiClient.convertToType(data['lastName'], 'String'); + _this['lastName'] = ApiClient.convertToType(data['lastName'], 'String'); } if (data['email']) { - this['email'] = ApiClient.convertToType(data['email'], 'String'); + _this['email'] = ApiClient.convertToType(data['email'], 'String'); } if (data['password']) { - this['password'] = ApiClient.convertToType(data['password'], 'String'); + _this['password'] = ApiClient.convertToType(data['password'], 'String'); } if (data['phone']) { - this['phone'] = ApiClient.convertToType(data['phone'], 'String'); + _this['phone'] = ApiClient.convertToType(data['phone'], 'String'); } if (data['userStatus']) { - this['userStatus'] = ApiClient.convertToType(data['userStatus'], 'Integer'); + _this['userStatus'] = ApiClient.convertToType(data['userStatus'], 'Integer'); } - return this; + return _this; } + /** * @return {Integer} **/ @@ -219,6 +221,7 @@ this['userStatus'] = userStatus; } + User.prototype.toJson = function() { return JSON.stringify(this); From 9bea6943a25c323aad6a0841dea6a78603394033 Mon Sep 17 00:00:00 2001 From: Ron Date: Fri, 12 Feb 2016 12:23:27 -0800 Subject: [PATCH 138/189] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 130e3a23671..3f5f11ea9f0 100644 --- a/README.md +++ b/README.md @@ -641,3 +641,6 @@ 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. + +--- + From a303a09749aa750595630e4861a7cdfd4f06571f Mon Sep 17 00:00:00 2001 From: Andrew B Date: Fri, 12 Feb 2016 18:52:49 -0800 Subject: [PATCH 139/189] Adding PATCH header override the default Java client --- .../main/resources/Java/ApiClient.mustache | 5 +- .../java/io/swagger/client/ApiClient.java | 9 ++- .../java/io/swagger/client/ApiException.java | 2 +- .../java/io/swagger/client/Configuration.java | 2 +- .../src/main/java/io/swagger/client/Pair.java | 2 +- .../java/io/swagger/client/StringUtil.java | 2 +- .../java/io/swagger/client/api/PetApi.java | 2 +- .../java/io/swagger/client/api/StoreApi.java | 2 +- .../java/io/swagger/client/api/UserApi.java | 2 +- .../io/swagger/client/auth/ApiKeyAuth.java | 2 +- .../io/swagger/client/auth/HttpBasicAuth.java | 2 +- .../java/io/swagger/client/auth/OAuth.java | 2 +- .../io/swagger/client/model/Category.java | 16 ++++- .../java/io/swagger/client/model/Order.java | 44 +++++++++++--- .../java/io/swagger/client/model/Pet.java | 44 +++++++++++--- .../java/io/swagger/client/model/Tag.java | 16 ++++- .../java/io/swagger/client/model/User.java | 58 ++++++++++++++++--- 17 files changed, 169 insertions(+), 43 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/Java/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/Java/ApiClient.mustache index 0ac7e31d387..38792c39614 100644 --- a/modules/swagger-codegen/src/main/resources/Java/ApiClient.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/ApiClient.mustache @@ -517,7 +517,10 @@ public class ApiClient { response = builder.type(contentType).put(ClientResponse.class, serialize(body, contentType, formParams)); } else if ("DELETE".equals(method)) { response = builder.type(contentType).delete(ClientResponse.class, serialize(body, contentType, formParams)); - } else { + } else if ("PATCH".equals(method)) { + response = builder.type(contentType).header("X-HTTP-Method-Override", "PATCH").post(ClientResponse.class, serialize(body, contentType, formParams)); + } + else { throw new ApiException(500, "unknown method type " + method); } return response; diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/ApiClient.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/ApiClient.java index da80705902c..7a4ed1a63b0 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/ApiClient.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/ApiClient.java @@ -41,7 +41,7 @@ import io.swagger.client.auth.HttpBasicAuth; import io.swagger.client.auth.ApiKeyAuth; import io.swagger.client.auth.OAuth; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-15T19:19:23.415+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-12T18:48:10.013-08:00") public class ApiClient { private Map defaultHeaderMap = new HashMap(); private String basePath = "http://petstore.swagger.io/v2"; @@ -83,8 +83,8 @@ public class ApiClient { // Setup authentications (key: authentication name, value: authentication). authentications = new HashMap(); - authentications.put("petstore_auth", new OAuth()); authentications.put("api_key", new ApiKeyAuth("header", "api_key")); + authentications.put("petstore_auth", new OAuth()); // Prevent the authentications from being modified. authentications = Collections.unmodifiableMap(authentications); } @@ -516,7 +516,10 @@ public class ApiClient { response = builder.type(contentType).put(ClientResponse.class, serialize(body, contentType, formParams)); } else if ("DELETE".equals(method)) { response = builder.type(contentType).delete(ClientResponse.class, serialize(body, contentType, formParams)); - } else { + } else if ("PATCH".equals(method)) { + response = builder.type(contentType).header("X-HTTP-Method-Override", "PATCH").post(ClientResponse.class, serialize(body, contentType, formParams)); + } + else { throw new ApiException(500, "unknown method type " + method); } return response; diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/ApiException.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/ApiException.java index ce41657cbad..c8e07238179 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/ApiException.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/ApiException.java @@ -3,7 +3,7 @@ package io.swagger.client; import java.util.Map; import java.util.List; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:16.440+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-12T18:48:10.013-08:00") public class ApiException extends Exception { private int code = 0; private Map> responseHeaders = null; diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/Configuration.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/Configuration.java index 5214af1cf49..8a28d5f194c 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/Configuration.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/Configuration.java @@ -1,6 +1,6 @@ package io.swagger.client; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:16.440+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-12T18:48:10.013-08:00") public class Configuration { private static ApiClient defaultApiClient = new ApiClient(); diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/Pair.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/Pair.java index ff8b7a6f9cd..4c08f122623 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/Pair.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/Pair.java @@ -1,6 +1,6 @@ package io.swagger.client; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:16.440+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-12T18:48:10.013-08:00") public class Pair { private String name = ""; private String value = ""; diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/StringUtil.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/StringUtil.java index f38d4702907..ab175012239 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/StringUtil.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/StringUtil.java @@ -1,6 +1,6 @@ package io.swagger.client; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:16.440+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-12T18:48:10.013-08:00") public class StringUtil { /** * Check if the given array contains the given value (with case-insensitive comparison). diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/PetApi.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/PetApi.java index bbbc5503c92..bc73e268ef2 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/PetApi.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/PetApi.java @@ -12,7 +12,7 @@ import java.io.File; import java.util.*; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-15T19:19:23.415+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-12T18:48:10.013-08:00") public class PetApi { private ApiClient apiClient; diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/StoreApi.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/StoreApi.java index 0db899119c1..6b727652f73 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/StoreApi.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/StoreApi.java @@ -12,7 +12,7 @@ import io.swagger.client.model.Order; import java.util.*; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:16.440+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-12T18:48:10.013-08:00") public class StoreApi { private ApiClient apiClient; diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/UserApi.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/UserApi.java index 7d9c48a0c45..a0dc13fbf2b 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/UserApi.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/UserApi.java @@ -12,7 +12,7 @@ import java.util.*; import java.util.*; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:16.440+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-12T18:48:10.013-08:00") public class UserApi { private ApiClient apiClient; diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/ApiKeyAuth.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/ApiKeyAuth.java index 1a94c997e64..0a38c196bee 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/ApiKeyAuth.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/ApiKeyAuth.java @@ -5,7 +5,7 @@ import io.swagger.client.Pair; import java.util.Map; import java.util.List; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:16.440+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-12T18:48:10.013-08:00") public class ApiKeyAuth implements Authentication { private final String location; private final String paramName; diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/HttpBasicAuth.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/HttpBasicAuth.java index c4861a69782..d85b6418867 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/HttpBasicAuth.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/HttpBasicAuth.java @@ -9,7 +9,7 @@ import java.util.List; import java.io.UnsupportedEncodingException; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:16.440+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-12T18:48:10.013-08:00") public class HttpBasicAuth implements Authentication { private String username; private String password; diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/OAuth.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/OAuth.java index 1280a589076..38187f5511c 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/OAuth.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/auth/OAuth.java @@ -5,7 +5,7 @@ import io.swagger.client.Pair; import java.util.Map; import java.util.List; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:16.440+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-12T18:48:10.013-08:00") public class OAuth implements Authentication { private String accessToken; diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Category.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Category.java index 4dcaa928c9a..afe72de51ae 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Category.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Category.java @@ -10,7 +10,7 @@ import io.swagger.annotations.ApiModelProperty; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-15T19:19:23.415+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-12T18:48:10.013-08:00") public class Category { private Long id = null; @@ -19,8 +19,13 @@ public class Category { /** **/ + public Category id(Long id) { + this.id = id; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("id") public Long getId() { return id; @@ -32,8 +37,13 @@ public class Category { /** **/ + public Category name(String name) { + this.name = name; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("name") public String getName() { return name; diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Order.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Order.java index 67543c5a227..4b8126387e6 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Order.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Order.java @@ -11,7 +11,7 @@ import java.util.Date; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-15T19:19:23.415+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-12T18:48:10.013-08:00") public class Order { private Long id = null; @@ -44,8 +44,13 @@ public class Order { /** **/ + public Order id(Long id) { + this.id = id; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("id") public Long getId() { return id; @@ -57,8 +62,13 @@ public class Order { /** **/ + public Order petId(Long petId) { + this.petId = petId; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("petId") public Long getPetId() { return petId; @@ -70,8 +80,13 @@ public class Order { /** **/ + public Order quantity(Integer quantity) { + this.quantity = quantity; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("quantity") public Integer getQuantity() { return quantity; @@ -83,8 +98,13 @@ public class Order { /** **/ + public Order shipDate(Date shipDate) { + this.shipDate = shipDate; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("shipDate") public Date getShipDate() { return shipDate; @@ -97,8 +117,13 @@ public class Order { /** * Order Status **/ + public Order status(StatusEnum status) { + this.status = status; + return this; + } + - @ApiModelProperty(value = "Order Status") + @ApiModelProperty(example = "null", value = "Order Status") @JsonProperty("status") public StatusEnum getStatus() { return status; @@ -110,8 +135,13 @@ public class Order { /** **/ + public Order complete(Boolean complete) { + this.complete = complete; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("complete") public Boolean getComplete() { return complete; diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Pet.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Pet.java index 12d3e5a441f..c04f35adfad 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Pet.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Pet.java @@ -13,7 +13,7 @@ import java.util.*; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-15T19:19:23.415+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-12T18:48:10.013-08:00") public class Pet { private Long id = null; @@ -46,8 +46,13 @@ public class Pet { /** **/ + public Pet id(Long id) { + this.id = id; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("id") public Long getId() { return id; @@ -59,8 +64,13 @@ public class Pet { /** **/ + public Pet category(Category category) { + this.category = category; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("category") public Category getCategory() { return category; @@ -72,8 +82,13 @@ public class Pet { /** **/ + public Pet name(String name) { + this.name = name; + return this; + } + - @ApiModelProperty(required = true, value = "") + @ApiModelProperty(example = "doggie", required = true, value = "") @JsonProperty("name") public String getName() { return name; @@ -85,8 +100,13 @@ public class Pet { /** **/ + public Pet photoUrls(List photoUrls) { + this.photoUrls = photoUrls; + return this; + } + - @ApiModelProperty(required = true, value = "") + @ApiModelProperty(example = "null", required = true, value = "") @JsonProperty("photoUrls") public List getPhotoUrls() { return photoUrls; @@ -98,8 +118,13 @@ public class Pet { /** **/ + public Pet tags(List tags) { + this.tags = tags; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("tags") public List getTags() { return tags; @@ -112,8 +137,13 @@ public class Pet { /** * pet status in the store **/ + public Pet status(StatusEnum status) { + this.status = status; + return this; + } + - @ApiModelProperty(value = "pet status in the store") + @ApiModelProperty(example = "null", value = "pet status in the store") @JsonProperty("status") public StatusEnum getStatus() { return status; diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Tag.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Tag.java index 7f65d9c963a..da7f31937c5 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Tag.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Tag.java @@ -10,7 +10,7 @@ import io.swagger.annotations.ApiModelProperty; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-15T19:19:23.415+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-12T18:48:10.013-08:00") public class Tag { private Long id = null; @@ -19,8 +19,13 @@ public class Tag { /** **/ + public Tag id(Long id) { + this.id = id; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("id") public Long getId() { return id; @@ -32,8 +37,13 @@ public class Tag { /** **/ + public Tag name(String name) { + this.name = name; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("name") public String getName() { return name; diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/User.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/User.java index df6bc1e543f..edb5b50931f 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/User.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/User.java @@ -10,7 +10,7 @@ import io.swagger.annotations.ApiModelProperty; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-15T19:19:23.415+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-12T18:48:10.013-08:00") public class User { private Long id = null; @@ -25,8 +25,13 @@ public class User { /** **/ + public User id(Long id) { + this.id = id; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("id") public Long getId() { return id; @@ -38,8 +43,13 @@ public class User { /** **/ + public User username(String username) { + this.username = username; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("username") public String getUsername() { return username; @@ -51,8 +61,13 @@ public class User { /** **/ + public User firstName(String firstName) { + this.firstName = firstName; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("firstName") public String getFirstName() { return firstName; @@ -64,8 +79,13 @@ public class User { /** **/ + public User lastName(String lastName) { + this.lastName = lastName; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("lastName") public String getLastName() { return lastName; @@ -77,8 +97,13 @@ public class User { /** **/ + public User email(String email) { + this.email = email; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("email") public String getEmail() { return email; @@ -90,8 +115,13 @@ public class User { /** **/ + public User password(String password) { + this.password = password; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("password") public String getPassword() { return password; @@ -103,8 +133,13 @@ public class User { /** **/ + public User phone(String phone) { + this.phone = phone; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("phone") public String getPhone() { return phone; @@ -117,8 +152,13 @@ public class User { /** * User Status **/ + public User userStatus(Integer userStatus) { + this.userStatus = userStatus; + return this; + } + - @ApiModelProperty(value = "User Status") + @ApiModelProperty(example = "null", value = "User Status") @JsonProperty("userStatus") public Integer getUserStatus() { return userStatus; From 2fcbc38b67e2133dcc0c4c8e9ab097e2545c5799 Mon Sep 17 00:00:00 2001 From: wing328 Date: Sat, 13 Feb 2016 16:29:35 +0800 Subject: [PATCH 140/189] fix objc binary mapping, add objc,swift to CI tests --- .../codegen/languages/ObjcClientCodegen.java | 3 + pom.xml | 17 +- .../petstore/objc/SwaggerClient/SWGPetApi.h | 30 +++ .../petstore/objc/SwaggerClient/SWGPetApi.m | 164 +++++++++++++++ .../Classes/Swaggers/APIs/PetAPI.swift | 198 +++++++++++------- .../Classes/Swaggers/APIs/StoreAPI.swift | 72 +++---- .../Classes/Swaggers/APIs/UserAPI.swift | 8 +- .../Classes/Swaggers/Models.swift | 16 +- 8 files changed, 389 insertions(+), 119 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ObjcClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ObjcClientCodegen.java index 76739f5ab3c..3351007386a 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ObjcClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ObjcClientCodegen.java @@ -84,6 +84,9 @@ public class ObjcClientCodegen extends DefaultCodegen implements CodegenConfig { typeMapping.put("List", "NSArray"); typeMapping.put("object", "NSObject"); typeMapping.put("file", "NSURL"); + //TODO binary should be mapped to byte array + // mapped to String as a workaround + typeMapping.put("binary", "NSString"); // ref: http://www.tutorialspoint.com/objective_c/objective_c_basic_syntax.htm diff --git a/pom.xml b/pom.xml index 17ad062e4f0..b2a9e2e7266 100644 --- a/pom.xml +++ b/pom.xml @@ -399,7 +399,19 @@ - samples/client/petstore/objc + samples/client/petstore/objc/SwaggerClientTests + + + + swift-client + + + env + swift + + + + samples/client/petstore/swift/SwaggerClientTests @@ -459,9 +471,10 @@ samples/client/petstore/javascript samples/client/petstore/scala samples/server/petstore/spring-mvc - samples/client/petstore/ruby samples/server/petstore/jaxrs + samples/client/petstore/swift/SwaggerClientTests + samples/client/petstore/objc/SwaggerClientTests diff --git a/samples/client/petstore/objc/SwaggerClient/SWGPetApi.h b/samples/client/petstore/objc/SwaggerClient/SWGPetApi.h index 7ea1821e575..8450740ce39 100644 --- a/samples/client/petstore/objc/SwaggerClient/SWGPetApi.h +++ b/samples/client/petstore/objc/SwaggerClient/SWGPetApi.h @@ -149,5 +149,35 @@ completionHandler: (void (^)(NSError* error))completionBlock; +/// +/// +/// Fake endpoint to test byte array return by 'Find pet by ID' +/// Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions +/// +/// @param petId ID of pet that needs to be fetched +/// +/// +/// @return NSString* +-(NSNumber*) getPetByIdWithByteArrayWithCompletionBlock :(NSNumber*) petId + + completionHandler: (void (^)(NSString* output, NSError* error))completionBlock; + + + +/// +/// +/// Fake endpoint to test byte array in body parameter for adding a new pet to the store +/// +/// +/// @param body Pet object in the form of byte array +/// +/// +/// @return +-(NSNumber*) addPetUsingByteArrayWithCompletionBlock :(NSString*) body + + + completionHandler: (void (^)(NSError* error))completionBlock; + + @end diff --git a/samples/client/petstore/objc/SwaggerClient/SWGPetApi.m b/samples/client/petstore/objc/SwaggerClient/SWGPetApi.m index c7c2ed175c6..d3b76c0a4f3 100644 --- a/samples/client/petstore/objc/SwaggerClient/SWGPetApi.m +++ b/samples/client/petstore/objc/SwaggerClient/SWGPetApi.m @@ -758,6 +758,170 @@ static SWGPetApi* singletonAPI = nil; + return [self.apiClient requestWithCompletionBlock: resourcePath + method: @"POST" + pathParams: pathParams + queryParams: queryParams + formParams: formParams + files: files + body: bodyParam + headerParams: headerParams + authSettings: authSettings + requestContentType: requestContentType + responseContentType: responseContentType + responseType: nil + completionBlock: ^(id data, NSError *error) { + completionBlock(error); + + } + ]; +} + +/// +/// Fake endpoint to test byte array return by 'Find pet by ID' +/// Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions +/// @param petId ID of pet that needs to be fetched +/// +/// @returns NSString* +/// +-(NSNumber*) getPetByIdWithByteArrayWithCompletionBlock: (NSNumber*) petId + + completionHandler: (void (^)(NSString* output, NSError* error))completionBlock { + + + + // verify the required parameter 'petId' is set + if (petId == nil) { + [NSException raise:@"Invalid parameter" format:@"Missing the required parameter `petId` when calling `getPetByIdWithByteArray`"]; + } + + + NSMutableString* resourcePath = [NSMutableString stringWithFormat:@"/pet/{petId}?testing_byte_array=true"]; + + // remove format in URL if needed + if ([resourcePath rangeOfString:@".{format}"].location != NSNotFound) { + [resourcePath replaceCharactersInRange: [resourcePath rangeOfString:@".{format}"] withString:@".json"]; + } + + NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init]; + if (petId != nil) { + pathParams[@"petId"] = petId; + } + + + NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; + + NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders]; + + + + // HTTP header `Accept` + headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:@[@"application/json", @"application/xml"]]; + if ([headerParams[@"Accept"] length] == 0) { + [headerParams removeObjectForKey:@"Accept"]; + } + + // response content type + NSString *responseContentType; + if ([headerParams objectForKey:@"Accept"]) { + responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + } + else { + responseContentType = @""; + } + + // request content type + NSString *requestContentType = [SWGApiClient selectHeaderContentType:@[]]; + + // Authentication setting + NSArray *authSettings = @[@"api_key"]; + + id bodyParam = nil; + NSMutableDictionary *formParams = [[NSMutableDictionary alloc] init]; + NSMutableDictionary *files = [[NSMutableDictionary alloc] init]; + + + + + + return [self.apiClient requestWithCompletionBlock: resourcePath + method: @"GET" + pathParams: pathParams + queryParams: queryParams + formParams: formParams + files: files + body: bodyParam + headerParams: headerParams + authSettings: authSettings + requestContentType: requestContentType + responseContentType: responseContentType + responseType: @"NSString*" + completionBlock: ^(id data, NSError *error) { + + completionBlock((NSString*)data, error); + } + ]; +} + +/// +/// Fake endpoint to test byte array in body parameter for adding a new pet to the store +/// +/// @param body Pet object in the form of byte array +/// +/// @returns void +/// +-(NSNumber*) addPetUsingByteArrayWithCompletionBlock: (NSString*) body + + + completionHandler: (void (^)(NSError* error))completionBlock { + + + + NSMutableString* resourcePath = [NSMutableString stringWithFormat:@"/pet?testing_byte_array=true"]; + + // remove format in URL if needed + if ([resourcePath rangeOfString:@".{format}"].location != NSNotFound) { + [resourcePath replaceCharactersInRange: [resourcePath rangeOfString:@".{format}"] withString:@".json"]; + } + + NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init]; + + + NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; + + NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders]; + + + + // HTTP header `Accept` + headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:@[@"application/json", @"application/xml"]]; + if ([headerParams[@"Accept"] length] == 0) { + [headerParams removeObjectForKey:@"Accept"]; + } + + // response content type + NSString *responseContentType; + if ([headerParams objectForKey:@"Accept"]) { + responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0]; + } + else { + responseContentType = @""; + } + + // request content type + NSString *requestContentType = [SWGApiClient selectHeaderContentType:@[@"application/json", @"application/xml"]]; + + // Authentication setting + NSArray *authSettings = @[@"petstore_auth"]; + + id bodyParam = nil; + NSMutableDictionary *formParams = [[NSMutableDictionary alloc] init]; + NSMutableDictionary *files = [[NSMutableDictionary alloc] init]; + + bodyParam = body; + + + return [self.apiClient requestWithCompletionBlock: resourcePath method: @"POST" pathParams: pathParams diff --git a/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/APIs/PetAPI.swift b/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/APIs/PetAPI.swift index ea6c50e2549..d0ea91c2dc9 100644 --- a/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/APIs/PetAPI.swift +++ b/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/APIs/PetAPI.swift @@ -71,20 +71,20 @@ extension PetstoreClientAPI { - OAuth: - type: oauth2 - name: petstore_auth - - examples: [{contentType=application/json, example=[ { - "photoUrls" : [ "aeiou" ], - "name" : "doggie", + - examples: [{example=[ { + "tags" : [ { + "id" : 123456789, + "name" : "aeiou" + } ], "id" : 123456789, "category" : { - "name" : "aeiou", - "id" : 123456789 + "id" : 123456789, + "name" : "aeiou" }, - "tags" : [ { - "name" : "aeiou", - "id" : 123456789 - } ], - "status" : "aeiou" -} ]}, {contentType=application/xml, example= + "status" : "aeiou", + "name" : "doggie", + "photoUrls" : [ "aeiou" ] +} ], contentType=application/json}, {example= 123456 doggie @@ -93,21 +93,21 @@ extension PetstoreClientAPI { string -}] - - examples: [{contentType=application/json, example=[ { - "photoUrls" : [ "aeiou" ], - "name" : "doggie", +, contentType=application/xml}] + - examples: [{example=[ { + "tags" : [ { + "id" : 123456789, + "name" : "aeiou" + } ], "id" : 123456789, "category" : { - "name" : "aeiou", - "id" : 123456789 + "id" : 123456789, + "name" : "aeiou" }, - "tags" : [ { - "name" : "aeiou", - "id" : 123456789 - } ], - "status" : "aeiou" -} ]}, {contentType=application/xml, example= + "status" : "aeiou", + "name" : "doggie", + "photoUrls" : [ "aeiou" ] +} ], contentType=application/json}, {example= 123456 doggie @@ -116,7 +116,7 @@ extension PetstoreClientAPI { string -}] +, contentType=application/xml}] - parameter status: (query) Status values that need to be considered for filter @@ -145,20 +145,20 @@ extension PetstoreClientAPI { - OAuth: - type: oauth2 - name: petstore_auth - - examples: [{contentType=application/json, example=[ { - "photoUrls" : [ "aeiou" ], - "name" : "doggie", + - examples: [{example=[ { + "tags" : [ { + "id" : 123456789, + "name" : "aeiou" + } ], "id" : 123456789, "category" : { - "name" : "aeiou", - "id" : 123456789 + "id" : 123456789, + "name" : "aeiou" }, - "tags" : [ { - "name" : "aeiou", - "id" : 123456789 - } ], - "status" : "aeiou" -} ]}, {contentType=application/xml, example= + "status" : "aeiou", + "name" : "doggie", + "photoUrls" : [ "aeiou" ] +} ], contentType=application/json}, {example= 123456 doggie @@ -167,21 +167,21 @@ extension PetstoreClientAPI { string -}] - - examples: [{contentType=application/json, example=[ { - "photoUrls" : [ "aeiou" ], - "name" : "doggie", +, contentType=application/xml}] + - examples: [{example=[ { + "tags" : [ { + "id" : 123456789, + "name" : "aeiou" + } ], "id" : 123456789, "category" : { - "name" : "aeiou", - "id" : 123456789 + "id" : 123456789, + "name" : "aeiou" }, - "tags" : [ { - "name" : "aeiou", - "id" : 123456789 - } ], - "status" : "aeiou" -} ]}, {contentType=application/xml, example= + "status" : "aeiou", + "name" : "doggie", + "photoUrls" : [ "aeiou" ] +} ], contentType=application/json}, {example= 123456 doggie @@ -190,7 +190,7 @@ extension PetstoreClientAPI { string -}] +, contentType=application/xml}] - parameter tags: (query) Tags to filter by @@ -219,20 +219,20 @@ extension PetstoreClientAPI { - API Key: - type: apiKey api_key - name: api_key - - examples: [{contentType=application/json, example={ - "photoUrls" : [ "aeiou" ], - "name" : "doggie", + - examples: [{example={ + "tags" : [ { + "id" : 123456789, + "name" : "aeiou" + } ], "id" : 123456789, "category" : { - "name" : "aeiou", - "id" : 123456789 + "id" : 123456789, + "name" : "aeiou" }, - "tags" : [ { - "name" : "aeiou", - "id" : 123456789 - } ], - "status" : "aeiou" -}}, {contentType=application/xml, example= + "status" : "aeiou", + "name" : "doggie", + "photoUrls" : [ "aeiou" ] +}, contentType=application/json}, {example= 123456 doggie @@ -241,21 +241,21 @@ extension PetstoreClientAPI { string -}] - - examples: [{contentType=application/json, example={ - "photoUrls" : [ "aeiou" ], - "name" : "doggie", +, contentType=application/xml}] + - examples: [{example={ + "tags" : [ { + "id" : 123456789, + "name" : "aeiou" + } ], "id" : 123456789, "category" : { - "name" : "aeiou", - "id" : 123456789 + "id" : 123456789, + "name" : "aeiou" }, - "tags" : [ { - "name" : "aeiou", - "id" : 123456789 - } ], - "status" : "aeiou" -}}, {contentType=application/xml, example= + "status" : "aeiou", + "name" : "doggie", + "photoUrls" : [ "aeiou" ] +}, contentType=application/json}, {example= 123456 doggie @@ -264,7 +264,7 @@ extension PetstoreClientAPI { string -}] +, contentType=application/xml}] - parameter petId: (path) ID of pet that needs to be fetched @@ -374,5 +374,59 @@ extension PetstoreClientAPI { return requestBuilder.init(method: "POST", URLString: URLString, parameters: parameters, isBody: false) } + /** + + Fake endpoint to test byte array return by 'Find pet by ID' + + - GET /pet/{petId}?testing_byte_array=true + - Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions + - API Key: + - type: apiKey api_key + - name: api_key + - examples: [{example="", contentType=application/json}, {example=not implemented io.swagger.models.properties.BinaryProperty@55e6ae9e, contentType=application/xml}] + - examples: [{example="", contentType=application/json}, {example=not implemented io.swagger.models.properties.BinaryProperty@55e6ae9e, contentType=application/xml}] + + - parameter petId: (path) ID of pet that needs to be fetched + + - returns: RequestBuilder + */ + public class func getPetByIdWithByteArray(petId petId: Int) -> RequestBuilder { + var path = "/pet/{petId}?testing_byte_array=true" + path = path.stringByReplacingOccurrencesOfString("{petId}", withString: "\(petId)", options: .LiteralSearch, range: nil) + let URLString = PetstoreClientAPI.basePath + path + + let nillableParameters: [String:AnyObject?] = [:] + let parameters = APIHelper.rejectNil(nillableParameters) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + + return requestBuilder.init(method: "GET", URLString: URLString, parameters: parameters, isBody: true) + } + + /** + + Fake endpoint to test byte array in body parameter for adding a new pet to the store + + - POST /pet?testing_byte_array=true + - + - OAuth: + - type: oauth2 + - name: petstore_auth + + - parameter body: (body) Pet object in the form of byte array + + - returns: RequestBuilder + */ + public class func addPetUsingByteArray(body body: String?) -> RequestBuilder { + let path = "/pet?testing_byte_array=true" + let URLString = PetstoreClientAPI.basePath + path + + let parameters = body?.encodeToJSON() as? [String:AnyObject] + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + + return requestBuilder.init(method: "POST", URLString: URLString, parameters: parameters, isBody: true) + } + } } diff --git a/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/APIs/StoreAPI.swift b/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/APIs/StoreAPI.swift index 0b81fea66d4..23a33a0f284 100644 --- a/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/APIs/StoreAPI.swift +++ b/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/APIs/StoreAPI.swift @@ -21,12 +21,12 @@ extension PetstoreClientAPI { - API Key: - type: apiKey api_key - name: api_key - - examples: [{contentType=application/json, example={ + - examples: [{example={ "key" : 123 -}}, {contentType=application/xml, example=not implemented io.swagger.models.properties.MapProperty@d1e580af}] - - examples: [{contentType=application/json, example={ +}, contentType=application/json}, {example=not implemented io.swagger.models.properties.MapProperty@d1e580af, contentType=application/xml}] + - examples: [{example={ "key" : 123 -}}, {contentType=application/xml, example=not implemented io.swagger.models.properties.MapProperty@d1e580af}] +}, contentType=application/json}, {example=not implemented io.swagger.models.properties.MapProperty@d1e580af, contentType=application/xml}] - returns: RequestBuilder<[String:Int]> */ @@ -48,36 +48,36 @@ extension PetstoreClientAPI { - POST /store/order - - - examples: [{contentType=application/json, example={ - "petId" : 123456789, - "quantity" : 123, + - examples: [{example={ "id" : 123456789, - "shipDate" : "2016-02-07T13:55:23.709+0000", + "petId" : 123456789, "complete" : true, - "status" : "aeiou" -}}, {contentType=application/xml, example= + "status" : "aeiou", + "quantity" : 123, + "shipDate" : "2016-02-13T08:19:01.757+0000" +}, contentType=application/json}, {example= 123456 123456 0 - 2016-02-07T05:55:23.712Z + 2016-02-13T16:19:01.763Z string true -}] - - examples: [{contentType=application/json, example={ - "petId" : 123456789, - "quantity" : 123, +, contentType=application/xml}] + - examples: [{example={ "id" : 123456789, - "shipDate" : "2016-02-07T13:55:23.709+0000", + "petId" : 123456789, "complete" : true, - "status" : "aeiou" -}}, {contentType=application/xml, example= + "status" : "aeiou", + "quantity" : 123, + "shipDate" : "2016-02-13T08:19:01.757+0000" +}, contentType=application/json}, {example= 123456 123456 0 - 2016-02-07T05:55:23.712Z + 2016-02-13T16:19:01.763Z string true -}] +, contentType=application/xml}] - parameter body: (body) order placed for purchasing the pet @@ -100,36 +100,36 @@ extension PetstoreClientAPI { - GET /store/order/{orderId} - For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions - - examples: [{contentType=application/json, example={ - "petId" : 123456789, - "quantity" : 123, + - examples: [{example={ "id" : 123456789, - "shipDate" : "2016-02-07T13:55:23.713+0000", + "petId" : 123456789, "complete" : true, - "status" : "aeiou" -}}, {contentType=application/xml, example= + "status" : "aeiou", + "quantity" : 123, + "shipDate" : "2016-02-13T08:19:01.765+0000" +}, contentType=application/json}, {example= 123456 123456 0 - 2016-02-07T05:55:23.713Z + 2016-02-13T16:19:01.766Z string true -}] - - examples: [{contentType=application/json, example={ - "petId" : 123456789, - "quantity" : 123, +, contentType=application/xml}] + - examples: [{example={ "id" : 123456789, - "shipDate" : "2016-02-07T13:55:23.713+0000", + "petId" : 123456789, "complete" : true, - "status" : "aeiou" -}}, {contentType=application/xml, example= + "status" : "aeiou", + "quantity" : 123, + "shipDate" : "2016-02-13T08:19:01.765+0000" +}, contentType=application/json}, {example= 123456 123456 0 - 2016-02-07T05:55:23.713Z + 2016-02-13T16:19:01.766Z string true -}] +, contentType=application/xml}] - parameter orderId: (path) ID of pet that needs to be fetched diff --git a/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/APIs/UserAPI.swift b/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/APIs/UserAPI.swift index 231e7f59228..19cf534cea8 100644 --- a/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/APIs/UserAPI.swift +++ b/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/APIs/UserAPI.swift @@ -84,8 +84,8 @@ extension PetstoreClientAPI { - GET /user/login - - - examples: [{contentType=application/json, example="aeiou"}, {contentType=application/xml, example=string}] - - examples: [{contentType=application/json, example="aeiou"}, {contentType=application/xml, example=string}] + - examples: [{example="aeiou", contentType=application/json}, {example=string, contentType=application/xml}] + - examples: [{example="aeiou", contentType=application/json}, {example=string, contentType=application/xml}] - parameter username: (query) The user name for login - parameter password: (query) The password for login in clear text @@ -134,7 +134,7 @@ extension PetstoreClientAPI { - GET /user/{username} - - - examples: [{contentType=application/json, example={ + - examples: [{example={ "id" : 1, "username" : "johnp", "firstName" : "John", @@ -143,7 +143,7 @@ extension PetstoreClientAPI { "password" : "-secret-", "phone" : "0123456789", "userStatus" : 0 -}}] +}, contentType=application/json}] - parameter username: (path) The name that needs to be fetched. Use user1 for testing. diff --git a/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/Models.swift b/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/Models.swift index fd79652c614..04c07fa97ff 100644 --- a/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/Models.swift +++ b/samples/client/petstore/swift/PetstoreClient/Classes/Swaggers/Models.swift @@ -109,13 +109,19 @@ class Decoders { } // Decoder for NSDate Decoders.addDecoder(clazz: NSDate.self) { (source: AnyObject) -> NSDate in - let sourceString = source as! String - for formatter in formatters { - if let date = formatter.dateFromString(sourceString) { - return date + if let sourceString = source as? String { + for formatter in formatters { + if let date = formatter.dateFromString(sourceString) { + return date + } } + } - fatalError("formatter failed to parse \(sourceString)") + if let sourceInt = source as? Int { + // treat as a java date + return NSDate(timeIntervalSince1970: Double(sourceInt / 1000) ) + } + fatalError("formatter failed to parse \(source)") } // Decoder for [User] From 57d16dee7bd3bf01f53e11d36a7ef25a410ffe87 Mon Sep 17 00:00:00 2001 From: wing328 Date: Sat, 13 Feb 2016 16:46:01 +0800 Subject: [PATCH 141/189] remove swift CI test --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b2a9e2e7266..8e7aa5bf3c9 100644 --- a/pom.xml +++ b/pom.xml @@ -473,8 +473,8 @@ samples/server/petstore/spring-mvc samples/client/petstore/ruby samples/server/petstore/jaxrs - samples/client/petstore/swift/SwaggerClientTests samples/client/petstore/objc/SwaggerClientTests + From 23a90b7dccf4aef4c083fb37d6a8ea26c3cae783 Mon Sep 17 00:00:00 2001 From: wing328 Date: Sat, 13 Feb 2016 17:43:38 +0800 Subject: [PATCH 142/189] remove objc, add pom.xml to test C# petstore client --- pom.xml | 2 +- .../csharp/SwaggerClientTest/mono-nunit.sh | 14 +++++ .../petstore/csharp/SwaggerClientTest/pom.xml | 56 +++++++++++++++++++ 3 files changed, 71 insertions(+), 1 deletion(-) create mode 100755 samples/client/petstore/csharp/SwaggerClientTest/mono-nunit.sh create mode 100644 samples/client/petstore/csharp/SwaggerClientTest/pom.xml diff --git a/pom.xml b/pom.xml index 8e7aa5bf3c9..3519ce9f0cb 100644 --- a/pom.xml +++ b/pom.xml @@ -473,7 +473,7 @@ samples/server/petstore/spring-mvc samples/client/petstore/ruby samples/server/petstore/jaxrs - samples/client/petstore/objc/SwaggerClientTests + diff --git a/samples/client/petstore/csharp/SwaggerClientTest/mono-nunit.sh b/samples/client/petstore/csharp/SwaggerClientTest/mono-nunit.sh new file mode 100755 index 00000000000..c14e76dad05 --- /dev/null +++ b/samples/client/petstore/csharp/SwaggerClientTest/mono-nunit.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash +wget -nc https://nuget.org/nuget.exe; +mozroots --import --sync + +# remove bin/Debug/SwaggerClientTest.dll +rm bin/Debug/SwaggerClientTest.dll 2> /dev/null + +# install NUnit runners via NuGet +mono nuget.exe install NUnit.Runners -Version 2.6.4 -OutputDirectory testrunner + +# build the solution and run the unit test +xbuild SwaggerClientTest.sln && \ +mono ./testrunner/NUnit.Runners.2.6.4/tools/nunit-console.exe bin/Debug/SwaggerClientTest.dll + diff --git a/samples/client/petstore/csharp/SwaggerClientTest/pom.xml b/samples/client/petstore/csharp/SwaggerClientTest/pom.xml new file mode 100644 index 00000000000..46304c21621 --- /dev/null +++ b/samples/client/petstore/csharp/SwaggerClientTest/pom.xml @@ -0,0 +1,56 @@ + + 4.0.0 + com.wordnik + CsharpPetstoreClientTests + pom + 1.0-SNAPSHOT + C# Swagger Petstore Client + + + + maven-dependency-plugin + + + package + + copy-dependencies + + + ${project.build.directory} + + + + + + org.codehaus.mojo + exec-maven-plugin + 1.2.1 + + + + mono-test + integration-test + + exec + + + mono-nunit.sh + + + + + + + From 0f6038f3b10f818ad252f3ca7fda12070c530441 Mon Sep 17 00:00:00 2001 From: Jim Schubert Date: Fri, 12 Feb 2016 22:18:59 -0500 Subject: [PATCH 143/189] [csharp] Initial settings for v3.5 client compatibility Pass -DtargetFramework=v3.5 to generate .NET 3.5 client --- .../io/swagger/codegen/CodegenConstants.java | 3 + .../languages/CSharpClientCodegen.java | 61 ++- .../main/resources/csharp/ApiClient.mustache | 6 +- .../resources/csharp/ApiException.mustache | 4 +- .../resources/csharp/AssemblyInfo.mustache | 1 - .../main/resources/csharp/Newtonsoft.Json.dll | Bin 510976 -> 0 bytes .../main/resources/csharp/Project.mustache | 6 +- .../src/main/resources/csharp/RestSharp.dll | Bin 167936 -> 0 bytes .../src/main/resources/csharp/api.mustache | 14 +- .../resources/csharp/compile-mono.sh.mustache | 11 +- .../main/resources/csharp/compile.mustache | 13 +- .../resources/csharp/packages.config.mustache | 4 +- .../options/CSharpClientOptionsProvider.java | 1 + .../Lib/SwaggerClient/.gitignore | 2 + .../Lib/SwaggerClient/bin/Newtonsoft.Json.dll | Bin 510976 -> 521216 bytes .../Lib/SwaggerClient/bin/RestSharp.dll | Bin 167936 -> 168960 bytes .../Lib/SwaggerClient/compile-mono.sh | 11 +- .../Lib/SwaggerClient/compile.bat | 9 +- .../src/main/csharp/IO/Swagger/Api/PetApi.cs | 419 +++++++++--------- .../main/csharp/IO/Swagger/Api/StoreApi.cs | 135 +++--- .../src/main/csharp/IO/Swagger/Api/UserApi.cs | 317 ++++++------- .../csharp/IO/Swagger/Client/ApiClient.cs | 2 +- 22 files changed, 580 insertions(+), 439 deletions(-) delete mode 100644 modules/swagger-codegen/src/main/resources/csharp/Newtonsoft.Json.dll delete mode 100644 modules/swagger-codegen/src/main/resources/csharp/RestSharp.dll create mode 100644 samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/.gitignore diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConstants.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConstants.java index f0d3591ba3f..83330477b65 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConstants.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConstants.java @@ -77,6 +77,9 @@ public class CodegenConstants { public static final String MODEL_PROPERTY_NAMING = "modelPropertyNaming"; public static final String MODEL_PROPERTY_NAMING_DESC = "Naming convention for the property: 'camelCase', 'PascalCase', 'snake_case' and 'original', which keeps the original name"; + public static final String DOTNET_FRAMEWORK = "targetFramework"; + public static final String DOTNET_FRAMEWORK_DESC = "The target .NET framework version."; + public static enum MODEL_PROPERTY_NAMING_TYPE {camelCase, PascalCase, snake_case, original} } diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java index 0da5b72f57f..3ef8e35e93e 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java @@ -1,5 +1,7 @@ package io.swagger.codegen.languages; +import com.google.common.collect.ImmutableBiMap; +import com.google.common.collect.ImmutableMap; import io.swagger.codegen.CodegenConfig; import io.swagger.codegen.CodegenConstants; import io.swagger.codegen.CodegenType; @@ -25,6 +27,8 @@ import org.slf4j.LoggerFactory; public class CSharpClientCodegen extends AbstractCSharpCodegen { @SuppressWarnings({"unused", "hiding"}) private static final Logger LOGGER = LoggerFactory.getLogger(CSharpClientCodegen.class); + private static final String NET45 = "v4.5"; + private static final String NET35 = "v3.5"; protected String packageGuid = "{" + java.util.UUID.randomUUID().toString().toUpperCase() + "}"; protected String packageTitle = "Swagger Library"; @@ -34,6 +38,13 @@ public class CSharpClientCodegen extends AbstractCSharpCodegen { protected String packageCopyright = "No Copyright"; protected String clientPackage = "IO.Swagger.Client"; + protected String targetFramework = NET45; + protected String targetFrameworkNuget = "net45"; + protected boolean supportsAsync = Boolean.TRUE; + + + protected final Map frameworks; + public CSharpClientCodegen() { super(); modelTemplateFiles.put("model.mustache", ".cs"); @@ -64,6 +75,18 @@ public class CSharpClientCodegen extends AbstractCSharpCodegen { CodegenConstants.OPTIONAL_PROJECT_GUID_DESC, null); + CliOption framework = new CliOption( + CodegenConstants.DOTNET_FRAMEWORK, + CodegenConstants.DOTNET_FRAMEWORK_DESC + ); + frameworks = new ImmutableMap.Builder() + .put(NET35, ".NET Framework 3.5 compatible") + .put(NET45, ".NET Framework 4.5+ compatible") + .build(); + framework.defaultValue(this.targetFramework); + framework.setEnum(frameworks); + cliOptions.add(framework); + // CLI Switches addSwitch(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG_DESC, @@ -111,6 +134,24 @@ public class CSharpClientCodegen extends AbstractCSharpCodegen { additionalProperties.put("packageCompany", packageCompany); additionalProperties.put("packageCopyright", packageCopyright); + if (additionalProperties.containsKey(CodegenConstants.DOTNET_FRAMEWORK)) { + setTargetFramework((String) additionalProperties.get(CodegenConstants.DOTNET_FRAMEWORK)); + } + + if (NET35.equals(this.targetFramework)) { + setTargetFrameworkNuget("net35"); + setSupportsAsync(Boolean.FALSE); + if(additionalProperties.containsKey("supportsAsync")){ + additionalProperties.remove("supportsAsync"); + } + } else { + setTargetFrameworkNuget("net45"); + setSupportsAsync(Boolean.TRUE); + additionalProperties.put("supportsAsync", this.supportsAsync); + } + + additionalProperties.put("targetFrameworkNuget", this.targetFrameworkNuget); + if (additionalProperties.containsKey(CodegenConstants.OPTIONAL_PROJECT_FILE)) { setOptionalProjectFileFlag(Boolean.valueOf( additionalProperties.get(CodegenConstants.OPTIONAL_PROJECT_FILE).toString())); @@ -141,7 +182,7 @@ public class CSharpClientCodegen extends AbstractCSharpCodegen { String binRelativePath = "..\\"; for (int i = 0; i < packageDepth; i = i + 1) binRelativePath += "..\\"; - binRelativePath += "bin\\"; + binRelativePath += "vendor\\"; additionalProperties.put("binRelativePath", binRelativePath); supportingFiles.add(new SupportingFile("Configuration.mustache", @@ -153,8 +194,6 @@ public class CSharpClientCodegen extends AbstractCSharpCodegen { supportingFiles.add(new SupportingFile("ApiResponse.mustache", clientPackageDir, "ApiResponse.cs")); - supportingFiles.add(new SupportingFile("Newtonsoft.Json.dll", "bin", "Newtonsoft.Json.dll")); - supportingFiles.add(new SupportingFile("RestSharp.dll", "bin", "RestSharp.dll")); supportingFiles.add(new SupportingFile("compile.mustache", "", "compile.bat")); supportingFiles.add(new SupportingFile("compile-mono.sh.mustache", "", "compile-mono.sh")); supportingFiles.add(new SupportingFile("packages.config.mustache", "vendor" + java.io.File.separator, "packages.config")); @@ -222,4 +261,20 @@ public class CSharpClientCodegen extends AbstractCSharpCodegen { this.packageGuid = packageGuid; } + public void setTargetFramework(String dotnetFramework) { + if(!frameworks.containsKey(dotnetFramework)){ + LOGGER.warn("Invalid .NET framework version, defaulting to " + this.targetFramework); + } else { + this.targetFramework = dotnetFramework; + } + LOGGER.info("Generating code for .NET Framework " + this.targetFramework); + } + + public void setTargetFrameworkNuget(String targetFrameworkNuget) { + this.targetFrameworkNuget = targetFrameworkNuget; + } + + public void setSupportsAsync(Boolean supportsAsync){ + this.supportsAsync = supportsAsync; + } } diff --git a/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache index 4fabfa4667b..60b573e1a6c 100644 --- a/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache +++ b/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache @@ -146,7 +146,7 @@ namespace {{packageName}}.Client var response = RestClient.Execute(request); return (Object) response; } - + {{#supportsAsync}} /// /// Makes the asynchronous HTTP request. /// @@ -171,7 +171,7 @@ namespace {{packageName}}.Client pathParams, contentType); var response = await RestClient.ExecuteTaskAsync(request); return (Object)response; - } + }{{/supportsAsync}} /// /// Escape string (url-encoded). @@ -367,7 +367,7 @@ namespace {{packageName}}.Client /// Object to be casted /// Target type /// Casted object - public static dynamic ConvertType(dynamic source, Type dest) + {{#supportsAsync}}public static dynamic ConvertType(dynamic source, Type dest){{/supportsAsync}}{{^supportsAsync}}public static object ConvertType(T source, Type dest) where T : class{{/supportsAsync}} { return Convert.ChangeType(source, dest); } diff --git a/modules/swagger-codegen/src/main/resources/csharp/ApiException.mustache b/modules/swagger-codegen/src/main/resources/csharp/ApiException.mustache index 09dbd0dce50..8e56fb31f43 100644 --- a/modules/swagger-codegen/src/main/resources/csharp/ApiException.mustache +++ b/modules/swagger-codegen/src/main/resources/csharp/ApiException.mustache @@ -17,7 +17,7 @@ namespace {{packageName}}.Client /// Gets or sets the error content (body json object) /// /// The error content (Http response body). - public dynamic ErrorContent { get; private set; } + public {{#supportsAsync}}dynamic{{/supportsAsync}}{{^supportsAsync}}object{{/supportsAsync}} ErrorContent { get; private set; } /// /// Initializes a new instance of the class. @@ -40,7 +40,7 @@ namespace {{packageName}}.Client /// HTTP status code. /// Error message. /// Error content. - public ApiException(int errorCode, string message, dynamic errorContent = null) : base(message) + public ApiException(int errorCode, string message, {{#supportsAsync}}dynamic{{/supportsAsync}}{{^supportsAsync}}object{{/supportsAsync}} errorContent = null) : base(message) { this.ErrorCode = errorCode; this.ErrorContent = errorContent; diff --git a/modules/swagger-codegen/src/main/resources/csharp/AssemblyInfo.mustache b/modules/swagger-codegen/src/main/resources/csharp/AssemblyInfo.mustache index 8a19fd01393..bf80d7d4568 100644 --- a/modules/swagger-codegen/src/main/resources/csharp/AssemblyInfo.mustache +++ b/modules/swagger-codegen/src/main/resources/csharp/AssemblyInfo.mustache @@ -1,6 +1,5 @@ using System.Reflection; using System.Runtime.InteropServices; -using System.Windows; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information diff --git a/modules/swagger-codegen/src/main/resources/csharp/Newtonsoft.Json.dll b/modules/swagger-codegen/src/main/resources/csharp/Newtonsoft.Json.dll deleted file mode 100644 index ae725c4b598ad5c413b2a1661da5cc2946677493..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 510976 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 z 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

t-8Y{6EaAiSCDwBF1)yg(w7X2~{EIt*%F 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

^;eQmiSG2E5p7d;Z9|sAQjxh_q!G4 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 {{packageTitle}} {{packageTitle}} - v4.5 + {{targetFramework}} 512 @@ -41,10 +41,10 @@ False - {{binRelativePath}}Newtonsoft.Json.dll + {{binRelativePath}}/Newtonsoft.Json.8.0.2/lib/{{targetFrameworkNuget}}/Newtonsoft.Json.dll - {{binRelativePath}}RestSharp.dll + {{binRelativePath}}/RestSharp.105.2.3/lib/{{targetFrameworkNuget}}/RestSharp.dll diff --git a/modules/swagger-codegen/src/main/resources/csharp/RestSharp.dll b/modules/swagger-codegen/src/main/resources/csharp/RestSharp.dll deleted file mode 100644 index a7331ed6e2379bbb0b9680ff82d86ce4cb1b03bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 167936 zcmb@P37lM2mH(^XtA17Ws=Jfw>Qr|Y(j6e-QB~b!k(dMsVHHr>R1Ca^dL`LWH&nI2)+}}NS zJNMjs&t2Yq&phSEoS)0(^87vVL@xILPyO3qzfb-%gZIGb#|CmAEd9%p2YR0IFH4?% z;YIDSOIz^;t+QS*cFtLsToP{{JNvw`)@7HBU3AIV;m18|>;>_;=S}qYhkGYcAAdwH z_lzDt*ZZnNo|C5bc+Oi=?kVSTukdoYz@ew#3q1z?X`Z>G`4@2?)#aYpeBKqC zai4o_QZAJ>$#=>|kTWM*?bbN}mN)Wf1-&lIxFMI@Fwr{i;uuEdHAkK;t{ZmYJ5=7? z|29aj{8Qe%TyO69-k#hm?&!(&82XR@RF~&-PazoLD_%4|mkXl>{Iqai>gS_{&@plh zqdoWuy;cQ0h!*3Rf+b%+#*3fj=YrN!@P+Xhc>OQ=I0Tv|qxtd5(2jt*4%$obnh|7p zMBv7FHE-d(Nkuh39w*eY`bsa_3*M+esQNn3&$rRN#MyFL^vBDsLrAbqs^J#TpF$Dx z_0@TAQbatTcN_r%)>fZh}^0sv)o97X_;r~`}uKqnkv1VAYTi~tBzzz6^u zf(v2<0CnsDBLMnSzzBeW6fgo{P6`+SK$CEB7y&>*M z)MC;Pc#w!5#1s^~ct{UFt~rpvK_Lw43Qx>xofXfI_5luqyec>d>frJ}l;=Mde?A^j z{Jk+c78Hi#G&RMS&ykZPy?k%9ucbJUm-dn5-}c|LZtsMhBJe zWqQodY69|en+EVLHub)qe?;i zprcWmApWGIX~99vD50>l;UIpOqen%5*wM7jApV%6hef~N(R2qv{6R{w;|QW$m^V=h zYK0g@48wffN7=4N2%fRUR8`pD{%>Ng=JT+`A+ooUuk>2i%Hui2Y00+FCVc!$e&E{=zVWYa@2iB( z0!}I+d@SjDX-O`P;F1(GbdBn!JuvTwGCeWcfyDI)!qOK){2Jwem@=}NDk^!i3K2zU{D>X3>-nDv~ij;r<{4?<^Gae zv$Cg;GJwCJXa74>`ujcm4|)k+_Lm>v8;wn&ChOa8j6Q|+oX>c}kZ=FG8~jSo}G+gMq)&dV_2U^aukdW>`=9l6ug(8;{{v!`4#`DnTvreK9O|R)Xk6o-qOq zm-*9-Yfivx0Neb8GlC3{e+E`7`_uHNj%lr!tQG_rZnY3m;f=mxypHhILgTo>LWG`$ z{e|I;S8w9dS7-n#y0S@h2NA{iecJ~H z3p;9bK?_~gx!#3Nr&nWp&s^2ht+`YGm>ZD57dxv9W6TUh3@V22yeuqxVqryOIH;eP zZ~ZHI@|5RbI5Fo|dw#2@CwFPIK`fgRUN7H5`j`6Adh#>1P|-b!CCR|<G<7hrxGU@%F!7H%(i(x~vUpe{X8mw4~J z5~1{DQpwa8w4cRe3vJBH?Fk-s$`%I0CtJrxld>sGUC}Ao$LguxjpV!qF20p6zUyg7 z3+r1t%4ag3t%oU9L;aFeG*u#jvQTUWpqdT*V63(td6{h!Kn>NI|= z{!fRX{{7rXiO8fh1lIMxmgj~1t+|083TQD7yN5Tah^Efq2faI!N8>qEwz((e z+&XoZ{Jcp$E|U!J*3T3sgit-E=-8zdiWjX|jaFC^o<%Uc(V}$@7xN7lt-Q^P&V}76 z!g)|A0=Y|d;r{zOx}eBAx}Z83h0p1NQrT4(T+B=WClz$(YPXzqRl6k4?9NH0GhZ2S zb$q@h;7wh?)AA=>Y?A&Q)o+YY!*XMw5MLxdKZrN+EVxna-?oQ^W>9b)qv^Oukrpgb z)}4JG@kI42e*ApJQ|oKg3dOCV7ZB0KAn^uq*xF5*0c3;(vu8y>%EbPa)?1zzrcTON_xbz5!At$zbP7 zwqKFypm`F~I*?Cbismr~^4()fsvBNzIQO*Eojss_nTDBT{Hb`?ldHt0CXZ-EYhM+n z1&s;5+zaYKp|wg-8_4Q;AHvdsRJ^5Ob1Y~*70(FyhU0UB*3&zVd?R10k1z$XHmkNh zL>OD$@N7v#^?sQpV~ZP1H=@fG%fjS|p1cV6^cDPA{LCAM(N2G1^kSeI^P6;JTJrkNCz+qotJ$+RB^JLH>TXiqBMfB|1?6wwr}`s!$!2dz$y}K{uX4}!%M$k?~ZQRO^5e%w~p$;%&8B^|v-aDupbwLtpuawCMLhYRbMgS~L0V4pY z7#FV*0Q;nX5!PHaD zU8ILuS7}oz;miSKD7r-yV{YEGeC8mig|9{cJ?Km81!&lvh2hoMPb-R|+f+w_a(_k=9N2oZot*Jr}gzYR{R23AEtVY9QgX(huS{kd>eo z-O8i=MrCUqF#T(gdmj0wEmlV7y7p1)n^xwR_78f|Ryb?r#xgpxw-fWU0@aL+Z^J8o zlYVaJ=XUGX1G?^SY!8dgpcK6s^s%7*79RD)E)R1Xj&WnrM05vuME@lFrAK3%##q|? zSwK?bw^}&qB>B&cnctOQZn8t37EVht1xA|Uw2E8U8sCY(8(++i%zQ5yN7CNz5pU@v zqRO}aKxzC4)1@&!FsCQFOSw6Pq#K3QH3KvyUe}KNoSsWmzh_yW*xKUdE;R;^Zt-k& zi+3xQkT?TNga8^Z77z~gr))1#*@D(f2x#M8gjJ1B){jgUdg!w+jgAMa-{2)P#VxpE zYh}r7(Ew|2+q>tQ(LJO+KIoWyH?b5{--QWz`?*Q-L~E;f?faPg)??8-C-XZ& zhTHtEj9u|_{FVjNhorn$i}zkqnGs}ogr(XDrVmY7=s1%(r69v?PKjlsy8S-+ppjR+ zq3Ay1X_i|v2*)jsJA0$WZpEd^G?7Uj6WO=JcxR<|*o)ucsOUrzDYxDPV`j$tPQ0&2 zUOnlI7n?zWTlc_e!(tOeT%*VD=xOxS`V;^AJN|Q=|JcWSayesR)>=pni*byVX2JBJ z(Nj!NPpgz+;&6iyWmJEC8c+JKjvXbN!KuNsm482aE)NZ+fd*-38AbBy%SY6gL;E|) zrwNuaX-#-FKR*;*1%G{l?zT6f>t2nO6Cmrz^$rXMtdr1T|C-H#$(+Z-_h;OG=E0^pbwFam&v=7Jaj z@Qf5N0^pe`U<3epbwP{(I4%W@0HCEh4kG|gNC6`NP)x^R1i-UWzz6{9*KrsDfT8RF zBLJA>Ilu@2)WiWs0BlSFBLGfL0VC4B506t)4#`G(TRjHS)P$M7JD-GO&ZPNAr)q3FUk7=fx$f zH=q~!I1exW1iwWuMsEXaYyEAys6dNTe*9LbO0O4xif8<`#6e36;%gI!;)u}4Abw4P zD8Be^bClwn>>0$bwr3%Jl|8M43YLxs%UTP3Ojc|(OXfp74b?DZjX8dO;`ITZ>IjWb zd5!Nihnl)9v!VDaxalW)bBpQsB9qA@K(jLO;xFJfQ$95LlubT;UcOLt@^J&NlMnss ztbEuvQJP+?Y*}ORL$E=uf z%&IJoon#I&tFlFQvaFpKOHO6k`Efc6+ir9gbXHAq%xWf%+3F}(3zY(D%3efI?r5I+ z=X$W{I4T0W>u{vmCZF2KQQlMhhAv#Or}$SocpC3nE?VMM-;nYR<^QkoIY)9tkZuY5Pa!VJ6_9qICB-A+pAN>>ZqZihj$Oiq_NEHAMLrC!}E>LNQV zTa86fH_J!6SspMJL9;A@E#37u21>SYSN01r25DI8tYVg!Kqjl0nD2AZRd&1p71Pf+VDyTRR8$Uh?gT`KQ?sgQq22u=nMovp;wk8wMW-sDy$thPX<`IVm=Lrx9p-8nXA^{3>o`RcivudYPsQ6C&w)wW|< zzsH;0gpoA;e12>?_@5FUIuOnXGCb-}LY#wNCj`B(3-RYp2tm{OaUqUPSB=^qCcY`9 zqkXv_!p~~qc15OTLnG4i9n0$EZDiTjYeK6q+jn>#D5RR4G4BYsUyTpIu0r z`;n$Am{lr8)?mhdg3GSy;A;4m!#5oI(HyEmyAH$bI`p%xB$1RfaE52hZae%qXcpLh zsO|7{+{Nb3^N3@G%ICT~b}$vvPW!Ni>|9pC(&T?tW>-7Vx1OcL@@Z0<^`gHBQ9+A~ zlQa)yJe8?VxX*SwK9}KR8qgid!x>LT!mjlGDa-mrIVIiirP6&&1iG&_VLm@fi64k? zvYa?Dn9Xe({!ARRnn zeib&uL4U`*A^b~qTQYTiwuaFDG7RB1c}D*N+5QSYdij~UdS5LTqHF`4)=Kn49? zq15enMv}m&5@>YCf>E1E5Bqk>Y@GXKSbIGeO{I5pAmNU67~S5o+VB3Vr$~7)9=021 zv%fHKuJ{oO)}&RNU;K4kb!l__4N=65{lC5^mm@yvTvDKW`X-NQ*67^W!De94eiUd% zkl|4UNk)U}Hwy8$@T&H$VTi~L_C?>u#fg*e@aQjYqdW3UF>3L5#l~coK4e9$lCN#u zEKi+-iF-()+S@1=V;Y^#s`a{Ep=y7nzcxB?J4dIkmPa99Ee^TK$4M2=sBQJ4g#?XQ z5DqHEr8^2LY@7BPMpg1wEpx7He`Xi-Tf-->>aP?zV`X)csHnPyd#DU>?ikeK)5F@8H+s=aKf_9k1Z=^ntIxeH$D z_EN9%T%s)LTB3d?QS16CS3dVw%C%;;Txv~}>)%LZdNNg%siE92k89*>rkqzI;lvKJaawzF$y`j3(jM~<@J^nT% z(alxPH;Z{|pm;i=4CMVJl^G;W;NMDA13r!2n#Glds&np+s2J4Rzk{*v?<_s`#{F%S zq>Foe(BF1V25DYIFH6L(mz+mhawRGLo_Na*^){A)SK(9MIZDik>y-#;Wn*5eHvkIJ zABf|6`M_{(HtFN@m%Rd{Ihem&&x@l!idRgWty{+oBK{A6=5R1}FV&G`;!m?Y3G$yE z#NT#ZHid<*F2;*N`_FJSdZ+(O%;F+DwJh@<0S)jk_%{p1>*ZGuqW>1V(MhGB<0`$s zv~&9{Y2Q_2O1-r0z-+|JQaw_7>rH#XSwc?syuvzwKFR7o2t* z+g52n(P+JMJVS2097cHSI&B+M#`RM+1}(EK<(JT2%?dGsfp{tfi~yKU0V4ojngT{- zhw2FxLhYwFr?L6~rQKzJln3+9{$M3E!RdZ9Q2h@NM(uqF@APr0!6Obecr#Kc1bhfMlJ<*w^irecbcv7C7-om)qp7^$kxXvu&cXW!WggcrM_IDTHq z`v0{)36+weuUdl1X;D-qU-24oho$Ios>_B#te3F4FwaSRtE3^As(l`7u6>nq^c1*@ zex>XTlQnN=n0ARYHo+5`#|2m)xkd5QbvOi^j=fq=6}6=`|J`qV_H&Q6^khs_f*aGLZ0o zhf%b&^T4$@3FL;a>KypzB>ZnT{+)~gF%%O9y4n9Vy2-?svl@B>10V*k}-{E zHds}Qjrko0D;XOLsaIDzW0p>KTx(vKgsjf3%r)7s`>!69bZ#^vfnsM?DmLJ`yng>N zJUJ6TI9Q4}rxr9>NvRAvzs3lm7;kqI>K;Osb{;UJY@Ryk{{FcDMjy|mLl=5;rPn#Z2?_o$4n zX69PVaAi1NfIymc2#k&}V)SZMM=HaWk*b~4%&*kahEq%A+3p^et&3;gm!#!- z_v!+&yC7jdJSoWF!mhemn0W4!Z|<#@?=rTivIwiSR9O_SrV^`r5X&Bpu`l8^SFU|}$83B-$4TQ_nS2u~eeO)-H9LD+_vTH$Ssct_?aXs;?i}=F19=>(2JH)26s#6_rOvG6 zK8PP$R}?npKrbOo3UC7AalEX5EVI(Ivr1r2g?$y4ALKEmOckRM^kICgQm{N)AJ(Nr z{Va4@poA|<_>%U2vkKSM-RBuPGW<*OF;lIu5{%EO6m|p`YI$>S08MKpEMC5F8F*Uz zB9)R+rBax>os5atZI-4asU+Io9l@qFN*A3M6bq)riMYl`y+XdXE01R3EFJfj<;@OR z#txHo=@@jvY`R$`a`s>;A2Y!ZIRKK(D&{$WsYRy;4;yoR6TECe7p=3`{M^%s_Yl=% z=r=debWHinh4Fc!*CM{YVlyh5c@j283o&!TusOG2ZFaoKfl#>%1(yd~Wr?Un>^MBRmLt!G-ZbHvt;nx2m}EbW`V zDz&i=By(-XuW&|?;dKAj942{RLX_n~8`GbjEvZX0g!ThT026*b?#Mmv^6QfO zE*w)XBSm7GzB(=5`cCl#8E(ak*nJIYyRphBQ&y+98|q7SCQJH#IQgxGz0qRua-q4< znSo2k^ULy$UMn9fFR?Gh2%6O{#b^IpcDW{My^+j8NscnGj7;-lnxOYJ@@hZ1BS>RR zJ)%1w+GgZuCS587H8u^Py`aW9&Y1Z|xU{df{O1Mr&zWU zv!fA=Kc4m#^nMdEo4ymzrG1jD<>d^d0W>eX}?3ozN(xXwL{XIK;y4QmGE4N-ku9B+_ zZn!99%3CuftNXQ;c|TZLZoNVbOy$BY`P#}LANVJ)D7S8z1>4Ns!m^*=*ypo9?3HdR z)S~B*k<#$S{!($}Z=5pP8P==mPoH7wvYh1#Fdo=B#(GVMmYcK`iLS3Wx@=;&IJ)P= zU~%-oiT>i~`iWw3>@8$_MSeJJxK|Vtq5X59nXer^RW?d(BvWq3*O3RxvV>t@4--=S} zj~z}{ZmY$?;`AM8bwszG99}K8{?cJ-l(f7{uN^Mqq~=DM9F^XKf3@R@C)~QH)yHSa z9lDDi?7luQA7<+#RDJYPAFFn$f^Y9y1^F6_)~9(apPKwhp3sZZL@omhvlaPl|(H_vY^K>=nk{mB$-hW^dZhTa_wH@|ucM znZBCdRw2)5POVy4vxt~Hru3HiVrhKu3M#p3E*l9h2gChq{y?=9Qumsl;xeA~!~K<@ zSqld9J68`;C#^d<|67Y0cDMsznTvDHTZyAIyy_U@IbhY^wf+ouC#k>%ThoTygErPxMRO?MDQy8(@0p^HwReGZlw)Le#F92Px|23si&C&-AuoA-%}J;eHKJ@>&Su3Pym5SpGC5SqkIp>>*P*z0Cv6yp=iod{o`ZOXc#bYV zIq{-djaLA!m_RzC8&~xXqpeFvo}}hxrO0a&>Q0IWKlVRQJQ2i)lR|C9oJ?IchEaj) z?h0m-ufN9|T{5w^HyTZhdZYVJEbvC_6Z5>$@rk+K=)^?X8$Dwp@J9EsJ1u0NV|e6_ zQ#&0)dbt(ncx8WdX?z4J`=giHvoP9sPUug+l@1|z?IR9ae9q{cGj;|S><-+OukMYG ztzgV~HhR%y*mF?|T~+c&8y55mKF1q9Wd+n(EBV>7Vq?C!k2m_# z6?^WSReyAOl6CiN6jKgw!8v`d48^1j9y!|ys&_KuZ1k5Qk>e$s(IrZFdc}#h4Lv7k zdg7?_VFyntAm%0J($H-3;RSCJ6zZ&v)GBkK9$AJ6!z&Xc8RdhWU-eBdnk*&LYORu zE}gtZ*ypm?9l}1J#oi_C;VkxmurFk>hlOdErz?$b2>W6d`;jn>D_wlQ5%$kn?9al! zoW+6?7#m#OVTXi$C5w#-`)U@e3)_~(RtnQl*OiwI!XC+D#|ry;7CTkgH?r7;!oHcs zE*JJ_7Ml_Ftt@uEuy1Fvt-`*O#qJaK-7NNDVc*MQ4+(oLi+x$x_p{h{g>BDbKNI$Y zEcSb0k7qHabC-_&FpCWc`%xBKAneCkj92$A9s5ZZTPf_PS!}(qpJlOQg#A2=Z4~y4 zEOx%If6Zc>h5cI=n-Qkf>MlLFPS~%q*sa2ToyG1E_M0sBeqsNf#U2#)+bs4uVZX~_ zj|gLbqB}2-3;RPB`;9R6$-DXfB8;u_Zmd`a`%@Mh6!xE4Y)sgnv)F{N|H@(q3j0eI zJ4V=lXR(un{WXi7DeQl;*d@YtWU(#6WG{8q$JN4Ex9!Gm5O$NF!L}M-7Q0K>YqQw> z!d{of9u)TaEcRt#w`8$Lg}ot*Z5MWH7W+40Z_HwU6t*>saYX0RvD>oPfUq}Zu_0l% zXR!ss-kin8guNw;Ef;o27F#Xstyyfnu(xHgV}#w6#ZDA5tJun%Ri&k6f*7W;~@k7Th&g*}kP zekAOpS?pKBK9?X7xuL*_GV#^WU+S$ zdo+u^U)Y{w86A31*s?74C1ESG*rUQ$Ww9R#Tc5>#Bkb@j_7`CzOET#e2f!*>Y)IIm zEVfwKo>{CeZ2v5_PS}lE>~LW>WwB$0-JHcX3VUr9J6qW6ve?DKK9t3-5VkFgT_x;m zS?qdYk7Ti1gnd1W-68B7S?nFc^xA$`+kZfqm&G0u=4Y|52xWU=do9hk*lC+vtU_GV#6WwCb%J2Q*jFYK%= z_MotHv)Dtz&dXx|BtUU7f{#B%d0FgD!p_fP_koS>+0~%mFJM_0@G$`gb^)Iju)Yg;7+~zgo=lz|5vB#w zF23!;&dg%J5_VP=`-`wEvRJ+X_OO?UZ$Q{%S!{tYFWc|$EzHki6T(Va>_B0CS?ow* z{aNf-VFOw0Bw=&1*y+NmS!|QAp)7W}u#qfwm9Y6)>;_>Ave;H(i?Y}~!uH5w?-#Z> zi+xhqSQh)Tuq9dSyTX=dv0n&Vo5lVlY+V-14}!fb#X1|6m*~##0sPuWvrM;z?O60D zh>yV`9yvIKVC#(0>2jRJ#|i(spJ=mrwKZ;aY1x80_ZEwn_x-&YkqVZE-~=N!EuGrr4DEuZZV7) z@6x_3?}&K!n&llSjW$+k^E3%tER@n{S$St?Y*TRX;T#1m#K%*VYVT0l=NP6AWV#*B zBb`LF741josCL*J^7NiX?pcx-8!pRN^0Rh%FVxBPfEDZhVD$XuMW~ZU!;K(^2su*7 zA%@IzaqLSR&nAvqnD;l9{l3P0uXs~LpAqzz*jSoZ4;GwV+L*i+xAMn224iWjs7MSS%`C8c!wPiRh8^Jk9f{^OIBt)p?|$g4_CyzuqfR?N zUyiHHSG|K?C~({6H2p<1q3B#OxIKwm5!`cU>nYt*NBrU6*jD$0e0E#iRZ6m}emJ}8 zDg&jYkjP{i^wL#hrQ*oR`z`S3Dn=rSPkW+VBwp$LS~Xu9+1Ss{nGqe1RI^1Lz4v%7%JUDeRppm$w}P8_VBRbO_1O4YC+?@&eO zT2uHFa^XEda-KN+vQ zJG=}&vn>i6%F62J&PJBcvoe%hO%1zPl?=Nyvo#%;D@$|8J%_o&zvjlLgI5J@&YN(M zssqg4|Ja@+5$?F;GAanyKJ&Tnklv|E&xxz2?nN!}+5IazQ^WTD`{0>Z&Cjd$7THT) zp^kZoQw%Q6gH~~fLH$Z&u!AjI1<5vYIX!PtSotMh6lBlZod+5{cvW7lKr!*6VxdUr zc>%YD6i*&@`|Z9N6KpQ`*7ob0*XMFWjI?UPF|6vuLx#1;rS=>_;M`AGoVTi{UM#FX zieAo*JAoZrInBx$BTx?aB*(R^-%l=pm0Bz+w2nd0#nM*ZeA^mb470oW)%uNK<>Q59 zn|q+J)F?8nqYKHEohXb|z$M=7yS_Td6<#*PnPYnchAWf*wx5lW2O#g$$!mkJDzJJV zj{9DN6U;wT#;HCQ>N)&0%&DOzM9jsW+ZYRzchNS2jDN9auV0@G?e3~PMO1pw>mJ{B z-o42?IfZDignE;2g>=BM?wb#zQ6245o4SC!oIzgNmvZb+cNK`0yP*fqM zYTdeJXC%6wMCNjz@{V~M2<}A}5^tNKI}Eq`%eLbYZNkyqbFe450=8DG4M)!h8|=aJ zVhDF{Y~5>ZC3g27WWU$C4~HM!pfY%^zjk~^J-aS{HrLA5+@V=sKYF#oxbviXdw$^1 zoWBz1hrQMs_}nGDixUT9X4vE^UnkAvXc18oUT3y0MHc5Fi^X=!sxC}DkSKIv>IQp` zv<|oD{MI%0T+q7To(o&wwdbOiH&6U~v{u`bS(INJ?1?T>vR;A7lU$7I=F(*a^T=rl z9WLg6NZRL<_VlHAhklzumWJxZRCBoYVLYMR(Bvwn%9$p`m+=^mFXuOY5kC=w7%#35 z_UGPNzKi==b#$+-K5%+9rSgINMF}=wlvY-e(qW|{hga* z3TZmc+pbrT6>k5x`Kt~T)<(x}XGCP)h}3wCetB4^ZH-<>?9H>V5|87?5Nk@c6&rMU zNXcEwEJM~YVe94Nmy#{4RX29$^-dV3U!hp(y?!(G1nZR`s6%qW`8&DI?<$pqq-w*~ zeDm?k0C2nbqZ#tUjUj$?BRPp)tHN&b5?=R;M>pe2uXV9RY2x{$*Ww#8m$vQ`!fDm8 z^}($3Q90Gb&9|QN|0v5p>->%QS0PQuzq0jb0ME|F zU@_6L_mP-7_Z9pxIk0a-+`;q9{Amk&J^|M8M^~47C4V30Z_NYza8thJU{VQM_qdKR zG{>g^1Wdh+AMXDb3qyLs>-@Y)muIUpjGI5IJIZ5u^Rz!ZweRzz?9i> z7yU=ZiG2kgh?1QSNm308>z9`4PN_C3bXpMj`U0ny&=M}w4F-8AD`0XRy zro+(jTj(_2{}N7-^bU+H)EnNB8{b!?3nV*cp-x7Le1hnyaP!Vw zq#|#hTV__E4CkXXtM{+Rn>b`RevN@o$Bkxtomd#zk&2GQTlyD z{q1R09^-F*N&&ftWJ+P2u*+PrFJTu<*sl73PFNo9aonu!fbb@v1lZ9_q)7_Uyz_uWf>VuH4uG-0`-y7-RT^tPNU% zg=j^GcVozXvwSKvfN;L8)6vr;Ghy;3?5Dclgk=neKk#-0$MbA6TyfKmO#xj5(W>s) zDUb9{H#r>fN)564ev#`8sJHjJy1ZX?Y4xVE{}di<<4XHV)tNOoF{r^Ae~e)hZeC8r zT&>no&gLGb!+k}kpv7_l{kMpvR8m*Wv#@`sS}l2{Xf65W1so^oVP4UfsB5Xj-P>RN z9=Jptt>LHp?!BE_Tqnitdz14W!BwdixYo*Lt=!N$+g{br^e}1kSS5ejo1A>~X3F#K zb8YkuZ`?OBUx@7dah7&2dkPUVGw-R_ z$^oyN_1NoXd@}4bD+8b3N!~FF;?tD~E5UlkjHtQ;%hg*YS54kK(>rXe?dDq2%h^iM zwBe0}P-;Elc70dP^&Q@h1;u!4>eC$Pa)b>$x951tlQG9#g!U#&)b&xcfrVU_L42vM z-0V%hU+s1BebSg{9oclWH~9f6kJT}GQ=k2Eo^A3t)YpC)((f#GV=im+RaMoX54(;`QgX4BX{LDTOq?Fg<`z1~iqd6W4+sgmvUXx`R~b#vQy7+jg^ zxg+A-JoRPV&G;8WuoTP~9M&K4;)f{C@B~x$hatxIaMI#vMr%yzikRpxBs zF-%Kl3-tKBpqn%b8uEy^8TQqv>!LA1mA|Jz^VpvU4FZFJj>395dOHu03x3$UP!H!t zA?{`$5r~MfjKK1c&TNr~Trwx{7!orxA`GI$CCefV=EvA0tS(~NhP4=52wziZg%=TH zzJg?O0P{L=KW+U(`(bl!>D2;t)8V#BR?o|iOA?fkZq=G;naIc zgcpwuJ(^!hBK`}PkEU!N6Tw|Y`P|pi{7ow2*13$M z)1Qa38-Y$B{`SY=oe^Ys{2)%oKry$(%({zXKC#0r$nb7vE(y7G`U@%ZvpURz4DV*X zMa=({GC#Y+EXeR~<~v|!U_UVBGQawvt#^U9e#?)Wzq|FTr%~R^kW1^RVLnPur=ca? znz7v(u;_ISvD_Jqc=1(6%=hA}A?%)ie}sjrV1d~hciMMEk~0G*5GPHK`@r_EaFyF;qh^92BI;nNa{G<$q+b7rE zy||1OxfhY97cC-S{0VBM+&I1ve-a|8AMWs%*QY?5qpr#l=+i(9W3Q6;XP_Hox=PMAuu2g=P|4g?k&|q+EWqzGWT`8g4L*| zx>%g5AtT*pOJZhztlP{?mYzw|*&&0uV@`E>(Y;{O6aCxCoa^%=Jl({q?nOIDtU2Ph zE~V<-WXp?IE9t%X!5_1WQ3pA9W@EC)v_43Ccl)bmG27SCwHafV4cKHHf7z-x^W0*( zqj4pX#ylqtO?v{f?agRR3i;#iLUx(y{f#D{&5#f^k(7mQp$hQ~q#tj?hflo9I5#}0 zwJ&$q8Y>C1z0F_to7t6pxh3OHZXP#GteH&f)6e~g7CTAa^VNV$Nxnt`@%xolK7K^> zCmj8C(eH8eH$>kLosYi>iACW@2RN@s<@F&)e@iqsJ}Rnji~hLiVKcb$@pnMh{uQ}7 zGX5@Z-aDrA;_Y+0-EuQsdk;GLX@a$<_~8qW@%I$b**Ksd6Me3uzc2cHM{gH>p`(8w zdXu9c7k#m#e<=DAM+L^OL;O6#YhFL(6ML|@_PpNrn&=wFC_iRk!W zAt}awDE_)}UE4OVQgD}Ma^)G9W+oSC^C@(NVQGQ4k@eMxgYByk{SGhL_aQhM5Py9q@6{- zB7M5QU-Mw*!M7hFy7mp|BZPD<=tsZ7&7QB|?%e^w{eFRs`+tYR4s&18I7+#|p(UUw zb!Z(adRpS6Wu%V7mR(XGEk1R8v})9eK#NAs!TPza89Ba=%TltvxThl<#uUC^o2+Ua zN4jCsn~eX>RiA1yoF%J1(XoW0e|WkwZSi7%j7quuP5 z-=*;H1^+=VasN@odWipk;46`TNB9%AEdUYB)THJUIJBkm22i z!*9j>rIh)k4znP`yO{?T!2HiC^K(1Qf(-9wUL zAj7+vj~DY-Qsz@S%z_N>X5K93ucpk;>o5y4+?dT?JO&v~t3B9i8nat&-_(qFbYRs& z-_0xO7(0t+SPxn}t7ovhVZK{Xqc4|TFiyPe^t!dWe)f&D5LaSt^BFwL9@|5j7H=>2 zaT!*0j7Vvg8$Y!>T^Y-jSK?f_yhr!%=VqkCF_YJDGrdDkdHZ6TZP$Fg%TeCWe7!(q z>HK_PAh%fabFB#+L|j)YuIz#tCm=gxu^<1LWHbZSVoUec=cun11Jiu!OV*|2el?A+ z#}fBd7PrP~Eo#{6%+m3}Wp1@8S@>e8)A-B+nOmQ;^f>F&8L+cvS7KAF&h;PW#zU=z z{v&hg%#8LQnO7$>;=eg#ev&!%-#c&Ce0}GMdo#sE*j$?4s53wQhvwCq18+m?)vHVy z0l?hH0Y;>&Hh4UedKdxl^%O7y;2SAm1i&{_zzBdxQ@{v-Z>4|{0N+jlBLKdW0!9EZ z=(!9U0r0&PFaqGQ6fgqd`zc@q!1fd{0^kQJU_@7`A5T4ufb)kbUHDwCc)pBs z>0HVPU2|ZcP;asv<=h2sKZB>?zO0@Knb`g_jm-#vKc|2Z0RNQ&Mx1V+CFjr~=Z`pO z#;=>Trcqjc0{iCq)#PW}UYZXv)P;WB2lMsjW@VI~(Ez?EeDV^{>99_+!w3kM@304gOul5%EKXB zUTO|PLifhh|LhsTP2MD{z^rw!2F$O|FUc z(ghwKJI-?L;H#3Xu$B0UpGSI~>LV3~CgLyKZy&#%R5Xv+pEO>nH2U#T8cZ~l#vDDo zskuBz!@wN@D|{}E-uTp=5@A>)k*fW&F5O8aP2)PHF%J)=!Md^17}mp^V%=P67`P*t zkITx@8=s~$$e--6LwLT5I6S{MijYyby;-)ii`oRF96@o!P8TwHG$T)^5utTJu^4Vg z^SGmQ0Z}Wy)SfDrbIp}FWzH|ePse*2bvp=r9hPTuEV!07Dos!tX8Rj+V|UD*7Pu3$ z1x=e&`n=P735#F0hN@GVldNWhF-xaxEIEfCkD2RoZ<1xyFdnBgd@>!fn-}@?st$A4 zBOmr(SZCqrSbmE2l~9M8XUkG*F9n-g#!q`6enPgoBc5~_Zi8iC`PBJgKM6~-G1Y)B zy+kpgVwf>udz_zWf}dsVA(ti<7c*~j=bSUftm~3J7y%HZfDr(N6fgqduW81N04Sy$Mxf`q_v%AD^^Y4eC2EZf$rgozrM4BboG`i( z0ekH=B5yX5=};JPjYhx$Rkiay=(HoQ(7^qm-22VCAKS_Qw>!Cu3$x*|6*A#p$bxKF ze8bU;Nk$*FyI#rp@wIaD=^#0idq8>FN0BVWq}by5_SsX%hA2v@D2xCIQ@{v-ataus zu{F;wH=UgN&geBtCLc3p4gHq#rj^97Nq%mUPkbP*)-fdSfM}dPz|KF0o^7o}--peS z!Tjh4IFxydH9m;2%nw~e>&-D6rp~&S*y4lna7^(AkzFiiPrQ!2-auZ}ppNgzArZ}9 zE)vUmd14;9_AYXu0<)9V zjYNhlHipe}ohxS9(0y29{KPKA1%CkJeTtjG&<>7{S6j!Cj0@*%|5U&h zZ(`ODPaNj#`;m!tj#xCYBB`+cw8GxisW3s)`mqX&sFVipQhqddtZzDvtH)vI~^TP}(K^kcqxdy{NsK^niUow%I^0|Gx!h|B%W(Dz36`DE09(Zq z{a#0pie`Q#yeRtZqP=K~=yyVU(Q8FopHOLR7z*2O#Jb>|R>gXTDT&=_A$tzoJkAGu zT^~bppm%F8CPs z1*py{Al1!~%|0*@I+!5;mS`rx#5m&o9TC6VFze0drZRdj98N}pruAcOeVXR$q#4BOjub?&RdykbqovjMuYjK9}0mS*h{;@lf|xol}`}+2y3toRhE2*(^%O z5Q4_h3Od^XeqPxAPG;6e>BB&2(UEK3&$2`g zo3PS8fw`|*q#u8PEW~SY%JDuq^xC2v@0COEEz0q3IrQS991qK(#Q-@zCx;dY8i(u<9tJ!IELgT`8# ztIoBs3ws27?NcbDcGq7io@e8LewFBxM9+^m>JhW~$G2RZ`hGIIx9oQ5UGpp06$&(a z9ZKmB;=`1}CH$z9E5&Ci-e)OyIL?vdIf>&uIi8z1E|BBo#Bq@v&r2N7m*cd=@d7!{ zNF1>oXC;mo%5hHOXv=Y4;;#d!(6eRJ5T!xl(8^|3#G@l*KuUnT0~Igoqm5l)`kasQ#Z4iS%w zVCy{*tSuVW50yI~aaClH0q*Jmo1*8DCB1nOwog;$PUmMvhDFC@<-_6I=#?>0@pATN zKF72ycdPoT+c2QCxG5H7i%l(yN^3pw4^Z*$Sk3_S<1;N5&C?af8x;qQ7Hd5}bv93n zgNEzY<>EEyTm4Xfc2P0`W|zPcV5GBbnE(rR1{UrNEZP~EzcVnKtd-@^S%q+gJCx1y zWD6n%W|K{V%qE)vv&kmFY_bOMF7>&TKc>S9IWp|W>^U@0z;!&@=ga2+31t_y10CBz zPr`OpC%-W>Bt?4glX9npNx3&XDR)}Zl>3k;pL0}AC6Cb zeW#{UcUn=YyHm7;zmxgI-N|0!?qncwr>YVEP+H!VUgGYgm$*CWCGJjoiMx|t;_jqp z?rYriaKWl_>q;#D_Jydy7BAjT+P;mPopyF?I>CH|2DvaE)8vzOrackEKC6-02ZZy5df@tx;TvB zAPi+Wjk4$;ugZ?#oi3ugcws*Jlf;7+n0O50fpIzO|7ZE%L(9LI2*=s*!43%Syxn`gJ$nyS8&dZ$_!J#SgfSG_YoJ(pZ#H~KaHn+Z zS{Vs<2yyR+7NftaoJUgEy?k8oHhdf+J!7{i_h!?xd%>k=N&`Jp1Z*wdsRw&pcj@VZ zA?bc3>FZEs=;1OeTNF=J#jmf(`ke}#%k9Bm<4`a9C3*1U7*Ez|<%lnbE;m+r z(XVmk<2Fu5ci7~Su=UwJ4x#<>iea!I3gFjfk3rG@z*;}it3^YKCJPSl3LfgEVBQ5? z?77=9B$Itvptysw`1UDsYT=tG0^i;()~cm7Y)SALm`aHcyWen8bC{pnih<;7n$eMz zwUMv!0p9-7+OJdcV*DM#R`Yy^HpXDJS3TE$3=ftFF2}tVnTf`J)%O&8H`8zQ=u|2n zW7%9`4R<4z+1!M^{%hhH=gUJn3LcJED_vj8bhpYJk%W$(Mkb~kX@l7pd9+zl3TFfv z9vuaTEy7g`twnp}F0HuB2)LuC>fF7XufpuI6?$HBbDt$;wXc`BmhpX^jr!3K#*fIt7dXcxnn50k9?oi~v}h z0!9F=O93MQ_DcaH01ik2BLEIe0V4or5Rzrx2+jK#vvPN$>+LJ?(i-#rls3J8X_e^Y z{-qV7wTuCe=Jx6ROGk^=A_n-=MJIPLX@w!Ze@PNd?_YYF=;Z#TgGDFzFC8K}xqoS` z=;Z#T14P^XOJ2O6Xa+)-yHS@3h_2`4`n0r0P}+l2zzBd1DPRP^At_)4z@aH%1i)b_ zUz6n1i;f$zzBe&Qosm+qf@{LfMZg?2!N-jfDvh9NgIOg7e`ki z5V!dpT`k$rl&%ouN7Hhe4Z*x3_cqn{RaW12xs4Z1;jcAAjFGR=_}X9LhmFdY0k>by zPhUabWW5>&w<#vAe@2=kBLJS60!9EFn*v4v9G3z{034qJMv&i^lLSrw1mXDG^O&SZ zuubylMiphTAAQfB-sFjC6h;u{St(!yz_U}p2!Q9LfDt!)(LbxhsYP!jO1?Gr#1k)# zZWC$W@{Hb)By>_5$_S!)ZVDIyurURU05~}Xi~u+#1&mPpdj|D!7xm#qHOEiroWa}1u?WUM|>bMbWs~*@bKXt#}5tvQ^MDJAo&rf^R=w6&& zYu1N|wN6D7$=xlzxJG*6)S%3ZH%O+h5FL#H&|hi}mP&D&&0_o}V(Mc@;~r&aD>-Ph zK8@|-U$%syeeHe3Y_?Xl*WWB8CW)|GZnRhvKUAc)52SATuAC*I#r)UthhZ8`Ncx9kqx0+7qyqdK^RvV}qGF06>;Ejq_x(1N*lIqA}LpDQ&YtxD|h>2qmwHWhpq z!P>VH!Hgioqo>REJul^Ww>aJ?4nc-TG|Ksha&2ZXdIj%eH@iu^Dm^XX4cMZl@_% z%ayWg&YX!z=MsfYNawv6|GLCS6}(V*SV_c;boW%^MG+67H1)j-yK3q7guLR$Q0 zxjrLTuj?P)3GMoaer6&|Ivqr{v6(G8>mUXy{avkoHQPbfU9hF(x(l|5ngi?t%}StD znPZ|v3=Y=zSy#DSnJQkTQWW< zx7ZosFOudvNYlIQ#foCcyIW6vsoA1ERJhM1 zetPx~Vv8utZ*$?UmESz?Zauk9Fz-C?a-I(*o_bb$2Ya38-R9}&d!VbqV9! zdXY+UV`U?^^mw<%wJymChbl;j0m5ZWd#ic_)LeQ?xy$PVa?OTgLv)t&Lm5uCN4q&c zBIhO-=bWDCC*+lfvg{I1lVe*ptbZxPXZdL^%3_K>iNH?XXb{WDv^YchW2t77;%UD+WL3|Jkxk|B`Ws1QHwda_*0uVh=Tips!OF0@QwCpebu+^9 zP4Dh;V0?A3tw@}+Bg6RK#?y@q2HQq6q3kpCv`sd|*xe56SLw{``iUNzY3(~Iwy_@tSwkX2*2!42Jjf&CT zmEYo-++8V>yDO`;_Wdl&G8dox4#<>#Y@YjeP}--b^JKY_l}AC!1+Fo6gUTkJ$Me^? zkjo`4Iu}R$AgUIBl!T|gr$mO$v#}rdQpz2FOg`V05AVwHn0i$7h;a>v+m|K*5^l4k zKj%g7BR{opJ9iJi2kJ3*$6TJ|ue~-`;K5yAlZq(4Q;~Uw-tZ)?PToUw+*W=W33K|Z zD>_B|SVzA{a^8Y$d|Ns;wUu#JtW%OIresohE1Xu2tdPq|ShlN|tB{cDgZmm2Nhd-E z*S|fvCB4X~9On8ZXFGHFBJ*K++OC0Jy6rJiiXNhpXRd&n)=!(Y*>L8?P@|_A*UXFL zrJvC~NB6wlQKycc>Zrw|XD3kK==lj1j$V>b{iCgfDvfTw-Q`<5>88hw%-^I&n_f_F zJzMSIvt(ooWpjJC@1bnNq1WUZmNoR!T}ey#J5A_W-Y|=o+?X_MUxmPWnkg5>iM4NeC&BLJ1wI zq4(Z>!AUfS`b&h}cm;{b65M?#Q~r4!zX(h%w?)u~h1 zxG`)&c-E8He=UH-z5sch@)8sPY>%W}fZtSj)$lmOY?F2#0E){}kzFFv{o?X$2N~`C zqP;{9@ui&s$3dzkyXK$*{9>zX@7M=pBMDcw8;1*42-x*GGfR1&y$_^k8>Z()aB4>f zZyRssNl&1YV{rPWC)pX}O%HrTh9krDU}d}ThA4l(%vZ3IG2g2p9)GN3&LzK@7gkdu z0{-zAPmA!^^KXDT0RB_qADcGxxFVw+#)LViG3E=8;grX4S{rn+MlD+bT@kqCQZA41 z{TVD~OrHf^q!2Gc`h40icsmE78D>hGlyKPW?&fx^f$J~-AarhK8~8j&{e584YWUK6 zH@Dv!_~uXLJin;G{H>tzgSNWXc6*=g7TR7nw^O?fcEGp6sKMk<(q5qHc^Ys20J5rq zRyEiaY#BnpL-K+=4K%+l*^EF(f$S)itR|opx7d7G%z?kjXvOU{A3JG3xB$S4FM#}S zp@{twrZqVazmP$*4P0O`jZXo=eJ5>VrtF7GO*EmXXo3!Ne7FbBKPBAN#qIKZm?2Rd zhhkJsOTd#`CEkL?aIM);gfYFkc|wfK9SosGQ)rXtK%b`%UZ85*z}J}m9EnAdWL8fU zaA@PUYNfcX#9Pp1)QW@s8vYIsoSv}>Vv6h4Eu$(_EiE_G!BN^-s7Af{q7wpJJ)X<7 zZZ53&JT2T_M=82ap^t`7bmTg5A2C$qgigK-(mHtscG3qR-?J#IMs_slAwAiwKV$2S zL>vffxQxS5Qx1ZMbZyZ)R7BI50x#Jz68wi!Fue{x2(Q{o6foxYr<|e%jY2qHSTs-A zj_L6<$~I|VLayM@woUJ-UT_0c8$T+zAlKyP3Gf!L!nYy93V9(e`pgewb-WFl9VXs_ z>i1ORJK(sBTP?#CP+&&#U%Il=-X&MoGF(Lkns`MxX--xdsv56t(?26(ask9{IM(P7 zcvXi<0ltuQ#pv7%Fg-}WCnI|DD0E=9VHfbl52zCeims^Kvv4^=ehs?tb(lEVVJE5g zs$g)&=d?WKK)&*fNVvw^tnt?&!A536<=!nSLP&Tw2F}?2tN)td25xDx-J$v4`G*l) zI1~EzrdeAoKvnq1e$1ILTU)}lLeK5uTq+|pDm^;AVtPz^TzY(ZrSw?JdT+iipy$r5 zi`hsRk(UF%QN7kA49=?xrf4vY%Zmq7MKDdt3kOpSn1<)MAjh%2x+TE7o=jfQ^EC2;p0yXa786`vFB5Dp(`+x}Y%k*|7W5JT>tURid<=Pc3F;sUHY$cd zTY!5TgZxz5*VrEOVg4!1X|R@v4TOCpI6r<5T8*>teUK{cB00I2oFsu0*oTfZT!lNK z{kRH0@H)wuK|#Pif?L53BE0Q4?Gk#;7-*(l216!33;Ye)wCBx|c%^qs;8~UF(8AzZ zmAl|aU-cPjW>&D8yv%D6Wtd@B;Z+O)U&`yY6iro9c}`;DJ#*q^$fHG%E^+5UyWX%M zfHvqK5EYowA5OWz7^L5J1t^u{0@t|4y8jBvC(m~^Lg!cMzO$WsX?`*o?4hQOmk{Fbc>Y@Y&II;qj zPr?kSEu5KUsmQ?7)gwJ`j{E3zgiG(1VX?!PxAca(n*5MAXk6^;wSEPW+lt0+xLy^` z!No4TE@}E)_#xC~g}gY^GrGZs1I@c^izs-gjz>P+c;LBhMjJopnjja=u2+n%p$)Dz zS#Z}=FaL~c4!GR{-XrDc?I=715u`@?o1U@KBtNb-Jp1x|YvFnA1wQRyd$QxDGQ_m| zLw#<=wCg>y1oJO8&2;kf&q6kN`wX4!#@6q5BI3{${sLJHvwc zKe^}DW8N%SXQgBXrlx%dtu&+4KY@!W zhoP-Z`3S_^IpEYl`=8PN2-+V-`?((bU(o(zv_FRS^DtBq&r@TBIGSr9(Xcp;~aYTl#8;49PesLlG|84b*dVXoaK6%aHyjCfnS2_>zON#}UQ_eu3c*Cci?PvZe z+s(Y${sR1D<#F~iIQtNhZ}tnn1V^s4xbhKkNo>EZB;Y#YvgkR+Qx*$Erz6^oceEG& z4t15~Leq6HrQ@}O?@su|65=%|BlsG_S6B`KlQ%;r%CCQ*alv05x(CAd?yo@u&p8lmGE#dEq&|8fl(c*P%eb51eNB1tYy|vY3CrLe^NsP z^NO+EVi%CmDeXKsS%x8`t3z6NAqj`ru*3pHq?< z78cE=8cop!WTbFu#r}2LR760A;Rw)#$={x~3OfccpIN}fZ2&p*@=hA3|w>)Ns zsY9soCN~Sd3z-?A4xuBjZ6<^P_TbuU-wQGW_x`E6uftX68w@JwU|t=<@x>cTz2ZN) z#0HpE=o={6^jC*)pzwOkYO4<6g4xHWt~!Jxj*m@MbqLR0d~7PHL;K3xm}W*GOweeg z!O958hYpTsg?OhxT{v(R@TEbRhFH*C>u$var%5p4T?3K#!*QrH>i%&5LojdGF-0#= z1Y>wbcg0AzYqPszl-nO<;U#Df;jk%){W{zi@HJrMatK=%WV5FP{H z9F3t3dN@c73=5)z0t0?8f);K9xCYm6;UzT3=$`Q~^anA}Gsfti(H$6&9|HMMc-H4r z0B{T!kpBzV>2$!GKg%Zr(ud=SD*OiQ3om1mV>8;jV++4UW3byVEI9277{fvezk{F5 zT*Dm#R##CQ7Z#WHJs2o);kI>rSbW+KVC@G-q}3p&5EzXRTTe~El8uE#dmaUx_9%2n z_yAsAxQ9l#L&M<{C}H{r)Xe$5DUPCo3$Ns^6bZ+uKSJosuw89-SJH)x@jc36C>RfHoFt4QBWOl zj*{F-f67skZ;m|Kshkn(uB@{I55O932uZ4(!tOdV71lavz&Yiw;20*2)Um_euXN4fA#&%8Ip#F%lQYx6H5zEzcnwrI zH7w`;H*(+3oQAz~W;D1*1D(b`4Wm}t@1)N(@ne`W6TTcx=gpnr6DfG)jqASv1#_3* zpuRe1Snz3Sy(x`zg=LWTHz4hJzT*AfAvmyau)Yp~<4TBjMB!S&xtOEy2H3&`=_dTZ z-3{>V(!xK$h_mBc@SBqVy z<2de5wuN-Q3F(Za)>MSEJl(Khlg8V>Zgv#m#ING=A(ZXN$C~y>% zk>e_~z!2b@I9i17kZK!7H>N5!J;9b zGhzy9H2B99!mT-HAznDRO}mM`BCL6Re?*Il94o}wa1O?uzmAYfo?>IK!fKF1vtMy1#Q|a3`J*uAV@(%B;zR$zAMfFbd#YvtzR>turR2GA0G1gV#B}?wgbZj2tR7k$X`CM!7 zU>Lh~7<17Hcz^4!yr0+JleKq9tAoC$`Y!t410LY{A4-Ey9r;wWx2WhD8M+AJZqI+K z_Tjn5PocqcD}lpOBHc8Z zN_8WOf}X}Fm6#A{Nc-(XVxNbn7Vkq^4)ue%A`SC;Dgxi|g(uY@bDQDw1Q5gIVQ|qE zrh$b&Jkgz24Gb_F&DATQBJ4u!juqhA-(9Rxf9d*B|bOEdYOq$RCDg7S;gi9|3cQ8^CW-Jg13ERFDGIfry!s2kvJDZ+8zjaZ$YWK(*`@hz4)s`jgGGhMB7j zl~Z~0WTEAXF{zS_W-tJ5BlnG-pA4|vc{>E&$f$TO_#@i`gl z>M*s7!me=r_&cV;?p`dsS)?I6SV{Miz%wI-4ImD`^rl_gG?hYv4?z=)={2ioSI^7N z%c+Yt7Jh?LEQ5==3M@pf!Eg2?Fn66gdGv&lQ_w{k9AGEHa<5AFuA*R^6ro^OrB(OV z&EdBfa5k))sx%!}2or4j!}Ueahc{=qDgpkUk|!d;0*nx}SPuVi0SUNz1iUy?pZ1yh zMuAiC3x4TaPB2dr1Hj!fu)sbRaz|lcIN*(LF6a%vka<{9;GaL|&>?m+0S zgr7rHA(=z6i(g}~8Q_O*MuGGfrGAsa<^{heK)wNPg2frX!(hHb?r)F`aH7ku&H|@H zJQ;+3V}fr6`HN1$Il=zo{a~~S4nY}3@}m$8t%DnFM!RnYImEs0rEZ6KITCF?iNsX> z7>Oyl8vR+cLnKv1b6Fs28-h7Z+*ff)#W1mr!Kz*Fkp7Lzj|rJ*Fm_$L3?~#UO*lTlt4Uo*;RXWOQA$sYS9ANQZDY z5-|?Zh2#j3!D33|zKw%L2}p-{urcNO4wUya9osZm^l#a)r9&)fIRWG&Ez$4JmSdYb z#Cs%9koFg{4{wE9IMo8#mgF#!^GV)M^2Jsd^4nzof~2zm-RBpi6wHwAVE*Y4eG4$g z*&u_(1~Ts`Kwo=Fo+cUC8r@WF{jDQdv~AtEwZG`o8q2d7q(iI$dxsEhQAU8QAwGr$ zsza=3pHkoukGIE?JklOZxMc@yZ`V7Z%NiX~UL!fK6S`d332mMtxw{kkx<=+7I-|X- z3$~>&l388QrX$J0T`)(%UC}0$WF3%^V!Jh>t3%8Ov%h$x8)}~<`60y1U zybk(Z+8@hgE6F!Vz75h}{N5kyqT2wJB_!(&Li2zal!ah+h>Ane?_`p(!?1;)9)>A7 zKMX^tJp#?MMqx?*i)6qU%u7|0TQi^V^B3#JU@5&g21~X7Sgfy^Bv+2boK_r%AtaKl zO0o{gh9sMT^cO?MwHfCx?i@$u3Gzqr1a!bZiX9|%n;ASFTiV3&7~1pW*Nk_FkH%xF z{3f7HrwM4D2QpZkoPgKSRgzJKXs$}KF3BHAHlEnGG4_zyccPTy5%`U!8y}FcN6!JW zz+?~=5Se5XD*C{eeBo{@xEHe+TrMVE4BQEc{vH5|7P0Uh5~STsjYSbGX0Hen_Auf_ zGomc1sU1;6rjA4%h?3}QMxmm=91i}H1dJz%p`rw+CcIx`B&0c1lmg`gjS}EMJPPCz zY49aH3ABqSgXs`ab*A$~xj;qW@+Oc4V~FxY2wyQmI{rSvqA1r$WI zhiJN}Ky-v?j;KoXCD0sruYO|*C~iOuE}%Pz{7s}~OcjV$0=XdeIG`kW50Q3Rm2~$5 z6@#v}*#dTOHvwTD`j|tAS^&YoWvnZ4YDU`>> z9HMPZcM?=qwebq`P}{SJgrK5QWpO4B)V83bg3?mTQ1 zLLDib1soFn3@pzC(tRWb6QvWK5%Y-hh|Y_~wENw+W2syPkJD2lp~3(o=6YM(L^Og56iKddZBKUoIs@Gdqhqos@E5FkIKnJ zI`*w{7Evo$gTl2U=MX(h^o*QGRJT9so|DByX|N4!i5KJoAAj5BLZV-w`?bVQxtK_& z`c-*1(ZZpqdqXZIdWPsNxt!=Y(LTA7$Qp(&56DuY!9;J%HAE@HQTMJ~N7R|5O1k|p!dl{( zga%2Q|KR7PTXgF9Ris<2>G&(i z!yu&?5rT2eCD}co7F@QKL(!%I$sVC~!Dcd;9gdx$t&AQ;yF+V%ECcDWc{kLMJ&L{r z>9P4W)B!ed7!4AhcD3!p-2Pw_1F~~bvU`T;T$Dqy4#|cj3qa%$!jqTOOk=cEdr*cXKbLo5S=P_7~Kzd(9QUYGgwaLnU! zlA%=QTga@-e=nJJjhrI0w-%)Mjcg(!Fa%x8x_)(?>e|%d{9Rq^`qkmAcKabl3hnZCH?6zxjzu>|L4MwIQoLKl_d@v*NKai1hX=W#{$7wCn+IY}gU!PvA0xSi_2f#d}Dwer!ElaDmg6rrp zl4Vt~m-w=39NZ!aZx4fzlhcyGTpx}tr0AEH4(6h?8XzAcoBe5Zz{hJ{*i5h11LV?b7{b%l`uMv=m4WLkyTxdd&yoC@?XAOmBZk%6(S$)H%sW*?bPW#IQMej&5&NkTKxeJaTYndrV- zCc4qR%`X918vj(bo_6coJF&SshPk!KkGXGK?OD41ira7wy z`qCw-%diF646U&Tv^vcrLOzGNUH5=@tQ@f}Zx*cLAIzH{r0djEBf565ggy18>+$wl zUR4uw{c6pWU@1=2^w!RgHLHP5M6FzqIkoBryTwDpu_r%9GI#`Kt$iBes$Tn3kh;|kuiYd>iiIR~8`Ev+bXp6rPfqIq z^0C@jCfpCy?g=)!2l$HYbt|>%V43)~-o!es4D26zhG5_OLYiA-xA{KJA)430b~4we zcIu{&g)slSb@Y4MMDVpgtuB<0ZygP;vk2_}C)(ld{hLm6aUHyt@rw48jIT>?KOlwf zU9sns;?p{hKstYdQu6dd?)*nWdK5*HOeC2O(o^!j{VIm(7Eh1;x*GQC!Ra{0WrIB2 zv0HkNB1vQV%={xEor{*#ZDn*WT0`+u$X4o|xL;1CaAU=7@(H;E3F& zp(89wyw&(~D6s>L(_zB)apPJbGumOTZEuIy`cZfdy zeou6WbIopn{5x}O)5}TawTGLlWVCUCjBYX(a&fL%FqmCKD}&4)S`}o?p%`YHp_#UQ zpP@P&UtiNeTRxn>w#gmlOo2Q$i3B-gST&GKhG80VhdpWA4$6<-Zwf{aNT(%$o2iV+dF&uXDo}N$y zvU_2CjzfgBOau8sVIIj@Aj{joMD{P`;93CA*sW^L@lZRR5|I`~H+9Z}bA?BVE=bhD z^ISxw;@yIX2tV-!5xOjar#)^QH`j~HO{#Lo^Q@!n(kZ; zRFA31d9Mf-O_|m^Hv+X~dfK@eUPaZFX}9wUpngn8ozK9Eb{Nw)&TT;BiS`B|&Y+x(Z?s(+bcIt03C@iWsI z&{Y&SnSKCWMd7HdbF2JUz=?h^QVA=@!yZ z6r`ZPVzJHts%R_1KIwGQ(c%JD?pyr~CDZWia zL<@15sV7iN5k@hTiqbZtBU*`bX*!hbwiPQBh-*wU+K!HBBj!+iCD6)O!~J$kb?nX# zK`ZFZY3NU1Iqk$6J7ufkao~+aWdg69j^YI$U1#y8O|wK7@vV=`ZsG)yzQ%fp%nXcS zy_gr2E_;f0OiP1m%U+^pmewr|YA*YTUQ8>4ddPkv8jlab-^QR3a)8KZ+7>if4irU9 zuLLcSgT;2Hy+JGGP*F2m`#T)8P7V|Mm`(*fC`SrdHd2_EgC3QmL`|l&;3ws1(U)m> z@Gd!46f;c;enXBETbN3M_sI$3W2P0s@5+hdG}8v4$>K88_TZ1?RPi&@uHfTxy12=- z7ifmCaygyBr{qi##PmtEbHr4lQc<(x*~qzK zEz^vS-$%|98<<`JnlIYr>G%>uev?IFDpOjBFp9+{rdlBm<1XHX*BlzGvzNx<%qQrv9K?Bn&uF_VmJwMW7GeEh34^T!t&qSSl(J6*~i5ZlJ2H zdkDf@CTg(mDF}0!$YkM zYM^mM>qS&(Wn-0i%%%)utvE?k8eQVPVBROz*3u=o)qMph5N{WO_W2@Fv`s&Nt|rsB z?&ETUc#Y`~p!>y7Ou=C{%m>60csvh7sTO9ajUqH(Q=2fCdQjY88W0wu9umXrYTcb- zQR)#f$)*JLn3!u*HMK=7u_;$QEn+B!Qc#wlm=<^Qw5A$q~K+o&(y? z6dt}B=mRDkxn38?m~iBJU3|`z2>#v>Uoq7He{YDZOgI9)DXuZ$2=u0qc!MmI8IC}^ zg^LMCpxq*jsS$+vmWW|$2VuS?sxb8d-5!y_GzxTkL`^1~LF^R`m~aNMSF~WlS;9Wi zo(X3O`$P|-y#YAd?-v7@aJ1hqMl#`uUMBD>3pj(o5xq>zB+|2>1EPqi%!Q?UKrCUx z(mfzbnXrW%6dRbZg&Y){nK1UZ#a1Sa{cZ6g6Skgr#H&o$dfpNHm@sAUiuaf>W$%iQ znQ+eVo;byXbB6cC1tzS`_r(<^tj+huuS__f_(0rZ!uiAp!U+$zV2$A%>_ZXCgmbVD zMMWko-9sXY2}}2oNN2)YIV^ISuvQL>`b^kDJ`&BCu!Vdi+A(1ZIU>3-VGB7T`ZG<6 zSRsyz;YG}$y=a1A)dFXKz$}oHqyF?3I*zv5KT1YRp_KX7bSNf6^jlPO2il9B-1FO zc1^Wz0Z|##7NToR2P*VdUxrnQk%)Fp9@ z=^-M~(&KM7=wKqmp)6Eiiz-BA@|B>4>Kjo&R4ks1T&OOK-L}i6>RWM06X=$zDp2%@v{R^;nI6Kt1zfaWk|MwN(b;%=tgsDtX7xR62Gy(rIGN^ zzw~QOd2r1Fmr`z|S}7IxcKJEllpipC0HkCjxx~7itt^>f(?aEt_}WQNz5B^*o7O2m zS=Xke$|;)@l?f~}mmFm4f~)|!kVwzAL*z4B=fru4Tkc@Od5BxS!E_Yz9wy6}zKE(| zg~<;!(fSWhknpd}3W$!U^CY66sAyOpd2~TlqhWnyQytL3W(56}1+@U3m%4%u4o_G& z1ay(|6N>MG3w2TQb0*Y9$%{-FX0*J@gkeU@-D zjg=zXb=1_pVmGU*4DF(+4^TDv3x!!KHg&BLlOaRNU#Y0yEiWun=8?+_F3fwDtj~mH zmL;1rVcx6Dc1)P}>asf%=DmjO&xCoeAx9ADyl2Y^Oqlm6SgSujIzT!%&zC70# zX`k#<@d2x`Y|u|rLd?IcJLChEc*IpJ9>2}sh&LCP3cduTv zI>{m?zt~$=7kP%Mew4$}RYnZLP}Ym^*e_*w*@{Sq(nHoK(zERzvXds~+}K1%54n+O zz4M;fYCw-NttZ;5UD7PQhy0Yt6Xsc>HDYsY4e%E@SioPYD2uJ@=p&PvPQ)IU{bUi* z8u2Yqe|ePYdTdk20NHK``dcFch1GqEhj2+;qnT*@S6JT#;jO&%mF6)(qaaLkZ_^HEnS z-iUk1F;h0T>2b$wxr}JN*c<$eW1jr6NQY7u_p;+Isfs;xNiL9Xo8EAg$eK1abu5y{ znQ$e1x4dZ6J&t?i#=CSVyI}3ROdhqV%&}a$7HHk|*h_MijJD|wN2zRU)60%Ea+FO? z9c$%Grca>E?vjIYJ1}7jd06&f zx*7a|W0M?a(^1DG@+i?7aWnX&<5BtALJYGE-cYncJT9v)Lee$;xU506UPQ#7cRViJ z+H}S7gdD|`6#uJZi+qkLKVJH6l{;;6`8_RvVrmv2?)RJ=wHRYqFFMD^`)!laOEgW0 z&+vOu7BgY%*)H*ES9FQBvO@;ntqIHJB^k+tCGoPX#Dr~dr%Yv<8^25Lk~vI^;*ZN$ zWH+Wq;%oZ7Dzop=VLk`C*X1ChQgHxuZ^)BOC*m9U?UrvZ)h;i@zajU^kC?8+xA5C9 zPukSZ?|^)DnRa;{bnnQwnfxjpm+#4QOmUTV$@k^=OlhF|Kqf8M{^|gIC_6LV0dzJyB_)-)R}nw5`$#pg1Pn^Y~mQGvS`c=Q4{4_b$%JT1>ciaYi;`!g!mjnj;XI~-Mb0veCQLaUXgQ!n|zjEWYoOn3>IU??O#>_EJFnX`7U-r;(<`@h-m+thqjlxz zfy(WC;@b>FkFU_RvaNDgr!+XXL9bQr?ImkYrI($C(UY#R3ldAvForW>37WqlWV!cjX7(zu4(cdzY508b(%&bH*-}mmcWz_!<>`c z*%f7MCn^<-ll!_V8WH!Ru2ejcJlGX$>?A4{uY$jLqu+g6_g-?LE5R7cbTWCaE6LbI zR4i^Kmx#*7V@wrNN?etVLmSZF1&O7bYLM0pLn3@oM&(x79;C}R1;_OQl zO?1J9{Zg`#$b|h;vQdo*`=t~khY9<6=r%S_l0W*a{<8-@ zLz%E2tYeI0!oD@%n978GYrZj;3HyS&#zH3S3+fuHi1bXZo{_x~b6YGnr<90#M$m&u zrD9jg6|}HcDp9exoU+?h-#E-VnR>-+U|eKft<+Ck4UCx&=`foCH8esW z*3>z5g=l1KWEujxM#c@M$*HGZjg90@+GSB{oN zZpJTE)1|^1xT10o;}%m}pk4-S0K*@g!vgg&Qkgyh>St`Cbe4)`gH}`?U_8lm2xyS; zGE>Ch6_tk=yP0|c4KqGq+6Xkl_=M>U&?w_8rsN?jDvvSZp2XM}IlrxTLX9($nSQTU z!5U{|G5Mtr^dE23VhT_H#5LY%q={yS6O5Lu>yy4hOfWhyjYwY&)RSp)I=nE?7|2wd zo&q$AX;u0OHPM*Jv@yMcHPN_}X$yoo$tY%e5yG5g+{5$+_?v93W_kzwO*S52I+i}s ze~R%a(--N}fSzW$0{*5N+nKI|zp2LSOgI;wX6$Fex$rdO114w23NhU{#^lae4fHuv z4CrPUUolky-3;R@Q)b2qHPg7pR41c?HPet=b;&o)nCO3};bQ8PF%2k;3C~Pt88J+F zW;)BL!nDP8OwBejn6|st0oBw*wKB(Oz&cz_%rTlX;c8-z(Vhuc6LXF3Ot_kuYYbq* z)x zVczdDwlQJe?=oK1M4>D&_OcG+TVTA)gz+sfjxu2=CB{i645h?4uZcogXwT0uM_$4l zc?nB!k?j&o&`bL>SBS;7?$gZGKJ+ck*OfTVhyWG~{DC(unS*8A7 z+L3jy4;_RsSJ?hOg)qJJb=E`vD{bA)tjB=9^(pIBM!-{;mJ2Q{>s3ZL6PEQVBaR8n zy3|N!!m=(kvY4=}R~xmMu&h@bO_;E(*BE1&u&mb@Q<$)<*BEn{u&mb_B}`b>YmMbh zSk~)|bxc^+>x_q(u&mb`k27IeuQ#4!!m_^Cc$o>y`d(u<6PERT#z7)Ix4F+a%sMRj z4aTRe!}-ew;|tbdJ=|}6&4l%Ezwsjz*24qFbtbHb2Mjo@r_#lG*k}YYVLfa#qBYUX z_(7u$k)Cu~<* zC7ioGZtHOF=B4X3KJtIUqqE%EC(F@Q|0iu-rEFIKd>^50>*=YgrohFXGL3VZke5i@39ncP&8f3Q! zfUhdqx)uTOEg`1<*#iUKuxV5_+=*b*^z0JxmQ5wuBLcis3bfZpH!)zpO{Lir0}j}9 zCVPIs+di}|0Nzl~v45YvF5o>Mnji4KO;*mjfDe6We!wA{&SY;1fL8@`C}*;F1;7h} z?J#!*eC$J80*={a%sJ^p zcY*Gdty>E^FX3A4w5`LnnwL_Oz6|)>*40Y-)`uR?`PGMB$hql5ujRnbp6&1L9N5{j z=~#{mJZsa%9Dg6eldUgo9iD7?2~V%Sv~_rT<)z;tK6uX>=RF{IwGZJM_PnjbHLRDg zFSuaqurKfu_61+rI_wL)6qgHodA1H$m|nsarcGA0TzB9lk4vDKz{@_A5_r|7oZOm$ z@HR}H2P-GHK_I;HlBq5byq=M%1rWS_(WaV#zuD9&w^<;(2a$E1z~xPw`sB6?{KJR3 z2f`Z=*=3*H{(;i;(8%0Tf$%^s>m~s?Y?=)Oucc$%-9YdnHBCVewCUyCSzfY^ z96__j>W-VmoOH43CCi1!5qhjW3iWTEQYtru@1*#FX31WxAL?ItT;RRK! z!;#rbjg$5S!aL(w7nAgnzn5_I^%9Q0Uc%8g+V+Q|ua|K2g_q26m^k`+DL?OIAiN!p zb$8^Q1?r;5V!HPr*6hQCv)EX3C{vS=%Ykv`Sf(~1SAnK78LpoLm-h2@D1l@FfnBkM~g(WF%ym!Rm^Kd#loE(7?f&me->SqiXM42 zgVN16n1%vnnFooA#iYCzLD^>Db2?0S_ErCy=0qkOb84GMnc4x>HKU(Lm&KwuuYXVj zb0$%l#4(_WxyYvZ0e6`HV!|m{a$M^2$0wx^ayPM0HaDLXqT+4*>vmWMyOgIPY zY5t1|=U_d}XPL0y?Pb2ig#B(W^Gzn~cYB)$n6TgNZ60F6IanX_I1|pn`j}^#a1Pej zyu^fau)gLGL}f0VgY`3iXTmvHKhxZ<%M9mW{mlR-oP+f@BbaawHo%Ny!a3LgGmS{k zR0o=uY)WwsG_TpTS`0E1c3=#}&L{Iqf(DyanO@IZ0hG;jIB!GH5R<-61}@L$JpyzG z=`Of%mN(RF%`U&s+Zr^~?51@R=S0KI9ZWbU8eyJf!a31M6F;niE!nT;j-Zj|CZ@2O zuLg}W&k&fJAAOGW3@{Xt{RjZ9T*9ts*~2EM98sZ;Zlpz-FlH#N1Wc{Zrf z4Bd@XD!SFY7&Or=*rRm;(LV)EHm?$0kT}PjY6k8_U75t$=rr>lq6-pdYtzk5OgLMc zY3?Q}7L~HC;8|vqedw=LOsW|hJlAZ^R0K5N>_UWLh6NOxLx?cUi2-++QQeJgrkW!o zB9@sYOp`{AOI>d6V0spGE6hVo-;BH~b)_k(JWEB|sECMFW{J)b-RDti?j%|dy<4~7 zQuBsQBZJqP)%Ih`){Dr>^Mmg->oL^^y5DTe)CA~3vma9e&?a*{Q#GJR&3R0%fgU$k zGWi2NX>MYQto%Um)8-3IwSk^9_b@d9+GZYMN&wnno@1&8wA1{VsWs56rUN>BOtnAI z8)h=o#9G^e-!j`W%>~+PPG(vPwBOvsbRWGf!;Q6Fue@)u9<#7$500JzS)*( zZsonfADVrc76BbL$1*JiI%3XdDhB%4T*}lxcyI70<^xPCLHDWo6w`E|&&*eu=2ku$ ze9C;6X%W!p=4VVxfzF!WFckxRX5*3-FhyGMR98 zUs(-)U+ZvopR6V`;p{#|mDtohFjZ~0sefRay1|6A`wZ3N104#^?z7ZjCY;^ZP~(_z zcAukWXo6F(F9Y(_d?GycN)O3XOIU|%!qe#23aP0!unt#>wbUa_xKga8wld*L zv9{XAge%3`>QyFODb`VYnQ*08N4>{{E5&?ulnGag`HH>@0J9)mh16B&S%<5Ty6OrO zt|IHHUzl(eSx?wsoa z+lBME(RZiap^~YEl!^vpwudxTUs6q%ilQ;QWHU95{ORkVxteR!C$8pdnI_S(PKjut z93Z$wHE3S6Ry=-s^cD)uvTlS&NAUzt(CgOgln}{>IWuVs}-o< znQ*OEpv*(Mb!5V|T07N~ z3D;`v)F38YtF>37m~gGuUQJ@cwOR*tCljvKI;gvtaIMx+-9xm{xjto3NJq7Xb+~ft zq#j`1?3ArRoz!Ej!*yI|^)wT%<2tJyOt_BgqF!ghbzB!!#)Rv*uId9OT*q})pD^J% zuABOt3DX<09Inh8(Kda19N@U*PA`i==t%X+J8On6$>N5LZ{m@+4xmi19CCOj?c ztK3X@TGm&^FyU!gKUJ9tPs{qL3?@8#>96vbaMjvhHDJQivH_|&6P}h0Q0XSK2~KgVV^u!)nvkyjZ+PnFlFOZ z3non2c-5W>Q#M}pV8WD5Py?7SWfRm$qD4+zxfLq>usgOMT)7phnVO&kzw(=?788|` z%Smdbtt%0e)Mg@`he>LyCVGxxvf9RkX_>5EWx_FMirUMB`J1BNW5WDRRY#dHe^b>d zCd|V$b)E_HFil+{(pTej6@FCb0o(3$70ZNece+Yu!lylEs7xk&+GB>Q#e`2T%v24T z@b3MYswL9{bykMlsX8z{S!W$kPo|ga98g~TKV^c6sgNZrJ^8zdq}a`_ZjL+MX&r_A$O@J zCy{jPS)dA-uyhxw&P-UkC8{?QmTrj}!i247p&G-4HMUSqVZxGMq-HZ=$uCkPD4nHZ z^VmG!A-3Pso0Qnid|y%>`Je#lbwppS03 z`d2x6#-?>@xq68RCem={^a^#r)|CLAu<2yT3Ux)3b7|y-kd^8N(HgNX|C^9iYUU{_ zGkEsumyp$JG1I2}8zF1eI!&&p^JVBdwV8EIqi%$(Q_nN)$ajUVS8uY*hay8m?^EwF zEse~v?o%h2W<~uHvO!&9e@7ytLmyD;w2mF0;M%C%Ou12&LpQ4CO!cEOLmyN-HPJI$ z53Bu5_{`SB>L9yp3jQ8eCz;Mi=7(-lSBUiUW1IA6-T7|wP0IN>#$F~q%x?iM=QDkq z-yw9f+QbxCw|nTL>OH2kx`RR=SHChfuRA()i>i7?hcc+{l+dTt$+Mcq*PWuCQK4TT z>8CcHQEQ3Ti|O^A41GrJWLi@1+0bXzMO(Kc^m$e7OZ0~>cZa^H@@zU7x7&q> z)i9<9>wOx!Q?0UTd&nzl6Vo&Gj>}iovU8LcQC9D4=xZwOyrz%pT@8Ixl`x&EcO!I< zO1_|V7wb9P`&G@0ntrMm>OQFUFA`w++@GkEOg-zjaDS$TeXDgN>UVaZR*6^GUw&`* z8I}K?CcOH;P}_;tJJ;18;r>#+!}N0faX=q2{ak;h8@``Te`Qu~gL`~vdc9Kj1$B{J z>TC0&YIYT!?vqb9*cftAwIteWzSrQW`;r>QbfLj1_t&b^_vmu3`CEf;+~25vKOmJ! zjN!7H%7igoQBPk(-98!EP=sAoyP0Ad-sApW&G}91a)5qR$-g7%*7LKPO|)M0Z0H~M zvzo^g5g#7*i+YS{DCn-K#Ovq}pPQ%@_M2+SG`C^3u*^y_lW=U5Hg= zQ&Cu`^%~P2(1lqO|Io4TX;c&zZmnlJ)o6KG1?wT3)`vw}`6>9G-+P`dYFgGY!%|pRCZB42 zFf7%kmm41mt5(imx~*H^_(T|dFp0uMe`ms~+w^kd%VD|Y{N>rY^^JcFt7X$ujeiTP zZ4<^3LJSq+Ga#oWqP zcynti(^&|!g%zRD-vt=s+K0EaVwpDOcMmVHs%e5Tu5Wm2t2XPJMs){j$h0GWSa=%? z-$#tIi-#h|hqr^(g{GyE7SK?pSyAo7+goGU-;v1a;T^3>OgP4Mg4vW#OK#L%;hn7c zO!cEygm<DM-} zTCz4~l1o>9yOV+atj9FT3GGTmKkI3x4MdmO<wvP+D;zjc*J$KKxxsi9+! zga_9KSSxanbh!+$)@u^GJFJNuV9lxR)eW*rG>M9xW1V{f1HHoi#M8*%bGJSNztj?^u%qe(o}>p=WSYtJIDZj|+oCZYPQO&DdZT8_H2vQyuW6GvO; zn6Ms3TbG%z9!6U~tt6MOwS8BJ(bf%3R1fg3=T$lstcTH-rOAc$FxmLBTEl&GldR`iS7&H! z@+51yk8ZNHj&%cvUJaaVU3k_T<`nCSCUO7JMafgFcF%cr)2wcq#2(O1vtIDg&9HW{ z?h5E;SZAL1`n%J*s!6mO7MpUXbj;dtM?ISe-P9o1^251y;Lbp7`2_msmqIIYY;u z3|wT5VX86qNX#N@Dp47&mKIsZnetoDsJ6&Tq}5rOXgc~ z)pa7b&hq36ZeKKxA0Amo@;Z3g>U2q62m5*2wPzt@zJfa zK4aZ|pj!p+mGJso4ew;o{@w%KYAe8JZnM@3*Cf=W6Jcv%CLo2o34T8*8l)77WUfYL zU;F2q|5-c8`Deem_xH<$+jKQW`&Q`Aq*nzD3X&v8u0d2 zbm=R7?S0L@Zf-Ygm(w9kQ_Kgc#1fxawEbEidz}W~aCEEC@?r8@wKk>@&8E=yShj|E zlx&()%C*f4WP|of_}Y72dajhec5m@@)T1+&hHfXFn_^s#lZ|gW|KD!LQpGn`WA1dR z{ucoioxwIlbs{dXmEucijXI}FSw#Vf_V zU^c`Cve`^-yzWi$1lXu@E_E6(Gy~rLjNv>_zPvV4_?laF$2@9T))URX((BR_PCV84 z4hj>^x>tlzfNb6(c@U%_jzC^a@i|B(z9)O^If0sae0j>p4{Qt(1kx1n@>mE{_p!b* zhU`&#$|vqmHrkgbCE9N)xk)EqnPjd`=3J1b&^9_%+N@Ke&FD)C-?Y^t8w}HvT5aR& z2Gg%NWVDBG1K85=vG;_a^Q+zHlr$js+V7u3{=3l1r_(n~Z^(aDJ~~ESce=#%xQ5bz zH^O83y=IeICiL4>o7m>1XacD4^p1Xd5Z!fxXA&{bYXF$EC0K1+a$_qddMu=G&$2wRG;Zxr|(D za~}9L#UZdMKSq1)J?;PR`m6sv_Ik$k-;;*;lyZu`JZ5d9rB3;OFHA{uKTl}BA?q>p z9L4x8Nne|*U<30;vd5m&W4=!Iel)X%mr#R!44Hl1_?odbdi?5^sbkS|r2jp2@z1eT zq4cMb#9YJo7<^=P%403kHYBNY)RxRWNvrdPvwcJ8*|l%2dFLna4Iy%)OIxqwwDgV9 zw|owDz%X^%bokMIFopl8%>P`H|5y8;mjJd0&-Lu+W8VV0T z=@QU3IDat3^gBXB%a1_|p{&Z=FQe;y6_p{HrTDWngjZ{b2YuY=8Ly5}=f!LG%wxSa zlIEqJ)xqD{|L0}$?}y-Rb)J@kqshPDCY9JmrLh~NA@+kbY27Eq?KV0t>|IT97^LEn z>pw{Y_Uej4`}bNP#^uSWwoL@~gl`W=UoXCL)(A|GugyQ3y}35I{rq1W zEc4q-qx?>$x0L?BYyUH}OoQ8!He(+vh1YEIKIETmJUa=0w*M=?xC3B^H3rRk-tJrS{}X1tzWARASK5IRXO|BWUpP`4`ze4*m68(U4~l5-+}d_ zck0kam!TA!!M&&6^^TmDf9GDeI$y1?S^M2aY48p0WwO~rarxS7^C8mW_bv1;pGWGp zdh#}V^ks-kx7q(dHd@}YwH}xMj*a#k(h^hhpO}454=X}wo>8e2?YE%RD_>KfR`R~+ zpIv&cLG2!EP0vr%-}=g@YaHc&6~6Cvtye3)De+BzBBjvlUbhxc+REGiulF0eO=dw{ zrpTcfwM{KB>%a0duI=rx+_cntN5^3YNeaEsuUn~3o8FDr()VmaoAoY}4oB}`YISHj7djR+8=?dC_E<8W zyklL%^+M9yy5Q@Nc1zP{PknjYlE?n?L<~XOU!G{fHy;)JTk!9I|7eiW@a4y7_-8LI_<&W%#csdWdeazepAR;Y)-4MRoYECL3EZB_|&%*yS_jAy8<)LF4hDH9 zd^AXW7bD6$K~}Je$$U4-Qj!};K0@+Ik}r_lMe;3@Z-cC09VYXqB+rt(1oHdv-$1TY z(!|*RAKKmpKC0?m8((|R40i-1AtVIIgs{}?#qK_*Hbu4Y2=e>*WNNYzuJed|#H_Ul`%9~0~H|_FF*>X$;nAQ=dl1)Fy=x2uK z*)0X>eoIpETQ6=YO25hE{qk_}jTBc)Ik2l2cfHjQ?fE^D^UknK8Vo1{gVv47j;wkz( z#b3=mg%rn~eTu1^;;-hO;;-hO;;-qRQu1rMrhqYo-Xk^Uw;HRfX3g-lSIgIi_GA>K&+zQaH~>zp z`s)_%<5nL5eN*+*kcv;!&pp-nPn0P$3`5A?Vo>aRf|N{WIog z#ItaF)`T~i!vR&X{p0FA(rNgWrI9HgkY4AxZu`$?Z)BXeBe!XpTS-r`hSakrSXO1-uQD^i|2=T>>_2AadatjW zm^D$|S(lcziW0tx5?)|ESoa!!p=#rLe^v`~-i|!irN@}(0_&^rzsveoT?i<52#?SY zq^R!avkR=Z>OPzmvqV2g{Ey@K-urc5!v>g?`WR!l$(m6A`V`BWUN5QS)u+Kvtol#m zZnDaz{V?kT)Z}Y80vM_PTGs6*=HB|B&$g^<;eR4}!PGhUqSV|)b1dtV;0&OQMRSg; zr|Qq0Q|x`dzHH7qZ^N3+b7r8e|2l1*_pSOGaNerlJ!c!r{t30sdrx)ioX6B3>-W#u z<(^0>#mJ{OJJb4E!<6j%*uD?5q?wE%)4FWhBDlWYuq^utmgodA)B01x zyQqhWJER_F0TFY3C>wd$(Um>JbKVZQ%e-O7)7EkIR{d4kyS!U>T$^2tvRsSUE`xvZ zIVD?a{$tra-u@l`C%e!4$d11NPwXhh??T0@7tghE_ITTK!~KFZ_(`x?sNe*@z!qld@Fu*VERi_jb*MOg`E0r*WAc`2`ul z>*qi1Ju>gp^F^!NJAa1Cx#X*$&$(o9{`-jk*|TS;<(EtX`Y(A6u3Ikoulavvx&fds zM>P2z-Vty6B{Oqoc>Z3Sm-CY6t@`CTUX1u7Q@nQ9C9io!Tdo49Y})HnW_WJ6pF+e(AVeW`qENG|6!_@6ubq`QfZPfQ6Udkt6YZ9plA$J08s$z{v6>@;1EX1aS4G z-vG8(KMFs8ukB0EwXVu*9RG@U?d~Jvry$SI;+Bxyd95_`wYw+e2Jrh>1-Z9cpWpp) zRp66vG8Fhe0RI(Lcv(Sunk_mZ+ZIi@fT8ZP_Fne(lmg$O%WllQ%lhPH59Y4(Nz8uV ze_ZyZ+yb9`H=@8d?(&xqbNb~!$St&Gl-%aayZo3cWDKjwDZuYb%*-qB$roA*eDWo& z0^ei!+6Q9Bw>0`J`94^mCEqAJfL|i~*7!avbordTKI_)Y^YQ||&tES751FuSJ~uVV~Y^6iOj zKDooZ%_rZ|*yg*eDZ?JHzfKNt>13vjC!U3Or{osI4zH@+_j1d zZ|srQJbUpEAU{9YlVQ(LuQZJ0pJ2^jPwDFOU7J_DU==xiz8mITu;2u0reeWK*8I!% zCA%jsc-fv^wtw2o_Nnsj1+T&-+ToJ~{6jj`)AymOCAPW!{FYha2pLUQc7$tc63?7g}EPdOamA z6BbVKd;|0p&nqpkB0L{$@h(X79BL_8m<_FaOl8ym0z-@cLehoCkK7CSD@#$xu!SDE z4RROjYRK{g+ZQhIObK=avx7$#u3}oNnAR%Bvx=^(=vqq7M&edtJ#n{3?!nFQJlXJd ztHmQNzS|=!URga;NG=qN60@$yoq=_)4kgxw#|JW(LxWCbDu}7mlLE<5?}U+ zo_WPzs*qZ!~Ze$J~{7u z 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%0DIhxI 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 j^wKdssQ!2N^L2rA{_}RkgTX public interface I{{classname}} { + #region Synchronous Operations {{#operation}} ///

/// {{summary}} @@ -36,7 +37,11 @@ namespace {{packageName}}.Api {{#allParams}}/// {{description}} {{/allParams}}/// ApiResponse of {{#returnType}}{{returnType}}{{/returnType}}{{^returnType}}Object(void){{/returnType}} ApiResponse<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Object{{/returnType}}> {{operationId}}WithHttpInfo ({{#allParams}}{{{dataType}}} {{paramName}}{{^required}}{{#optionalMethodArgument}} = null{{/optionalMethodArgument}}{{/required}}{{#hasMore}}, {{/hasMore}}{{/allParams}}); - + {{/operation}} + #endregion Synchronous Operations + {{#supportsAsync}} + #region Asynchronous Operations + {{#operation}} /// /// {{summary}} /// @@ -57,6 +62,8 @@ namespace {{packageName}}.Api {{/allParams}}/// Task of ApiResponse{{#returnType}} ({{returnType}}){{/returnType}} System.Threading.Tasks.Task> {{operationId}}AsyncWithHttpInfo ({{#allParams}}{{{dataType}}} {{paramName}}{{^required}}{{#optionalMethodArgument}} = null{{/optionalMethodArgument}}{{/required}}{{#hasMore}}, {{/hasMore}}{{/allParams}}); {{/operation}} + #endregion Asynchronous Operations + {{/supportsAsync}} } /// @@ -245,7 +252,8 @@ namespace {{packageName}}.Api response.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()), null);{{/returnType}} } - + + {{#supportsAsync}} /// /// {{summary}} {{notes}} /// @@ -349,7 +357,7 @@ namespace {{packageName}}.Api {{^returnType}}return new ApiResponse(statusCode, response.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()), null);{{/returnType}} - } + }{{/supportsAsync}} {{/operation}} } {{/operations}} diff --git a/modules/swagger-codegen/src/main/resources/csharp/compile-mono.sh.mustache b/modules/swagger-codegen/src/main/resources/csharp/compile-mono.sh.mustache index b84363cae39..1572c5dff26 100644 --- a/modules/swagger-codegen/src/main/resources/csharp/compile-mono.sh.mustache +++ b/modules/swagger-codegen/src/main/resources/csharp/compile-mono.sh.mustache @@ -1,10 +1,17 @@ #!/usr/bin/env bash +frameworkVersion={{targetFrameworkNuget}} +netfx=${frameworkVersion#net} + wget -nc https://nuget.org/nuget.exe; mozroots --import --sync mono nuget.exe install vendor/packages.config -o vendor; mkdir -p bin; -mcs -sdk:45 -r:vendor/Newtonsoft.Json.8.0.2/lib/net45/Newtonsoft.Json.dll,\ -vendor/RestSharp.105.2.3/lib/net45/RestSharp.dll,\ + +cp vendor/Newtonsoft.Json.8.0.2/lib/{{targetFrameworkNuget}}/Newtonsoft.Json.dll bin/Newtonsoft.Json.dll; +cp vendor/RestSharp.105.2.3/lib/{{targetFrameworkNuget}}/RestSharp.dll bin/RestSharp.dll; + +mcs -sdk:${netfx} -r:bin/Newtonsoft.Json.dll,\ +bin/RestSharp.dll,\ System.Runtime.Serialization.dll \ -target:library \ -out:bin/{{packageName}}.dll \ diff --git a/modules/swagger-codegen/src/main/resources/csharp/compile.mustache b/modules/swagger-codegen/src/main/resources/csharp/compile.mustache index e35879e0efa..098fddb4643 100644 --- a/modules/swagger-codegen/src/main/resources/csharp/compile.mustache +++ b/modules/swagger-codegen/src/main/resources/csharp/compile.mustache @@ -1,3 +1,12 @@ -SET CSCPATH=%SYSTEMROOT%\Microsoft.NET\Framework\v4.0.30319 -%CSCPATH%\csc /reference:bin/Newtonsoft.Json.dll;bin/RestSharp.dll /target:library /out:bin/{{packageName}}.dll /recurse:src\*.cs /doc:bin/{{packageName}}.xml +@echo off +{{#supportsAsync}}SET CSCPATH=%SYSTEMROOT%\Microsoft.NET\Framework\v4.0.30319{{/supportsAsync}} +{{^supportsAsync}}SET CSCPATH=%SYSTEMROOT%\Microsoft.NET\Framework\v3.5{{/supportsAsync}} + +if not exist ".\nuget.exe" powershell -Command "(new-object System.Net.WebClient).DownloadFile('https://nuget.org/nuget.exe', '.\nuget.exe')" +.\nuget.exe install vendor/packages.config -o vendor + +cp vendor/Newtonsoft.Json.8.0.2/lib/{{targetFrameworkNuget}}/Newtonsoft.Json.dll bin/Newtonsoft.Json.dll +cp vendor/RestSharp.105.2.3/lib/{{targetFrameworkNuget}}/RestSharp.dll bin/RestSharp.dll + +%CSCPATH%\csc /reference:bin/Newtonsoft.Json.dll;bin/RestSharp.dll /target:library /out:bin/{{packageName}}.dll /recurse:src\*.cs /doc:bin/{{packageName}}.xml diff --git a/modules/swagger-codegen/src/main/resources/csharp/packages.config.mustache b/modules/swagger-codegen/src/main/resources/csharp/packages.config.mustache index c87bbb79fa6..06875810b4a 100644 --- a/modules/swagger-codegen/src/main/resources/csharp/packages.config.mustache +++ b/modules/swagger-codegen/src/main/resources/csharp/packages.config.mustache @@ -1,5 +1,5 @@ - - + + diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/CSharpClientOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/CSharpClientOptionsProvider.java index f7abe83f8f4..ce810faea8b 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/CSharpClientOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/CSharpClientOptionsProvider.java @@ -31,6 +31,7 @@ public class CSharpClientOptionsProvider implements OptionsProvider { .put(CodegenConstants.RETURN_ICOLLECTION, "false") .put(CodegenConstants.OPTIONAL_PROJECT_FILE, "true") .put(CodegenConstants.OPTIONAL_PROJECT_GUID, PACKAGE_GUID_VALUE) + .put(CodegenConstants.DOTNET_FRAMEWORK, "4.x") .build(); } diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/.gitignore b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/.gitignore new file mode 100644 index 00000000000..08d9d469ba8 --- /dev/null +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/.gitignore @@ -0,0 +1,2 @@ +vendor/Newtonsoft.Json.8.0.2/ +vendor/RestSharp.105.2.3/ \ No newline at end of file diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/bin/Newtonsoft.Json.dll b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/bin/Newtonsoft.Json.dll index ae725c4b598ad5c413b2a1661da5cc2946677493..4d42dd9c5fe55c70c56fa235e6a509595cf7b52d 100644 GIT binary patch literal 521216 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 z nlIEOrEAwACCR1aq-ltt2+#ko#eAmFKGy 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%0DgXX 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 b>Dl=1`nE}6knqXc!rwN!zoYk?kih=}tYMS- literal 510976 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 z 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

t-8Y{6EaAiSCDwBF1)yg(w7X2~{EIt*%F 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

^;eQmiSG2E5p7d;Z9|sAQjxh_q!G4 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 z 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Í}BwHgB2_)e!VkMSGQHN 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 G3j7ZUO+^a; literal 167936 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 z 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%0DIhxI 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 j^wKdssQ!2N^L2rA{_}RkgTX public interface IPetApi { + #region Synchronous Operations ///

/// Update an existing pet @@ -35,7 +36,201 @@ namespace IO.Swagger.Api /// Pet object that needs to be added to the store /// ApiResponse of Object(void) ApiResponse UpdatePetWithHttpInfo (Pet body = null); - + + /// + /// Add a new pet to the store + /// + /// + /// + /// + /// Pet object that needs to be added to the store + /// + void AddPet (Pet body = null); + + /// + /// Add a new pet to the store + /// + /// + /// + /// + /// Pet object that needs to be added to the store + /// ApiResponse of Object(void) + ApiResponse AddPetWithHttpInfo (Pet body = null); + + /// + /// Finds Pets by status + /// + /// + /// Multiple status values can be provided with comma seperated strings + /// + /// Status values that need to be considered for filter + /// List<Pet> + List FindPetsByStatus (List status = null); + + /// + /// Finds Pets by status + /// + /// + /// Multiple status values can be provided with comma seperated strings + /// + /// Status values that need to be considered for filter + /// ApiResponse of List<Pet> + ApiResponse> FindPetsByStatusWithHttpInfo (List status = null); + + /// + /// Finds Pets by tags + /// + /// + /// Muliple tags can be provided with comma seperated strings. Use tag1, tag2, tag3 for testing. + /// + /// Tags to filter by + /// List<Pet> + List FindPetsByTags (List tags = null); + + /// + /// Finds Pets by tags + /// + /// + /// Muliple tags can be provided with comma seperated strings. Use tag1, tag2, tag3 for testing. + /// + /// Tags to filter by + /// ApiResponse of List<Pet> + ApiResponse> FindPetsByTagsWithHttpInfo (List tags = null); + + /// + /// Find pet by ID + /// + /// + /// Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions + /// + /// ID of pet that needs to be fetched + /// Pet + Pet GetPetById (long? petId); + + /// + /// Find pet by ID + /// + /// + /// Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions + /// + /// ID of pet that needs to be fetched + /// ApiResponse of Pet + ApiResponse GetPetByIdWithHttpInfo (long? petId); + + /// + /// Updates a pet in the store with form data + /// + /// + /// + /// + /// ID of pet that needs to be updated + /// Updated name of the pet + /// Updated status of the pet + /// + void UpdatePetWithForm (string petId, string name = null, string status = null); + + /// + /// Updates a pet in the store with form data + /// + /// + /// + /// + /// ID of pet that needs to be updated + /// Updated name of the pet + /// Updated status of the pet + /// ApiResponse of Object(void) + ApiResponse UpdatePetWithFormWithHttpInfo (string petId, string name = null, string status = null); + + /// + /// Deletes a pet + /// + /// + /// + /// + /// Pet id to delete + /// + /// + void DeletePet (long? petId, string apiKey = null); + + /// + /// Deletes a pet + /// + /// + /// + /// + /// Pet id to delete + /// + /// ApiResponse of Object(void) + ApiResponse DeletePetWithHttpInfo (long? petId, string apiKey = null); + + /// + /// uploads an image + /// + /// + /// + /// + /// ID of pet to update + /// Additional data to pass to server + /// file to upload + /// + void UploadFile (long? petId, string additionalMetadata = null, Stream file = null); + + /// + /// uploads an image + /// + /// + /// + /// + /// ID of pet to update + /// Additional data to pass to server + /// file to upload + /// ApiResponse of Object(void) + ApiResponse UploadFileWithHttpInfo (long? petId, string additionalMetadata = null, Stream file = null); + + /// + /// Fake endpoint to test byte array return by 'Find pet by ID' + /// + /// + /// Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions + /// + /// ID of pet that needs to be fetched + /// byte[] + byte[] GetPetByIdWithByteArray (long? petId); + + /// + /// Fake endpoint to test byte array return by 'Find pet by ID' + /// + /// + /// Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions + /// + /// ID of pet that needs to be fetched + /// ApiResponse of byte[] + ApiResponse GetPetByIdWithByteArrayWithHttpInfo (long? petId); + + /// + /// Fake endpoint to test byte array in body parameter for adding a new pet to the store + /// + /// + /// + /// + /// Pet object in the form of byte array + /// + void AddPetUsingByteArray (byte[] body = null); + + /// + /// Fake endpoint to test byte array in body parameter for adding a new pet to the store + /// + /// + /// + /// + /// Pet object in the form of byte array + /// ApiResponse of Object(void) + ApiResponse AddPetUsingByteArrayWithHttpInfo (byte[] body = null); + + #endregion Synchronous Operations + + #region Asynchronous Operations + /// /// Update an existing pet /// @@ -56,26 +251,6 @@ namespace IO.Swagger.Api /// Task of ApiResponse System.Threading.Tasks.Task> UpdatePetAsyncWithHttpInfo (Pet body = null); - /// - /// Add a new pet to the store - /// - /// - /// - /// - /// Pet object that needs to be added to the store - /// - void AddPet (Pet body = null); - - /// - /// Add a new pet to the store - /// - /// - /// - /// - /// Pet object that needs to be added to the store - /// ApiResponse of Object(void) - ApiResponse AddPetWithHttpInfo (Pet body = null); - /// /// Add a new pet to the store /// @@ -96,26 +271,6 @@ namespace IO.Swagger.Api /// Task of ApiResponse System.Threading.Tasks.Task> AddPetAsyncWithHttpInfo (Pet body = null); - /// - /// Finds Pets by status - /// - /// - /// Multiple status values can be provided with comma seperated strings - /// - /// Status values that need to be considered for filter - /// List<Pet> - List FindPetsByStatus (List status = null); - - /// - /// Finds Pets by status - /// - /// - /// Multiple status values can be provided with comma seperated strings - /// - /// Status values that need to be considered for filter - /// ApiResponse of List<Pet> - ApiResponse> FindPetsByStatusWithHttpInfo (List status = null); - /// /// Finds Pets by status /// @@ -136,26 +291,6 @@ namespace IO.Swagger.Api /// Task of ApiResponse (List<Pet>) System.Threading.Tasks.Task>> FindPetsByStatusAsyncWithHttpInfo (List status = null); - /// - /// Finds Pets by tags - /// - /// - /// Muliple tags can be provided with comma seperated strings. Use tag1, tag2, tag3 for testing. - /// - /// Tags to filter by - /// List<Pet> - List FindPetsByTags (List tags = null); - - /// - /// Finds Pets by tags - /// - /// - /// Muliple tags can be provided with comma seperated strings. Use tag1, tag2, tag3 for testing. - /// - /// Tags to filter by - /// ApiResponse of List<Pet> - ApiResponse> FindPetsByTagsWithHttpInfo (List tags = null); - /// /// Finds Pets by tags /// @@ -176,26 +311,6 @@ namespace IO.Swagger.Api /// Task of ApiResponse (List<Pet>) System.Threading.Tasks.Task>> FindPetsByTagsAsyncWithHttpInfo (List tags = null); - /// - /// Find pet by ID - /// - /// - /// Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions - /// - /// ID of pet that needs to be fetched - /// Pet - Pet GetPetById (long? petId); - - /// - /// Find pet by ID - /// - /// - /// Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions - /// - /// ID of pet that needs to be fetched - /// ApiResponse of Pet - ApiResponse GetPetByIdWithHttpInfo (long? petId); - /// /// Find pet by ID /// @@ -216,30 +331,6 @@ namespace IO.Swagger.Api /// Task of ApiResponse (Pet) System.Threading.Tasks.Task> GetPetByIdAsyncWithHttpInfo (long? petId); - /// - /// Updates a pet in the store with form data - /// - /// - /// - /// - /// ID of pet that needs to be updated - /// Updated name of the pet - /// Updated status of the pet - /// - void UpdatePetWithForm (string petId, string name = null, string status = null); - - /// - /// Updates a pet in the store with form data - /// - /// - /// - /// - /// ID of pet that needs to be updated - /// Updated name of the pet - /// Updated status of the pet - /// ApiResponse of Object(void) - ApiResponse UpdatePetWithFormWithHttpInfo (string petId, string name = null, string status = null); - /// /// Updates a pet in the store with form data /// @@ -264,28 +355,6 @@ namespace IO.Swagger.Api /// Task of ApiResponse System.Threading.Tasks.Task> UpdatePetWithFormAsyncWithHttpInfo (string petId, string name = null, string status = null); - /// - /// Deletes a pet - /// - /// - /// - /// - /// Pet id to delete - /// - /// - void DeletePet (long? petId, string apiKey = null); - - /// - /// Deletes a pet - /// - /// - /// - /// - /// Pet id to delete - /// - /// ApiResponse of Object(void) - ApiResponse DeletePetWithHttpInfo (long? petId, string apiKey = null); - /// /// Deletes a pet /// @@ -308,30 +377,6 @@ namespace IO.Swagger.Api /// Task of ApiResponse System.Threading.Tasks.Task> DeletePetAsyncWithHttpInfo (long? petId, string apiKey = null); - /// - /// uploads an image - /// - /// - /// - /// - /// ID of pet to update - /// Additional data to pass to server - /// file to upload - /// - void UploadFile (long? petId, string additionalMetadata = null, Stream file = null); - - /// - /// uploads an image - /// - /// - /// - /// - /// ID of pet to update - /// Additional data to pass to server - /// file to upload - /// ApiResponse of Object(void) - ApiResponse UploadFileWithHttpInfo (long? petId, string additionalMetadata = null, Stream file = null); - /// /// uploads an image /// @@ -356,26 +401,6 @@ namespace IO.Swagger.Api /// Task of ApiResponse System.Threading.Tasks.Task> UploadFileAsyncWithHttpInfo (long? petId, string additionalMetadata = null, Stream file = null); - /// - /// Fake endpoint to test byte array return by 'Find pet by ID' - /// - /// - /// Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions - /// - /// ID of pet that needs to be fetched - /// byte[] - byte[] GetPetByIdWithByteArray (long? petId); - - /// - /// Fake endpoint to test byte array return by 'Find pet by ID' - /// - /// - /// Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions - /// - /// ID of pet that needs to be fetched - /// ApiResponse of byte[] - ApiResponse GetPetByIdWithByteArrayWithHttpInfo (long? petId); - /// /// Fake endpoint to test byte array return by 'Find pet by ID' /// @@ -396,26 +421,6 @@ namespace IO.Swagger.Api /// Task of ApiResponse (byte[]) System.Threading.Tasks.Task> GetPetByIdWithByteArrayAsyncWithHttpInfo (long? petId); - /// - /// Fake endpoint to test byte array in body parameter for adding a new pet to the store - /// - /// - /// - /// - /// Pet object in the form of byte array - /// - void AddPetUsingByteArray (byte[] body = null); - - /// - /// Fake endpoint to test byte array in body parameter for adding a new pet to the store - /// - /// - /// - /// - /// Pet object in the form of byte array - /// ApiResponse of Object(void) - ApiResponse AddPetUsingByteArrayWithHttpInfo (byte[] body = null); - /// /// Fake endpoint to test byte array in body parameter for adding a new pet to the store /// @@ -436,6 +441,8 @@ namespace IO.Swagger.Api /// Task of ApiResponse System.Threading.Tasks.Task> AddPetUsingByteArrayAsyncWithHttpInfo (byte[] body = null); + #endregion Asynchronous Operations + } /// @@ -598,7 +605,8 @@ namespace IO.Swagger.Api response.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()), null); } - + + /// /// Update an existing pet /// @@ -764,7 +772,8 @@ namespace IO.Swagger.Api response.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()), null); } - + + /// /// Add a new pet to the store /// @@ -925,7 +934,8 @@ namespace IO.Swagger.Api (List) Configuration.ApiClient.Deserialize(response, typeof(List))); } - + + /// /// Finds Pets by status Multiple status values can be provided with comma seperated strings /// @@ -1087,7 +1097,8 @@ namespace IO.Swagger.Api (List) Configuration.ApiClient.Deserialize(response, typeof(List))); } - + + /// /// Finds Pets by tags Muliple tags can be provided with comma seperated strings. Use tag1, tag2, tag3 for testing. /// @@ -1253,7 +1264,8 @@ namespace IO.Swagger.Api (Pet) Configuration.ApiClient.Deserialize(response, typeof(Pet))); } - + + /// /// Find pet by ID Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions /// @@ -1426,7 +1438,8 @@ namespace IO.Swagger.Api response.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()), null); } - + + /// /// Updates a pet in the store with form data /// @@ -1601,7 +1614,8 @@ namespace IO.Swagger.Api response.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()), null); } - + + /// /// Deletes a pet /// @@ -1776,7 +1790,8 @@ namespace IO.Swagger.Api response.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()), null); } - + + /// /// uploads an image /// @@ -1949,7 +1964,8 @@ namespace IO.Swagger.Api (byte[]) Configuration.ApiClient.Deserialize(response, typeof(byte[]))); } - + + /// /// Fake endpoint to test byte array return by 'Find pet by ID' Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions /// @@ -2118,7 +2134,8 @@ namespace IO.Swagger.Api response.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()), null); } - + + /// /// Fake endpoint to test byte array in body parameter for adding a new pet to the store /// diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/StoreApi.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/StoreApi.cs index ca876a043db..2646ef0619a 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/StoreApi.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/StoreApi.cs @@ -15,6 +15,7 @@ namespace IO.Swagger.Api /// public interface IStoreApi { + #region Synchronous Operations /// /// Returns pet inventories by status @@ -33,24 +34,6 @@ namespace IO.Swagger.Api /// /// ApiResponse of Dictionary<string, int?> ApiResponse> GetInventoryWithHttpInfo (); - - /// - /// Returns pet inventories by status - /// - /// - /// Returns a map of status codes to quantities - /// - /// Task of Dictionary<string, int?> - System.Threading.Tasks.Task> GetInventoryAsync (); - - /// - /// Returns pet inventories by status - /// - /// - /// Returns a map of status codes to quantities - /// - /// Task of ApiResponse (Dictionary<string, int?>) - System.Threading.Tasks.Task>> GetInventoryAsyncWithHttpInfo (); /// /// Place an order for a pet @@ -71,7 +54,69 @@ namespace IO.Swagger.Api /// order placed for purchasing the pet /// ApiResponse of Order ApiResponse PlaceOrderWithHttpInfo (Order body = null); + + /// + /// Find purchase order by ID + /// + /// + /// For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions + /// + /// ID of pet that needs to be fetched + /// Order + Order GetOrderById (string orderId); + + /// + /// Find purchase order by ID + /// + /// + /// For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions + /// + /// ID of pet that needs to be fetched + /// ApiResponse of Order + ApiResponse GetOrderByIdWithHttpInfo (string orderId); + + /// + /// Delete purchase order by ID + /// + /// + /// For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors + /// + /// ID of the order that needs to be deleted + /// + void DeleteOrder (string orderId); + + /// + /// Delete purchase order by ID + /// + /// + /// For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors + /// + /// ID of the order that needs to be deleted + /// ApiResponse of Object(void) + ApiResponse DeleteOrderWithHttpInfo (string orderId); + + #endregion Synchronous Operations + + #region Asynchronous Operations + + /// + /// Returns pet inventories by status + /// + /// + /// Returns a map of status codes to quantities + /// + /// Task of Dictionary<string, int?> + System.Threading.Tasks.Task> GetInventoryAsync (); + /// + /// Returns pet inventories by status + /// + /// + /// Returns a map of status codes to quantities + /// + /// Task of ApiResponse (Dictionary<string, int?>) + System.Threading.Tasks.Task>> GetInventoryAsyncWithHttpInfo (); + /// /// Place an order for a pet /// @@ -92,26 +137,6 @@ namespace IO.Swagger.Api /// Task of ApiResponse (Order) System.Threading.Tasks.Task> PlaceOrderAsyncWithHttpInfo (Order body = null); - /// - /// Find purchase order by ID - /// - /// - /// For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions - /// - /// ID of pet that needs to be fetched - /// Order - Order GetOrderById (string orderId); - - /// - /// Find purchase order by ID - /// - /// - /// For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions - /// - /// ID of pet that needs to be fetched - /// ApiResponse of Order - ApiResponse GetOrderByIdWithHttpInfo (string orderId); - /// /// Find purchase order by ID /// @@ -132,26 +157,6 @@ namespace IO.Swagger.Api /// Task of ApiResponse (Order) System.Threading.Tasks.Task> GetOrderByIdAsyncWithHttpInfo (string orderId); - /// - /// Delete purchase order by ID - /// - /// - /// For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors - /// - /// ID of the order that needs to be deleted - /// - void DeleteOrder (string orderId); - - /// - /// Delete purchase order by ID - /// - /// - /// For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors - /// - /// ID of the order that needs to be deleted - /// ApiResponse of Object(void) - ApiResponse DeleteOrderWithHttpInfo (string orderId); - /// /// Delete purchase order by ID /// @@ -172,6 +177,8 @@ namespace IO.Swagger.Api /// Task of ApiResponse System.Threading.Tasks.Task> DeleteOrderAsyncWithHttpInfo (string orderId); + #endregion Asynchronous Operations + } /// @@ -326,7 +333,8 @@ namespace IO.Swagger.Api (Dictionary) Configuration.ApiClient.Deserialize(response, typeof(Dictionary))); } - + + /// /// Returns pet inventories by status Returns a map of status codes to quantities /// @@ -484,7 +492,8 @@ namespace IO.Swagger.Api (Order) Configuration.ApiClient.Deserialize(response, typeof(Order))); } - + + /// /// Place an order for a pet /// @@ -635,7 +644,8 @@ namespace IO.Swagger.Api (Order) Configuration.ApiClient.Deserialize(response, typeof(Order))); } - + + /// /// Find purchase order by ID For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions /// @@ -787,7 +797,8 @@ namespace IO.Swagger.Api response.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()), null); } - + + /// /// Delete purchase order by ID For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors /// diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/UserApi.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/UserApi.cs index 168ce373ef9..b97bb313873 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/UserApi.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/UserApi.cs @@ -15,6 +15,7 @@ namespace IO.Swagger.Api /// public interface IUserApi { + #region Synchronous Operations /// /// Create user @@ -35,7 +36,153 @@ namespace IO.Swagger.Api /// Created user object /// ApiResponse of Object(void) ApiResponse CreateUserWithHttpInfo (User body = null); - + + /// + /// Creates list of users with given input array + /// + /// + /// + /// + /// List of user object + /// + void CreateUsersWithArrayInput (List body = null); + + /// + /// Creates list of users with given input array + /// + /// + /// + /// + /// List of user object + /// ApiResponse of Object(void) + ApiResponse CreateUsersWithArrayInputWithHttpInfo (List body = null); + + /// + /// Creates list of users with given input array + /// + /// + /// + /// + /// List of user object + /// + void CreateUsersWithListInput (List body = null); + + /// + /// Creates list of users with given input array + /// + /// + /// + /// + /// List of user object + /// ApiResponse of Object(void) + ApiResponse CreateUsersWithListInputWithHttpInfo (List body = null); + + /// + /// Logs user into the system + /// + /// + /// + /// + /// The user name for login + /// The password for login in clear text + /// string + string LoginUser (string username = null, string password = null); + + /// + /// Logs user into the system + /// + /// + /// + /// + /// The user name for login + /// The password for login in clear text + /// ApiResponse of string + ApiResponse LoginUserWithHttpInfo (string username = null, string password = null); + + /// + /// Logs out current logged in user session + /// + /// + /// + /// + /// + void LogoutUser (); + + /// + /// Logs out current logged in user session + /// + /// + /// + /// + /// ApiResponse of Object(void) + ApiResponse LogoutUserWithHttpInfo (); + + /// + /// Get user by user name + /// + /// + /// + /// + /// The name that needs to be fetched. Use user1 for testing. + /// User + User GetUserByName (string username); + + /// + /// Get user by user name + /// + /// + /// + /// + /// The name that needs to be fetched. Use user1 for testing. + /// ApiResponse of User + ApiResponse GetUserByNameWithHttpInfo (string username); + + /// + /// Updated user + /// + /// + /// This can only be done by the logged in user. + /// + /// name that need to be deleted + /// Updated user object + /// + void UpdateUser (string username, User body = null); + + /// + /// Updated user + /// + /// + /// This can only be done by the logged in user. + /// + /// name that need to be deleted + /// Updated user object + /// ApiResponse of Object(void) + ApiResponse UpdateUserWithHttpInfo (string username, User body = null); + + /// + /// Delete user + /// + /// + /// This can only be done by the logged in user. + /// + /// The name that needs to be deleted + /// + void DeleteUser (string username); + + /// + /// Delete user + /// + /// + /// This can only be done by the logged in user. + /// + /// The name that needs to be deleted + /// ApiResponse of Object(void) + ApiResponse DeleteUserWithHttpInfo (string username); + + #endregion Synchronous Operations + + #region Asynchronous Operations + /// /// Create user /// @@ -56,26 +203,6 @@ namespace IO.Swagger.Api /// Task of ApiResponse System.Threading.Tasks.Task> CreateUserAsyncWithHttpInfo (User body = null); - /// - /// Creates list of users with given input array - /// - /// - /// - /// - /// List of user object - /// - void CreateUsersWithArrayInput (List body = null); - - /// - /// Creates list of users with given input array - /// - /// - /// - /// - /// List of user object - /// ApiResponse of Object(void) - ApiResponse CreateUsersWithArrayInputWithHttpInfo (List body = null); - /// /// Creates list of users with given input array /// @@ -96,26 +223,6 @@ namespace IO.Swagger.Api /// Task of ApiResponse System.Threading.Tasks.Task> CreateUsersWithArrayInputAsyncWithHttpInfo (List body = null); - /// - /// Creates list of users with given input array - /// - /// - /// - /// - /// List of user object - /// - void CreateUsersWithListInput (List body = null); - - /// - /// Creates list of users with given input array - /// - /// - /// - /// - /// List of user object - /// ApiResponse of Object(void) - ApiResponse CreateUsersWithListInputWithHttpInfo (List body = null); - /// /// Creates list of users with given input array /// @@ -136,28 +243,6 @@ namespace IO.Swagger.Api /// Task of ApiResponse System.Threading.Tasks.Task> CreateUsersWithListInputAsyncWithHttpInfo (List body = null); - /// - /// Logs user into the system - /// - /// - /// - /// - /// The user name for login - /// The password for login in clear text - /// string - string LoginUser (string username = null, string password = null); - - /// - /// Logs user into the system - /// - /// - /// - /// - /// The user name for login - /// The password for login in clear text - /// ApiResponse of string - ApiResponse LoginUserWithHttpInfo (string username = null, string password = null); - /// /// Logs user into the system /// @@ -180,24 +265,6 @@ namespace IO.Swagger.Api /// Task of ApiResponse (string) System.Threading.Tasks.Task> LoginUserAsyncWithHttpInfo (string username = null, string password = null); - /// - /// Logs out current logged in user session - /// - /// - /// - /// - /// - void LogoutUser (); - - /// - /// Logs out current logged in user session - /// - /// - /// - /// - /// ApiResponse of Object(void) - ApiResponse LogoutUserWithHttpInfo (); - /// /// Logs out current logged in user session /// @@ -216,26 +283,6 @@ namespace IO.Swagger.Api /// Task of ApiResponse System.Threading.Tasks.Task> LogoutUserAsyncWithHttpInfo (); - /// - /// Get user by user name - /// - /// - /// - /// - /// The name that needs to be fetched. Use user1 for testing. - /// User - User GetUserByName (string username); - - /// - /// Get user by user name - /// - /// - /// - /// - /// The name that needs to be fetched. Use user1 for testing. - /// ApiResponse of User - ApiResponse GetUserByNameWithHttpInfo (string username); - /// /// Get user by user name /// @@ -256,28 +303,6 @@ namespace IO.Swagger.Api /// Task of ApiResponse (User) System.Threading.Tasks.Task> GetUserByNameAsyncWithHttpInfo (string username); - /// - /// Updated user - /// - /// - /// This can only be done by the logged in user. - /// - /// name that need to be deleted - /// Updated user object - /// - void UpdateUser (string username, User body = null); - - /// - /// Updated user - /// - /// - /// This can only be done by the logged in user. - /// - /// name that need to be deleted - /// Updated user object - /// ApiResponse of Object(void) - ApiResponse UpdateUserWithHttpInfo (string username, User body = null); - /// /// Updated user /// @@ -300,26 +325,6 @@ namespace IO.Swagger.Api /// Task of ApiResponse System.Threading.Tasks.Task> UpdateUserAsyncWithHttpInfo (string username, User body = null); - /// - /// Delete user - /// - /// - /// This can only be done by the logged in user. - /// - /// The name that needs to be deleted - /// - void DeleteUser (string username); - - /// - /// Delete user - /// - /// - /// This can only be done by the logged in user. - /// - /// The name that needs to be deleted - /// ApiResponse of Object(void) - ApiResponse DeleteUserWithHttpInfo (string username); - /// /// Delete user /// @@ -340,6 +345,8 @@ namespace IO.Swagger.Api /// Task of ApiResponse System.Threading.Tasks.Task> DeleteUserAsyncWithHttpInfo (string username); + #endregion Asynchronous Operations + } /// @@ -495,7 +502,8 @@ namespace IO.Swagger.Api response.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()), null); } - + + /// /// Create user This can only be done by the logged in user. /// @@ -646,7 +654,8 @@ namespace IO.Swagger.Api response.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()), null); } - + + /// /// Creates list of users with given input array /// @@ -797,7 +806,8 @@ namespace IO.Swagger.Api response.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()), null); } - + + /// /// Creates list of users with given input array /// @@ -946,7 +956,8 @@ namespace IO.Swagger.Api (string) Configuration.ApiClient.Deserialize(response, typeof(string))); } - + + /// /// Logs user into the system /// @@ -1092,7 +1103,8 @@ namespace IO.Swagger.Api response.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()), null); } - + + /// /// Logs out current logged in user session /// @@ -1239,7 +1251,8 @@ namespace IO.Swagger.Api (User) Configuration.ApiClient.Deserialize(response, typeof(User))); } - + + /// /// Get user by user name /// @@ -1400,7 +1413,8 @@ namespace IO.Swagger.Api response.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()), null); } - + + /// /// Updated user This can only be done by the logged in user. /// @@ -1554,7 +1568,8 @@ namespace IO.Swagger.Api response.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()), null); } - + + /// /// Delete user This can only be done by the logged in user. /// diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/ApiClient.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/ApiClient.cs index 9ff8b481e14..104911520a6 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/ApiClient.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Client/ApiClient.cs @@ -146,7 +146,7 @@ namespace IO.Swagger.Client var response = RestClient.Execute(request); return (Object) response; } - + /// /// Makes the asynchronous HTTP request. /// From bff0e2ad19835c7b11d7adb4a3dbd838c8c5251a Mon Sep 17 00:00:00 2001 From: evigeant Date: Sat, 13 Feb 2016 11:15:04 -0500 Subject: [PATCH 144/189] Fixed indentation to use spaces instead of tabs --- .../swagger/codegen/plugin/CodeGenMojo.java | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/modules/swagger-codegen-maven-plugin/src/main/java/io/swagger/codegen/plugin/CodeGenMojo.java b/modules/swagger-codegen-maven-plugin/src/main/java/io/swagger/codegen/plugin/CodeGenMojo.java index db6c9f674d7..0415f0648ca 100644 --- a/modules/swagger-codegen-maven-plugin/src/main/java/io/swagger/codegen/plugin/CodeGenMojo.java +++ b/modules/swagger-codegen-maven-plugin/src/main/java/io/swagger/codegen/plugin/CodeGenMojo.java @@ -160,7 +160,7 @@ public class CodeGenMojo extends AbstractMojo { Set definedOptions = new HashSet(); for (CliOption langCliOption : config.cliOptions()) { - definedOptions.add(langCliOption.getOpt()); + definedOptions.add(langCliOption.getOpt()); } if (configOptions != null) { @@ -178,15 +178,15 @@ public class CodeGenMojo extends AbstractMojo { Map mappings = createMapFromKeyValuePairs(configOptions.remove("instantiation-types").toString()); config.instantiationTypes().putAll(mappings); } - addAdditionalProperties(config, definedOptions, configOptions); + addAdditionalProperties(config, definedOptions, configOptions); } if (null != configurationFile) { Config genConfig = ConfigParser.read(configurationFile); if (null != genConfig) { - addAdditionalProperties(config, definedOptions, genConfig.getOptions()); + addAdditionalProperties(config, definedOptions, genConfig.getOptions()); } else { - throw new RuntimeException("Unable to read configuration file"); + throw new RuntimeException("Unable to read configuration file"); } } @@ -205,8 +205,8 @@ public class CodeGenMojo extends AbstractMojo { new DefaultGenerator().opts(input).generate(); } catch (Exception e) { // Maven logs exceptions thrown by plugins only if invoked with -e - // I find it annoying to jump through hoops to get basic diagnostic information, - // so let's log it in any case: + // I find it annoying to jump through hoops to get basic diagnostic information, + // so let's log it in any case: getLog().error(e); throw new MojoExecutionException("Code generation failed. See above for the full exception."); } @@ -217,12 +217,12 @@ public class CodeGenMojo extends AbstractMojo { } private void addAdditionalProperties(CodegenConfig config, Set definedOptions, Map configOptions) { - for(Map.Entry configEntry : configOptions.entrySet()) { - config.additionalProperties().put(configEntry.getKey().toString(), configEntry.getValue()); - if(!definedOptions.contains(configEntry.getKey())) { - getLog().warn("Additional property: " + configEntry.getKey() + " is not defined for this language."); - } - } + for(Map.Entry configEntry : configOptions.entrySet()) { + config.additionalProperties().put(configEntry.getKey().toString(), configEntry.getValue()); + if(!definedOptions.contains(configEntry.getKey())) { + getLog().warn("Additional property: " + configEntry.getKey() + " is not defined for this language."); + } + } } private static Map createMapFromKeyValuePairs(String commaSeparatedKVPairs) { From 908ab83d9bdfd81cda8121aa94326ebbda3a3d96 Mon Sep 17 00:00:00 2001 From: xhh Date: Mon, 15 Feb 2016 16:48:58 +0800 Subject: [PATCH 145/189] Java okhttp-gson: fix dependencies --- .../okhttp-gson/build.gradle.mustache | 20 ++++++++-------- .../libraries/okhttp-gson/build.sbt.mustache | 4 ++-- .../petstore/java/okhttp-gson/build.gradle | 23 +++++++++++-------- .../petstore/java/okhttp-gson/build.sbt | 4 ++-- 4 files changed, 27 insertions(+), 24 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/build.gradle.mustache b/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/build.gradle.mustache index adfd7d464c0..ad415b54579 100644 --- a/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/build.gradle.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/build.gradle.mustache @@ -23,7 +23,7 @@ if(hasProperty('target') && target == 'android') { apply plugin: 'com.android.library' apply plugin: 'com.github.dcendents.android-maven' - + android { compileSdkVersion 22 buildToolsVersion '22.0.0' @@ -35,7 +35,7 @@ if(hasProperty('target') && target == 'android') { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } - + // Rename the aar correctly libraryVariants.all { variant -> variant.outputs.each { output -> @@ -51,7 +51,7 @@ if(hasProperty('target') && target == 'android') { provided 'javax.annotation:jsr250-api:1.0' } } - + afterEvaluate { android.libraryVariants.all { variant -> def task = project.tasks.create "jar${variant.name.capitalize()}", Jar @@ -63,12 +63,12 @@ if(hasProperty('target') && target == 'android') { artifacts.add('archives', task); } } - + task sourcesJar(type: Jar) { from android.sourceSets.main.java.srcDirs classifier = 'sources' } - + artifacts { archives sourcesJar } @@ -77,16 +77,16 @@ if(hasProperty('target') && target == 'android') { apply plugin: 'java' apply plugin: 'maven' - + sourceCompatibility = JavaVersion.VERSION_1_7 targetCompatibility = JavaVersion.VERSION_1_7 - + install { repositories.mavenInstaller { pom.artifactId = '{{artifactId}}' } } - + task execute(type:JavaExec) { main = System.getProperty('mainClass') classpath = sourceSets.main.runtimeClasspath @@ -95,8 +95,8 @@ if(hasProperty('target') && target == 'android') { dependencies { compile 'io.swagger:swagger-annotations:1.5.0' - compile 'com.squareup.okhttp:okhttp:2.4.0' + compile 'com.squareup.okhttp:okhttp:2.7.2' + compile 'com.squareup.okhttp:logging-interceptor:2.7.2' compile 'com.google.code.gson:gson:2.3.1' - compile 'com.brsanthu:migbase64:2.2' testCompile 'junit:junit:4.8.1' } diff --git a/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/build.sbt.mustache b/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/build.sbt.mustache index b748f53e48d..50e843248fb 100644 --- a/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/build.sbt.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/build.sbt.mustache @@ -10,9 +10,9 @@ lazy val root = (project in file(".")). resolvers += Resolver.mavenLocal, libraryDependencies ++= Seq( "io.swagger" % "swagger-annotations" % "1.5.0", - "com.squareup.okhttp" % "okhttp" % "2.4.0", + "com.squareup.okhttp" % "okhttp" % "2.7.2", + "com.squareup.okhttp" % "logging-interceptor" % "2.7.2", "com.google.code.gson" % "gson" % "2.3.1", - "com.brsanthu" % "migbase64" % "2.2", "junit" % "junit" % "4.8.1" % "test" ) ) diff --git a/samples/client/petstore/java/okhttp-gson/build.gradle b/samples/client/petstore/java/okhttp-gson/build.gradle index c739b5e1a23..b81de6dbf3a 100644 --- a/samples/client/petstore/java/okhttp-gson/build.gradle +++ b/samples/client/petstore/java/okhttp-gson/build.gradle @@ -1,3 +1,6 @@ +apply plugin: 'idea' +apply plugin: 'eclipse' + group = 'io.swagger' version = '1.0.0' @@ -20,7 +23,7 @@ if(hasProperty('target') && target == 'android') { apply plugin: 'com.android.library' apply plugin: 'com.github.dcendents.android-maven' - + android { compileSdkVersion 22 buildToolsVersion '22.0.0' @@ -32,7 +35,7 @@ if(hasProperty('target') && target == 'android') { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } - + // Rename the aar correctly libraryVariants.all { variant -> variant.outputs.each { output -> @@ -48,7 +51,7 @@ if(hasProperty('target') && target == 'android') { provided 'javax.annotation:jsr250-api:1.0' } } - + afterEvaluate { android.libraryVariants.all { variant -> def task = project.tasks.create "jar${variant.name.capitalize()}", Jar @@ -60,12 +63,12 @@ if(hasProperty('target') && target == 'android') { artifacts.add('archives', task); } } - + task sourcesJar(type: Jar) { from android.sourceSets.main.java.srcDirs classifier = 'sources' } - + artifacts { archives sourcesJar } @@ -74,16 +77,16 @@ if(hasProperty('target') && target == 'android') { apply plugin: 'java' apply plugin: 'maven' - + sourceCompatibility = JavaVersion.VERSION_1_7 targetCompatibility = JavaVersion.VERSION_1_7 - + install { repositories.mavenInstaller { pom.artifactId = 'swagger-petstore-okhttp-gson' } } - + task execute(type:JavaExec) { main = System.getProperty('mainClass') classpath = sourceSets.main.runtimeClasspath @@ -92,8 +95,8 @@ if(hasProperty('target') && target == 'android') { dependencies { compile 'io.swagger:swagger-annotations:1.5.0' - compile 'com.squareup.okhttp:okhttp:2.4.0' + compile 'com.squareup.okhttp:okhttp:2.7.2' + compile 'com.squareup.okhttp:logging-interceptor:2.7.2' compile 'com.google.code.gson:gson:2.3.1' - compile 'com.brsanthu:migbase64:2.2' testCompile 'junit:junit:4.8.1' } diff --git a/samples/client/petstore/java/okhttp-gson/build.sbt b/samples/client/petstore/java/okhttp-gson/build.sbt index f70c7ea41c7..873affa9604 100644 --- a/samples/client/petstore/java/okhttp-gson/build.sbt +++ b/samples/client/petstore/java/okhttp-gson/build.sbt @@ -10,9 +10,9 @@ lazy val root = (project in file(".")). resolvers += Resolver.mavenLocal, libraryDependencies ++= Seq( "io.swagger" % "swagger-annotations" % "1.5.0", - "com.squareup.okhttp" % "okhttp" % "2.4.0", + "com.squareup.okhttp" % "okhttp" % "2.7.2", + "com.squareup.okhttp" % "logging-interceptor" % "2.7.2", "com.google.code.gson" % "gson" % "2.3.1", - "com.brsanthu" % "migbase64" % "2.2", "junit" % "junit" % "4.8.1" % "test" ) ) From 816ae0bb3f76635fd8eef4e6c3cfaeba32640243 Mon Sep 17 00:00:00 2001 From: wing328 Date: Mon, 15 Feb 2016 18:17:35 +0800 Subject: [PATCH 146/189] update pom for okhttp-gson java to test gradle --- .../client/petstore/java/okhttp-gson/pom.xml | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/samples/client/petstore/java/okhttp-gson/pom.xml b/samples/client/petstore/java/okhttp-gson/pom.xml index 4eaf536b2c8..0e9dbe72685 100644 --- a/samples/client/petstore/java/okhttp-gson/pom.xml +++ b/samples/client/petstore/java/okhttp-gson/pom.xml @@ -104,6 +104,26 @@ 1.6 + + org.codehaus.mojo + exec-maven-plugin + 1.2.1 + + + gradle-test + integration-test + + exec + + + gradle + + check + + + + + From 516a9413a28e4ac12a3acd03e65d79a35237e5de Mon Sep 17 00:00:00 2001 From: wing328 Date: Mon, 15 Feb 2016 18:24:57 +0800 Subject: [PATCH 147/189] update pom.mustache and sample --- .../Java/libraries/okhttp-gson/pom.mustache | 22 +++++++++++++++++++ .../java/io/swagger/client/ApiClient.java | 2 +- .../java/io/swagger/client/ApiException.java | 2 +- .../java/io/swagger/client/Configuration.java | 2 +- .../src/main/java/io/swagger/client/Pair.java | 2 +- .../java/io/swagger/client/StringUtil.java | 2 +- .../io/swagger/client/auth/ApiKeyAuth.java | 2 +- .../java/io/swagger/client/auth/OAuth.java | 2 +- 8 files changed, 29 insertions(+), 7 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/pom.mustache b/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/pom.mustache index 982334a3914..8339c894895 100644 --- a/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/pom.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/pom.mustache @@ -104,6 +104,28 @@ 1.6 + + + org.codehaus.mojo + exec-maven-plugin + 1.2.1 + + + gradle-test + integration-test + + exec + + + gradle + + check + + + + + + diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/ApiClient.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/ApiClient.java index 810922b90a2..73a9187e75f 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/ApiClient.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/ApiClient.java @@ -145,8 +145,8 @@ public class ApiClient { // Setup authentications (key: authentication name, value: authentication). authentications = new HashMap(); - authentications.put("petstore_auth", new OAuth()); authentications.put("api_key", new ApiKeyAuth("header", "api_key")); + authentications.put("petstore_auth", new OAuth()); // Prevent the authentications from being modified. authentications = Collections.unmodifiableMap(authentications); } diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/ApiException.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/ApiException.java index 5433c9e6822..5355f1a187e 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/ApiException.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/ApiException.java @@ -3,7 +3,7 @@ package io.swagger.client; import java.util.Map; import java.util.List; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:20.056+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-15T18:20:42.151+08:00") public class ApiException extends Exception { private int code = 0; private Map> responseHeaders = null; diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/Configuration.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/Configuration.java index c0ee5bc29b5..6be94b99493 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/Configuration.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/Configuration.java @@ -1,6 +1,6 @@ package io.swagger.client; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:20.056+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-15T18:20:42.151+08:00") public class Configuration { private static ApiClient defaultApiClient = new ApiClient(); diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/Pair.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/Pair.java index ae87b55cb55..5017f33d152 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/Pair.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/Pair.java @@ -1,6 +1,6 @@ package io.swagger.client; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:20.056+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-15T18:20:42.151+08:00") public class Pair { private String name = ""; private String value = ""; diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/StringUtil.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/StringUtil.java index f656ce8477b..9e910ae1b10 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/StringUtil.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/StringUtil.java @@ -1,6 +1,6 @@ package io.swagger.client; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:20.056+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-15T18:20:42.151+08:00") public class StringUtil { /** * Check if the given array contains the given value (with case-insensitive comparison). diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/ApiKeyAuth.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/ApiKeyAuth.java index 3cd68b67e4f..b8b1e69d7ff 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/ApiKeyAuth.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/ApiKeyAuth.java @@ -5,7 +5,7 @@ import io.swagger.client.Pair; import java.util.Map; import java.util.List; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:20.056+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-15T18:20:42.151+08:00") public class ApiKeyAuth implements Authentication { private final String location; private final String paramName; diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/OAuth.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/OAuth.java index 467f4afd4c3..bdfa1d9563f 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/OAuth.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/auth/OAuth.java @@ -5,7 +5,7 @@ import io.swagger.client.Pair; import java.util.Map; import java.util.List; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-05T14:39:20.056+08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-15T18:20:42.151+08:00") public class OAuth implements Authentication { private String accessToken; From 59931ef0f73019de87afbeac4d01de7b7eb38dce Mon Sep 17 00:00:00 2001 From: delenius Date: Fri, 12 Feb 2016 08:50:19 -0800 Subject: [PATCH 148/189] Correct exporting of enum classes Fixes #2102. --- .../resources/Javascript/enumClass.mustache | 21 +++----- .../main/resources/Javascript/model.mustache | 7 ++- .../javascript-promise/src/model/Category.js | 5 +- .../javascript-promise/src/model/Order.js | 50 ++++++++----------- .../javascript-promise/src/model/Pet.js | 50 ++++++++----------- .../javascript-promise/src/model/Tag.js | 5 +- .../javascript-promise/src/model/User.js | 5 +- .../petstore/javascript/src/model/Category.js | 5 +- .../petstore/javascript/src/model/Order.js | 50 ++++++++----------- .../petstore/javascript/src/model/Pet.js | 50 ++++++++----------- .../petstore/javascript/src/model/Tag.js | 5 +- .../petstore/javascript/src/model/User.js | 5 +- 12 files changed, 106 insertions(+), 152 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/Javascript/enumClass.mustache b/modules/swagger-codegen/src/main/resources/Javascript/enumClass.mustache index 341c55ca977..5acd5504bb5 100644 --- a/modules/swagger-codegen/src/main/resources/Javascript/enumClass.mustache +++ b/modules/swagger-codegen/src/main/resources/Javascript/enumClass.mustache @@ -1,17 +1,10 @@ - -//export module -if ( typeof define === "function" && define.amd ) { - define('{{datatypeWithEnum}}', [], function() { - return {{datatypeWithEnum}}; - }); -} - var {{datatypeWithEnum}} = { {{#allowableValues}}{{#enumVars}} - /** - * @const - */ - {{name}}: "{{value}}"{{^-last}}, - {{/-last}}{{/enumVars}}{{/allowableValues}} + /** + * @const + */ + {{name}}: "{{value}}"{{^-last}}, + {{/-last}}{{/enumVars}}{{/allowableValues}} + }; -} + {{classname}}.{{datatypeWithEnum}} = {{datatypeWithEnum}}; diff --git a/modules/swagger-codegen/src/main/resources/Javascript/model.mustache b/modules/swagger-codegen/src/main/resources/Javascript/model.mustache index 5592b328cbe..aaf5fc2015f 100644 --- a/modules/swagger-codegen/src/main/resources/Javascript/model.mustache +++ b/modules/swagger-codegen/src/main/resources/Javascript/model.mustache @@ -14,11 +14,7 @@ } }(this, function(module, ApiClient{{#imports}}, {{import}}{{/imports}}) { 'use strict'; - {{#models}}{{#model}} - {{#vars}}{{#isEnum}}{{>enumClass}}{{/isEnum}}{{#items.isEnum}}{{#items}} - {{>enumClass}}{{/items}}*/{{/items.isEnum}}{{/vars}} - {{#description}}/** * {{description}} **/{{/description}} @@ -74,6 +70,9 @@ return JSON.stringify(this); } + {{#vars}}{{#isEnum}}{{>enumClass}}{{/isEnum}}{{#items.isEnum}}{{#items}} + {{>enumClass}}{{/items}}*/{{/items.isEnum}}{{/vars}} + if (module) { module.{{classname}} = {{classname}}; } diff --git a/samples/client/petstore/javascript-promise/src/model/Category.js b/samples/client/petstore/javascript-promise/src/model/Category.js index 0e63bbd4297..858cb72fbee 100644 --- a/samples/client/petstore/javascript-promise/src/model/Category.js +++ b/samples/client/petstore/javascript-promise/src/model/Category.js @@ -14,11 +14,8 @@ } }(this, function(module, ApiClient) { 'use strict'; - - - var Category = function Category() { /** @@ -86,6 +83,8 @@ return JSON.stringify(this); } + + if (module) { module.Category = Category; } diff --git a/samples/client/petstore/javascript-promise/src/model/Order.js b/samples/client/petstore/javascript-promise/src/model/Order.js index 4877a538513..f762915a93e 100644 --- a/samples/client/petstore/javascript-promise/src/model/Order.js +++ b/samples/client/petstore/javascript-promise/src/model/Order.js @@ -14,37 +14,8 @@ } }(this, function(module, ApiClient) { 'use strict'; - -//export module -if ( typeof define === "function" && define.amd ) { - define('StatusEnum', [], function() { - return StatusEnum; - }); -} - -var StatusEnum = { - - /** - * @const - */ - PLACED: "placed", - - /** - * @const - */ - APPROVED: "approved", - - /** - * @const - */ - DELIVERED: "delivered" - -} - - - var Order = function Order() { /** @@ -207,6 +178,27 @@ var StatusEnum = { return JSON.stringify(this); } + var StatusEnum = { + + /** + * @const + */ + PLACED: "placed", + + /** + * @const + */ + APPROVED: "approved", + + /** + * @const + */ + DELIVERED: "delivered" + }; + + Order.StatusEnum = StatusEnum; + + if (module) { module.Order = Order; } diff --git a/samples/client/petstore/javascript-promise/src/model/Pet.js b/samples/client/petstore/javascript-promise/src/model/Pet.js index c892be4aaac..65690006acf 100644 --- a/samples/client/petstore/javascript-promise/src/model/Pet.js +++ b/samples/client/petstore/javascript-promise/src/model/Pet.js @@ -14,37 +14,8 @@ } }(this, function(module, ApiClient, Category, Tag) { 'use strict'; - -//export module -if ( typeof define === "function" && define.amd ) { - define('StatusEnum', [], function() { - return StatusEnum; - }); -} - -var StatusEnum = { - - /** - * @const - */ - AVAILABLE: "available", - - /** - * @const - */ - PENDING: "pending", - - /** - * @const - */ - SOLD: "sold" - -} - - - var Pet = function Pet(photoUrls, name) { /** @@ -209,6 +180,27 @@ var StatusEnum = { return JSON.stringify(this); } + var StatusEnum = { + + /** + * @const + */ + AVAILABLE: "available", + + /** + * @const + */ + PENDING: "pending", + + /** + * @const + */ + SOLD: "sold" + }; + + Pet.StatusEnum = StatusEnum; + + if (module) { module.Pet = Pet; } diff --git a/samples/client/petstore/javascript-promise/src/model/Tag.js b/samples/client/petstore/javascript-promise/src/model/Tag.js index f2451493103..d5f3265bd70 100644 --- a/samples/client/petstore/javascript-promise/src/model/Tag.js +++ b/samples/client/petstore/javascript-promise/src/model/Tag.js @@ -14,11 +14,8 @@ } }(this, function(module, ApiClient) { 'use strict'; - - - var Tag = function Tag() { /** @@ -86,6 +83,8 @@ return JSON.stringify(this); } + + if (module) { module.Tag = Tag; } diff --git a/samples/client/petstore/javascript-promise/src/model/User.js b/samples/client/petstore/javascript-promise/src/model/User.js index 68dfc609d55..dff858cd57d 100644 --- a/samples/client/petstore/javascript-promise/src/model/User.js +++ b/samples/client/petstore/javascript-promise/src/model/User.js @@ -14,11 +14,8 @@ } }(this, function(module, ApiClient) { 'use strict'; - - - var User = function User() { /** @@ -227,6 +224,8 @@ return JSON.stringify(this); } + + if (module) { module.User = User; } diff --git a/samples/client/petstore/javascript/src/model/Category.js b/samples/client/petstore/javascript/src/model/Category.js index 0e63bbd4297..858cb72fbee 100644 --- a/samples/client/petstore/javascript/src/model/Category.js +++ b/samples/client/petstore/javascript/src/model/Category.js @@ -14,11 +14,8 @@ } }(this, function(module, ApiClient) { 'use strict'; - - - var Category = function Category() { /** @@ -86,6 +83,8 @@ return JSON.stringify(this); } + + if (module) { module.Category = Category; } diff --git a/samples/client/petstore/javascript/src/model/Order.js b/samples/client/petstore/javascript/src/model/Order.js index 4877a538513..f762915a93e 100644 --- a/samples/client/petstore/javascript/src/model/Order.js +++ b/samples/client/petstore/javascript/src/model/Order.js @@ -14,37 +14,8 @@ } }(this, function(module, ApiClient) { 'use strict'; - -//export module -if ( typeof define === "function" && define.amd ) { - define('StatusEnum', [], function() { - return StatusEnum; - }); -} - -var StatusEnum = { - - /** - * @const - */ - PLACED: "placed", - - /** - * @const - */ - APPROVED: "approved", - - /** - * @const - */ - DELIVERED: "delivered" - -} - - - var Order = function Order() { /** @@ -207,6 +178,27 @@ var StatusEnum = { return JSON.stringify(this); } + var StatusEnum = { + + /** + * @const + */ + PLACED: "placed", + + /** + * @const + */ + APPROVED: "approved", + + /** + * @const + */ + DELIVERED: "delivered" + }; + + Order.StatusEnum = StatusEnum; + + if (module) { module.Order = Order; } diff --git a/samples/client/petstore/javascript/src/model/Pet.js b/samples/client/petstore/javascript/src/model/Pet.js index c892be4aaac..65690006acf 100644 --- a/samples/client/petstore/javascript/src/model/Pet.js +++ b/samples/client/petstore/javascript/src/model/Pet.js @@ -14,37 +14,8 @@ } }(this, function(module, ApiClient, Category, Tag) { 'use strict'; - -//export module -if ( typeof define === "function" && define.amd ) { - define('StatusEnum', [], function() { - return StatusEnum; - }); -} - -var StatusEnum = { - - /** - * @const - */ - AVAILABLE: "available", - - /** - * @const - */ - PENDING: "pending", - - /** - * @const - */ - SOLD: "sold" - -} - - - var Pet = function Pet(photoUrls, name) { /** @@ -209,6 +180,27 @@ var StatusEnum = { return JSON.stringify(this); } + var StatusEnum = { + + /** + * @const + */ + AVAILABLE: "available", + + /** + * @const + */ + PENDING: "pending", + + /** + * @const + */ + SOLD: "sold" + }; + + Pet.StatusEnum = StatusEnum; + + if (module) { module.Pet = Pet; } diff --git a/samples/client/petstore/javascript/src/model/Tag.js b/samples/client/petstore/javascript/src/model/Tag.js index f2451493103..d5f3265bd70 100644 --- a/samples/client/petstore/javascript/src/model/Tag.js +++ b/samples/client/petstore/javascript/src/model/Tag.js @@ -14,11 +14,8 @@ } }(this, function(module, ApiClient) { 'use strict'; - - - var Tag = function Tag() { /** @@ -86,6 +83,8 @@ return JSON.stringify(this); } + + if (module) { module.Tag = Tag; } diff --git a/samples/client/petstore/javascript/src/model/User.js b/samples/client/petstore/javascript/src/model/User.js index 68dfc609d55..dff858cd57d 100644 --- a/samples/client/petstore/javascript/src/model/User.js +++ b/samples/client/petstore/javascript/src/model/User.js @@ -14,11 +14,8 @@ } }(this, function(module, ApiClient) { 'use strict'; - - - var User = function User() { /** @@ -227,6 +224,8 @@ return JSON.stringify(this); } + + if (module) { module.User = User; } From 753499e2045a28ae012c5423464f59044b7a3bdc Mon Sep 17 00:00:00 2001 From: hideya kawahara Date: Fri, 12 Feb 2016 22:07:18 +0900 Subject: [PATCH 149/189] generated ObjC method names to follow Apple's coding convention --- .../codegen/languages/ObjcClientCodegen.java | 18 + .../resources/objc/ApiClient-body.mustache | 26 +- .../resources/objc/ApiClient-header.mustache | 26 +- .../src/main/resources/objc/api-body.mustache | 38 +- .../main/resources/objc/api-header.mustache | 9 +- .../objc/SwaggerClient/SWGApiClient.h | 26 +- .../objc/SwaggerClient/SWGApiClient.m | 26 +- .../petstore/objc/SwaggerClient/SWGPetApi.h | 70 ++-- .../petstore/objc/SwaggerClient/SWGPetApi.m | 380 ++++++++---------- .../petstore/objc/SwaggerClient/SWGStoreApi.h | 23 +- .../petstore/objc/SwaggerClient/SWGStoreApi.m | 147 ++++--- .../petstore/objc/SwaggerClient/SWGUserApi.h | 51 +-- .../petstore/objc/SwaggerClient/SWGUserApi.m | 299 +++++++------- .../SwaggerClient/SWGViewController.m | 2 +- .../SwaggerClientTests/Tests/PetApiTest.m | 28 +- .../SwaggerClientTests/Tests/StoreApiTest.m | 2 +- .../SwaggerClientTests/Tests/UserApiTest.m | 2 +- 17 files changed, 540 insertions(+), 633 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ObjcClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ObjcClientCodegen.java index 3351007386a..56e61cf54e7 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ObjcClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ObjcClientCodegen.java @@ -3,6 +3,7 @@ package io.swagger.codegen.languages; import io.swagger.codegen.CliOption; import io.swagger.codegen.CodegenConfig; import io.swagger.codegen.CodegenConstants; +import io.swagger.codegen.CodegenOperation; import io.swagger.codegen.CodegenProperty; import io.swagger.codegen.CodegenType; import io.swagger.codegen.DefaultCodegen; @@ -13,6 +14,8 @@ import java.io.File; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; +import java.util.List; +import java.util.Map; import java.util.Set; import org.apache.commons.lang.StringUtils; @@ -456,6 +459,21 @@ public class ObjcClientCodegen extends DefaultCodegen implements CodegenConfig { this.license = license; } + @Override + public Map postProcessOperations(Map objs) { + Map operations = (Map) objs.get("operations"); + if (operations != null) { + List ops = (List) operations.get("operation"); + for (CodegenOperation operation : ops) { + if (!operation.allParams.isEmpty()) { + String firstParamName = operation.allParams.get(0).paramName; + operation.vendorExtensions.put("firstParamAltName", camelize(firstParamName)); + } + } + } + return objs; + } + /** * Return the default value of the property * diff --git a/modules/swagger-codegen/src/main/resources/objc/ApiClient-body.mustache b/modules/swagger-codegen/src/main/resources/objc/ApiClient-body.mustache index 25b5d9adfbf..a12b4bd224a 100644 --- a/modules/swagger-codegen/src/main/resources/objc/ApiClient-body.mustache +++ b/modules/swagger-codegen/src/main/resources/objc/ApiClient-body.mustache @@ -499,19 +499,19 @@ static void (^reachabilityChangeBlock)(int); #pragma mark - Perform Request Methods --(NSNumber*) requestWithCompletionBlock: (NSString*) path - method: (NSString*) method - pathParams: (NSDictionary *) pathParams - queryParams: (NSDictionary*) queryParams - formParams: (NSDictionary *) formParams - files: (NSDictionary *) files - body: (id) body - headerParams: (NSDictionary*) headerParams - authSettings: (NSArray *) authSettings - requestContentType: (NSString*) requestContentType - responseContentType: (NSString*) responseContentType - responseType: (NSString *) responseType - completionBlock: (void (^)(id, NSError *))completionBlock { +-(NSNumber*) requestWithPath: (NSString*) path + method: (NSString*) method + pathParams: (NSDictionary *) pathParams + queryParams: (NSDictionary*) queryParams + formParams: (NSDictionary *) formParams + files: (NSDictionary *) files + body: (id) body + headerParams: (NSDictionary*) headerParams + authSettings: (NSArray *) authSettings + requestContentType: (NSString*) requestContentType + responseContentType: (NSString*) responseContentType + responseType: (NSString *) responseType + completionBlock: (void (^)(id, NSError *))completionBlock { // setting request serializer if ([requestContentType isEqualToString:@"application/json"]) { self.requestSerializer = [{{classPrefix}}JSONRequestSerializer serializer]; diff --git a/modules/swagger-codegen/src/main/resources/objc/ApiClient-header.mustache b/modules/swagger-codegen/src/main/resources/objc/ApiClient-header.mustache index 7aded8aabeb..41f964044a1 100644 --- a/modules/swagger-codegen/src/main/resources/objc/ApiClient-header.mustache +++ b/modules/swagger-codegen/src/main/resources/objc/ApiClient-header.mustache @@ -186,19 +186,19 @@ extern NSString *const {{classPrefix}}ResponseObjectErrorKey; * * @return The request id. */ --(NSNumber*) requestWithCompletionBlock:(NSString*) path - method:(NSString*) method - pathParams:(NSDictionary *) pathParams - queryParams:(NSDictionary*) queryParams - formParams:(NSDictionary *) formParams - files:(NSDictionary *) files - body:(id) body - headerParams:(NSDictionary*) headerParams - authSettings: (NSArray *) authSettings - requestContentType:(NSString*) requestContentType - responseContentType:(NSString*) responseContentType - responseType:(NSString *) responseType - completionBlock:(void (^)(id, NSError *))completionBlock; +-(NSNumber*) requestWithPath:(NSString*) path + method:(NSString*) method + pathParams:(NSDictionary *) pathParams + queryParams:(NSDictionary*) queryParams + formParams:(NSDictionary *) formParams + files:(NSDictionary *) files + body:(id) body + headerParams:(NSDictionary*) headerParams + authSettings:(NSArray *) authSettings + requestContentType:(NSString*) requestContentType + responseContentType:(NSString*) responseContentType + responseType:(NSString *) responseType + completionBlock:(void (^)(id, NSError *))completionBlock; /** * Sanitize object for request diff --git a/modules/swagger-codegen/src/main/resources/objc/api-body.mustache b/modules/swagger-codegen/src/main/resources/objc/api-body.mustache index d84e350360f..c049571c892 100644 --- a/modules/swagger-codegen/src/main/resources/objc/api-body.mustache +++ b/modules/swagger-codegen/src/main/resources/objc/api-body.mustache @@ -79,10 +79,9 @@ static {{classname}}* singletonAPI = nil; /// /// {{/allParams}} @returns {{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}} /// --(NSNumber*) {{nickname}}WithCompletionBlock{{^allParams}}: {{/allParams}}{{#allParams}}{{#secondaryParam}} {{paramName}}{{/secondaryParam}}: ({{{dataType}}}) {{paramName}} - {{/allParams}} - {{#returnBaseType}}{{#hasParams}}completionHandler: {{/hasParams}}(void (^)({{{returnType}}} output, NSError* error))completionBlock { {{/returnBaseType}} - {{^returnBaseType}}{{#hasParams}}completionHandler: {{/hasParams}}(void (^)(NSError* error))completionBlock { {{/returnBaseType}} +-(NSNumber*) {{#vendorExtensions.x-objc-operationId}}{{vendorExtensions.x-objc-operationId}}{{/vendorExtensions.x-objc-operationId}}{{^vendorExtensions.x-objc-operationId}}{{nickname}}{{#hasParams}}With{{vendorExtensions.firstParamAltName}}{{/hasParams}}{{^hasParams}}WithCompletionHandler: {{/hasParams}}{{/vendorExtensions.x-objc-operationId}}{{#allParams}}{{#secondaryParam}} + {{paramName}}{{/secondaryParam}}: ({{{dataType}}}) {{paramName}}{{/allParams}} + {{#hasParams}}completionHandler: {{/hasParams}}(void (^)({{#returnBaseType}}{{{returnType}}} output, {{/returnBaseType}}NSError* error)) handler { {{#allParams}}{{#required}} // verify the required parameter '{{paramName}}' is set @@ -164,22 +163,21 @@ static {{classname}}* singletonAPI = nil; } {{/requiredParams}} {{/requiredParamCount}} - return [self.apiClient requestWithCompletionBlock: resourcePath - method: @"{{httpMethod}}" - pathParams: pathParams - queryParams: queryParams - formParams: formParams - files: files - body: bodyParam - headerParams: headerParams - authSettings: authSettings - requestContentType: requestContentType - responseContentType: responseContentType - responseType: {{^returnType}}nil{{/returnType}}{{#returnType}}@"{{{ returnType }}}"{{/returnType}} - completionBlock: ^(id data, NSError *error) { - {{^returnType}}completionBlock(error);{{/returnType}} - {{#returnType}}completionBlock(({{{ returnType }}})data, error);{{/returnType}} - } + return [self.apiClient requestWithPath: resourcePath + method: @"{{httpMethod}}" + pathParams: pathParams + queryParams: queryParams + formParams: formParams + files: files + body: bodyParam + headerParams: headerParams + authSettings: authSettings + requestContentType: requestContentType + responseContentType: responseContentType + responseType: {{^returnType}}nil{{/returnType}}{{#returnType}}@"{{{ returnType }}}"{{/returnType}} + completionBlock: ^(id data, NSError *error) { + handler({{#returnType}}({{{ returnType }}})data, {{/returnType}}error); + } ]; } diff --git a/modules/swagger-codegen/src/main/resources/objc/api-header.mustache b/modules/swagger-codegen/src/main/resources/objc/api-header.mustache index 29c7d9477f2..fdf6726dac8 100644 --- a/modules/swagger-codegen/src/main/resources/objc/api-header.mustache +++ b/modules/swagger-codegen/src/main/resources/objc/api-header.mustache @@ -31,12 +31,9 @@ /// {{/allParams}} /// /// @return {{{returnType}}} --(NSNumber*) {{nickname}}WithCompletionBlock {{^allParams}}:{{/allParams}}{{#allParams}}{{#secondaryParam}} {{paramName}}{{/secondaryParam}}:({{{dataType}}}) {{paramName}} {{#hasMore}} -{{/hasMore}}{{/allParams}} - {{#returnBaseType}}{{#hasParams}} - completionHandler: {{/hasParams}}(void (^)({{{returnType}}} output, NSError* error))completionBlock;{{/returnBaseType}} - {{^returnBaseType}}{{#hasParams}} - completionHandler: {{/hasParams}}(void (^)(NSError* error))completionBlock;{{/returnBaseType}} +-(NSNumber*) {{#vendorExtensions.x-objc-operationId}}{{vendorExtensions.x-objc-operationId}}{{/vendorExtensions.x-objc-operationId}}{{^vendorExtensions.x-objc-operationId}}{{nickname}}{{#hasParams}}With{{vendorExtensions.firstParamAltName}}{{/hasParams}}{{^hasParams}}WithCompletionHandler: {{/hasParams}}{{/vendorExtensions.x-objc-operationId}}{{#allParams}}{{#secondaryParam}} + {{paramName}}{{/secondaryParam}}: ({{{dataType}}}) {{paramName}}{{/allParams}} + {{#hasParams}}completionHandler: {{/hasParams}}(void (^)({{#returnBaseType}}{{{returnType}}} output, {{/returnBaseType}}NSError* error)) handler; {{newline}} {{/operation}} diff --git a/samples/client/petstore/objc/SwaggerClient/SWGApiClient.h b/samples/client/petstore/objc/SwaggerClient/SWGApiClient.h index 2c78694bbde..e27e9199611 100644 --- a/samples/client/petstore/objc/SwaggerClient/SWGApiClient.h +++ b/samples/client/petstore/objc/SwaggerClient/SWGApiClient.h @@ -190,19 +190,19 @@ extern NSString *const SWGResponseObjectErrorKey; * * @return The request id. */ --(NSNumber*) requestWithCompletionBlock:(NSString*) path - method:(NSString*) method - pathParams:(NSDictionary *) pathParams - queryParams:(NSDictionary*) queryParams - formParams:(NSDictionary *) formParams - files:(NSDictionary *) files - body:(id) body - headerParams:(NSDictionary*) headerParams - authSettings: (NSArray *) authSettings - requestContentType:(NSString*) requestContentType - responseContentType:(NSString*) responseContentType - responseType:(NSString *) responseType - completionBlock:(void (^)(id, NSError *))completionBlock; +-(NSNumber*) requestWithPath:(NSString*) path + method:(NSString*) method + pathParams:(NSDictionary *) pathParams + queryParams:(NSDictionary*) queryParams + formParams:(NSDictionary *) formParams + files:(NSDictionary *) files + body:(id) body + headerParams:(NSDictionary*) headerParams + authSettings:(NSArray *) authSettings + requestContentType:(NSString*) requestContentType + responseContentType:(NSString*) responseContentType + responseType:(NSString *) responseType + completionBlock:(void (^)(id, NSError *))completionBlock; /** * Sanitize object for request diff --git a/samples/client/petstore/objc/SwaggerClient/SWGApiClient.m b/samples/client/petstore/objc/SwaggerClient/SWGApiClient.m index 4dce6d2fa8b..0b9d509809e 100644 --- a/samples/client/petstore/objc/SwaggerClient/SWGApiClient.m +++ b/samples/client/petstore/objc/SwaggerClient/SWGApiClient.m @@ -499,19 +499,19 @@ static void (^reachabilityChangeBlock)(int); #pragma mark - Perform Request Methods --(NSNumber*) requestWithCompletionBlock: (NSString*) path - method: (NSString*) method - pathParams: (NSDictionary *) pathParams - queryParams: (NSDictionary*) queryParams - formParams: (NSDictionary *) formParams - files: (NSDictionary *) files - body: (id) body - headerParams: (NSDictionary*) headerParams - authSettings: (NSArray *) authSettings - requestContentType: (NSString*) requestContentType - responseContentType: (NSString*) responseContentType - responseType: (NSString *) responseType - completionBlock: (void (^)(id, NSError *))completionBlock { +-(NSNumber*) requestWithPath: (NSString*) path + method: (NSString*) method + pathParams: (NSDictionary *) pathParams + queryParams: (NSDictionary*) queryParams + formParams: (NSDictionary *) formParams + files: (NSDictionary *) files + body: (id) body + headerParams: (NSDictionary*) headerParams + authSettings: (NSArray *) authSettings + requestContentType: (NSString*) requestContentType + responseContentType: (NSString*) responseContentType + responseType: (NSString *) responseType + completionBlock: (void (^)(id, NSError *))completionBlock { // setting request serializer if ([requestContentType isEqualToString:@"application/json"]) { self.requestSerializer = [SWGJSONRequestSerializer serializer]; diff --git a/samples/client/petstore/objc/SwaggerClient/SWGPetApi.h b/samples/client/petstore/objc/SwaggerClient/SWGPetApi.h index 8450740ce39..505e54eefd6 100644 --- a/samples/client/petstore/objc/SwaggerClient/SWGPetApi.h +++ b/samples/client/petstore/objc/SwaggerClient/SWGPetApi.h @@ -28,10 +28,8 @@ /// /// /// @return --(NSNumber*) updatePetWithCompletionBlock :(SWGPet*) body - - - completionHandler: (void (^)(NSError* error))completionBlock; +-(NSNumber*) updatePetWithBody: (SWGPet*) body + completionHandler: (void (^)(NSError* error)) handler; /// @@ -43,10 +41,8 @@ /// /// /// @return --(NSNumber*) addPetWithCompletionBlock :(SWGPet*) body - - - completionHandler: (void (^)(NSError* error))completionBlock; +-(NSNumber*) addPetWithBody: (SWGPet*) body + completionHandler: (void (^)(NSError* error)) handler; /// @@ -58,10 +54,8 @@ /// /// /// @return NSArray* --(NSNumber*) findPetsByStatusWithCompletionBlock :(NSArray* /* NSString */) status - - completionHandler: (void (^)(NSArray* output, NSError* error))completionBlock; - +-(NSNumber*) findPetsByStatusWithStatus: (NSArray* /* NSString */) status + completionHandler: (void (^)(NSArray* output, NSError* error)) handler; /// @@ -73,10 +67,8 @@ /// /// /// @return NSArray* --(NSNumber*) findPetsByTagsWithCompletionBlock :(NSArray* /* NSString */) tags - - completionHandler: (void (^)(NSArray* output, NSError* error))completionBlock; - +-(NSNumber*) findPetsByTagsWithTags: (NSArray* /* NSString */) tags + completionHandler: (void (^)(NSArray* output, NSError* error)) handler; /// @@ -88,10 +80,8 @@ /// /// /// @return SWGPet* --(NSNumber*) getPetByIdWithCompletionBlock :(NSNumber*) petId - - completionHandler: (void (^)(SWGPet* output, NSError* error))completionBlock; - +-(NSNumber*) getPetByIdWithPetId: (NSNumber*) petId + completionHandler: (void (^)(SWGPet* output, NSError* error)) handler; /// @@ -105,12 +95,10 @@ /// /// /// @return --(NSNumber*) updatePetWithFormWithCompletionBlock :(NSString*) petId - name:(NSString*) name - status:(NSString*) status - - - completionHandler: (void (^)(NSError* error))completionBlock; +-(NSNumber*) updatePetWithFormWithPetId: (NSString*) petId + name: (NSString*) name + status: (NSString*) status + completionHandler: (void (^)(NSError* error)) handler; /// @@ -123,11 +111,9 @@ /// /// /// @return --(NSNumber*) deletePetWithCompletionBlock :(NSNumber*) petId - apiKey:(NSString*) apiKey - - - completionHandler: (void (^)(NSError* error))completionBlock; +-(NSNumber*) deletePetWithPetId: (NSNumber*) petId + apiKey: (NSString*) apiKey + completionHandler: (void (^)(NSError* error)) handler; /// @@ -141,12 +127,10 @@ /// /// /// @return --(NSNumber*) uploadFileWithCompletionBlock :(NSNumber*) petId - additionalMetadata:(NSString*) additionalMetadata - file:(NSURL*) file - - - completionHandler: (void (^)(NSError* error))completionBlock; +-(NSNumber*) uploadFileWithPetId: (NSNumber*) petId + additionalMetadata: (NSString*) additionalMetadata + file: (NSURL*) file + completionHandler: (void (^)(NSError* error)) handler; /// @@ -158,10 +142,8 @@ /// /// /// @return NSString* --(NSNumber*) getPetByIdWithByteArrayWithCompletionBlock :(NSNumber*) petId - - completionHandler: (void (^)(NSString* output, NSError* error))completionBlock; - +-(NSNumber*) getPetByIdWithByteArrayWithPetId: (NSNumber*) petId + completionHandler: (void (^)(NSString* output, NSError* error)) handler; /// @@ -173,10 +155,8 @@ /// /// /// @return --(NSNumber*) addPetUsingByteArrayWithCompletionBlock :(NSString*) body - - - completionHandler: (void (^)(NSError* error))completionBlock; +-(NSNumber*) addPetUsingByteArrayWithBody: (NSString*) body + completionHandler: (void (^)(NSError* error)) handler; diff --git a/samples/client/petstore/objc/SwaggerClient/SWGPetApi.m b/samples/client/petstore/objc/SwaggerClient/SWGPetApi.m index d3b76c0a4f3..c18b8a4a416 100644 --- a/samples/client/petstore/objc/SwaggerClient/SWGPetApi.m +++ b/samples/client/petstore/objc/SwaggerClient/SWGPetApi.m @@ -76,10 +76,8 @@ static SWGPetApi* singletonAPI = nil; /// /// @returns void /// --(NSNumber*) updatePetWithCompletionBlock: (SWGPet*) body - - - completionHandler: (void (^)(NSError* error))completionBlock { +-(NSNumber*) updatePetWithBody: (SWGPet*) body + completionHandler: (void (^)(NSError* error)) handler { @@ -128,22 +126,21 @@ static SWGPetApi* singletonAPI = nil; - return [self.apiClient requestWithCompletionBlock: resourcePath - method: @"PUT" - pathParams: pathParams - queryParams: queryParams - formParams: formParams - files: files - body: bodyParam - headerParams: headerParams - authSettings: authSettings - requestContentType: requestContentType - responseContentType: responseContentType - responseType: nil - completionBlock: ^(id data, NSError *error) { - completionBlock(error); - - } + return [self.apiClient requestWithPath: resourcePath + method: @"PUT" + pathParams: pathParams + queryParams: queryParams + formParams: formParams + files: files + body: bodyParam + headerParams: headerParams + authSettings: authSettings + requestContentType: requestContentType + responseContentType: responseContentType + responseType: nil + completionBlock: ^(id data, NSError *error) { + handler(error); + } ]; } @@ -154,10 +151,8 @@ static SWGPetApi* singletonAPI = nil; /// /// @returns void /// --(NSNumber*) addPetWithCompletionBlock: (SWGPet*) body - - - completionHandler: (void (^)(NSError* error))completionBlock { +-(NSNumber*) addPetWithBody: (SWGPet*) body + completionHandler: (void (^)(NSError* error)) handler { @@ -206,22 +201,21 @@ static SWGPetApi* singletonAPI = nil; - return [self.apiClient requestWithCompletionBlock: resourcePath - method: @"POST" - pathParams: pathParams - queryParams: queryParams - formParams: formParams - files: files - body: bodyParam - headerParams: headerParams - authSettings: authSettings - requestContentType: requestContentType - responseContentType: responseContentType - responseType: nil - completionBlock: ^(id data, NSError *error) { - completionBlock(error); - - } + return [self.apiClient requestWithPath: resourcePath + method: @"POST" + pathParams: pathParams + queryParams: queryParams + formParams: formParams + files: files + body: bodyParam + headerParams: headerParams + authSettings: authSettings + requestContentType: requestContentType + responseContentType: responseContentType + responseType: nil + completionBlock: ^(id data, NSError *error) { + handler(error); + } ]; } @@ -232,10 +226,8 @@ static SWGPetApi* singletonAPI = nil; /// /// @returns NSArray* /// --(NSNumber*) findPetsByStatusWithCompletionBlock: (NSArray* /* NSString */) status - - completionHandler: (void (^)(NSArray* output, NSError* error))completionBlock { - +-(NSNumber*) findPetsByStatusWithStatus: (NSArray* /* NSString */) status + completionHandler: (void (^)(NSArray* output, NSError* error)) handler { @@ -290,22 +282,21 @@ static SWGPetApi* singletonAPI = nil; - return [self.apiClient requestWithCompletionBlock: resourcePath - method: @"GET" - pathParams: pathParams - queryParams: queryParams - formParams: formParams - files: files - body: bodyParam - headerParams: headerParams - authSettings: authSettings - requestContentType: requestContentType - responseContentType: responseContentType - responseType: @"NSArray*" - completionBlock: ^(id data, NSError *error) { - - completionBlock((NSArray*)data, error); - } + return [self.apiClient requestWithPath: resourcePath + method: @"GET" + pathParams: pathParams + queryParams: queryParams + formParams: formParams + files: files + body: bodyParam + headerParams: headerParams + authSettings: authSettings + requestContentType: requestContentType + responseContentType: responseContentType + responseType: @"NSArray*" + completionBlock: ^(id data, NSError *error) { + handler((NSArray*)data, error); + } ]; } @@ -316,10 +307,8 @@ static SWGPetApi* singletonAPI = nil; /// /// @returns NSArray* /// --(NSNumber*) findPetsByTagsWithCompletionBlock: (NSArray* /* NSString */) tags - - completionHandler: (void (^)(NSArray* output, NSError* error))completionBlock { - +-(NSNumber*) findPetsByTagsWithTags: (NSArray* /* NSString */) tags + completionHandler: (void (^)(NSArray* output, NSError* error)) handler { @@ -374,22 +363,21 @@ static SWGPetApi* singletonAPI = nil; - return [self.apiClient requestWithCompletionBlock: resourcePath - method: @"GET" - pathParams: pathParams - queryParams: queryParams - formParams: formParams - files: files - body: bodyParam - headerParams: headerParams - authSettings: authSettings - requestContentType: requestContentType - responseContentType: responseContentType - responseType: @"NSArray*" - completionBlock: ^(id data, NSError *error) { - - completionBlock((NSArray*)data, error); - } + return [self.apiClient requestWithPath: resourcePath + method: @"GET" + pathParams: pathParams + queryParams: queryParams + formParams: formParams + files: files + body: bodyParam + headerParams: headerParams + authSettings: authSettings + requestContentType: requestContentType + responseContentType: responseContentType + responseType: @"NSArray*" + completionBlock: ^(id data, NSError *error) { + handler((NSArray*)data, error); + } ]; } @@ -400,10 +388,8 @@ static SWGPetApi* singletonAPI = nil; /// /// @returns SWGPet* /// --(NSNumber*) getPetByIdWithCompletionBlock: (NSNumber*) petId - - completionHandler: (void (^)(SWGPet* output, NSError* error))completionBlock { - +-(NSNumber*) getPetByIdWithPetId: (NSNumber*) petId + completionHandler: (void (^)(SWGPet* output, NSError* error)) handler { // verify the required parameter 'petId' is set @@ -460,22 +446,21 @@ static SWGPetApi* singletonAPI = nil; - return [self.apiClient requestWithCompletionBlock: resourcePath - method: @"GET" - pathParams: pathParams - queryParams: queryParams - formParams: formParams - files: files - body: bodyParam - headerParams: headerParams - authSettings: authSettings - requestContentType: requestContentType - responseContentType: responseContentType - responseType: @"SWGPet*" - completionBlock: ^(id data, NSError *error) { - - completionBlock((SWGPet*)data, error); - } + return [self.apiClient requestWithPath: resourcePath + method: @"GET" + pathParams: pathParams + queryParams: queryParams + formParams: formParams + files: files + body: bodyParam + headerParams: headerParams + authSettings: authSettings + requestContentType: requestContentType + responseContentType: responseContentType + responseType: @"SWGPet*" + completionBlock: ^(id data, NSError *error) { + handler((SWGPet*)data, error); + } ]; } @@ -490,12 +475,10 @@ static SWGPetApi* singletonAPI = nil; /// /// @returns void /// --(NSNumber*) updatePetWithFormWithCompletionBlock: (NSString*) petId - name: (NSString*) name - status: (NSString*) status - - - completionHandler: (void (^)(NSError* error))completionBlock { +-(NSNumber*) updatePetWithFormWithPetId: (NSString*) petId + name: (NSString*) name + status: (NSString*) status + completionHandler: (void (^)(NSError* error)) handler { // verify the required parameter 'petId' is set @@ -564,22 +547,21 @@ static SWGPetApi* singletonAPI = nil; - return [self.apiClient requestWithCompletionBlock: resourcePath - method: @"POST" - pathParams: pathParams - queryParams: queryParams - formParams: formParams - files: files - body: bodyParam - headerParams: headerParams - authSettings: authSettings - requestContentType: requestContentType - responseContentType: responseContentType - responseType: nil - completionBlock: ^(id data, NSError *error) { - completionBlock(error); - - } + return [self.apiClient requestWithPath: resourcePath + method: @"POST" + pathParams: pathParams + queryParams: queryParams + formParams: formParams + files: files + body: bodyParam + headerParams: headerParams + authSettings: authSettings + requestContentType: requestContentType + responseContentType: responseContentType + responseType: nil + completionBlock: ^(id data, NSError *error) { + handler(error); + } ]; } @@ -592,11 +574,9 @@ static SWGPetApi* singletonAPI = nil; /// /// @returns void /// --(NSNumber*) deletePetWithCompletionBlock: (NSNumber*) petId - apiKey: (NSString*) apiKey - - - completionHandler: (void (^)(NSError* error))completionBlock { +-(NSNumber*) deletePetWithPetId: (NSNumber*) petId + apiKey: (NSString*) apiKey + completionHandler: (void (^)(NSError* error)) handler { // verify the required parameter 'petId' is set @@ -656,22 +636,21 @@ static SWGPetApi* singletonAPI = nil; - return [self.apiClient requestWithCompletionBlock: resourcePath - method: @"DELETE" - pathParams: pathParams - queryParams: queryParams - formParams: formParams - files: files - body: bodyParam - headerParams: headerParams - authSettings: authSettings - requestContentType: requestContentType - responseContentType: responseContentType - responseType: nil - completionBlock: ^(id data, NSError *error) { - completionBlock(error); - - } + return [self.apiClient requestWithPath: resourcePath + method: @"DELETE" + pathParams: pathParams + queryParams: queryParams + formParams: formParams + files: files + body: bodyParam + headerParams: headerParams + authSettings: authSettings + requestContentType: requestContentType + responseContentType: responseContentType + responseType: nil + completionBlock: ^(id data, NSError *error) { + handler(error); + } ]; } @@ -686,12 +665,10 @@ static SWGPetApi* singletonAPI = nil; /// /// @returns void /// --(NSNumber*) uploadFileWithCompletionBlock: (NSNumber*) petId - additionalMetadata: (NSString*) additionalMetadata - file: (NSURL*) file - - - completionHandler: (void (^)(NSError* error))completionBlock { +-(NSNumber*) uploadFileWithPetId: (NSNumber*) petId + additionalMetadata: (NSString*) additionalMetadata + file: (NSURL*) file + completionHandler: (void (^)(NSError* error)) handler { // verify the required parameter 'petId' is set @@ -758,22 +735,21 @@ static SWGPetApi* singletonAPI = nil; - return [self.apiClient requestWithCompletionBlock: resourcePath - method: @"POST" - pathParams: pathParams - queryParams: queryParams - formParams: formParams - files: files - body: bodyParam - headerParams: headerParams - authSettings: authSettings - requestContentType: requestContentType - responseContentType: responseContentType - responseType: nil - completionBlock: ^(id data, NSError *error) { - completionBlock(error); - - } + return [self.apiClient requestWithPath: resourcePath + method: @"POST" + pathParams: pathParams + queryParams: queryParams + formParams: formParams + files: files + body: bodyParam + headerParams: headerParams + authSettings: authSettings + requestContentType: requestContentType + responseContentType: responseContentType + responseType: nil + completionBlock: ^(id data, NSError *error) { + handler(error); + } ]; } @@ -784,10 +760,8 @@ static SWGPetApi* singletonAPI = nil; /// /// @returns NSString* /// --(NSNumber*) getPetByIdWithByteArrayWithCompletionBlock: (NSNumber*) petId - - completionHandler: (void (^)(NSString* output, NSError* error))completionBlock { - +-(NSNumber*) getPetByIdWithByteArrayWithPetId: (NSNumber*) petId + completionHandler: (void (^)(NSString* output, NSError* error)) handler { // verify the required parameter 'petId' is set @@ -844,22 +818,21 @@ static SWGPetApi* singletonAPI = nil; - return [self.apiClient requestWithCompletionBlock: resourcePath - method: @"GET" - pathParams: pathParams - queryParams: queryParams - formParams: formParams - files: files - body: bodyParam - headerParams: headerParams - authSettings: authSettings - requestContentType: requestContentType - responseContentType: responseContentType - responseType: @"NSString*" - completionBlock: ^(id data, NSError *error) { - - completionBlock((NSString*)data, error); - } + return [self.apiClient requestWithPath: resourcePath + method: @"GET" + pathParams: pathParams + queryParams: queryParams + formParams: formParams + files: files + body: bodyParam + headerParams: headerParams + authSettings: authSettings + requestContentType: requestContentType + responseContentType: responseContentType + responseType: @"NSString*" + completionBlock: ^(id data, NSError *error) { + handler((NSString*)data, error); + } ]; } @@ -870,10 +843,8 @@ static SWGPetApi* singletonAPI = nil; /// /// @returns void /// --(NSNumber*) addPetUsingByteArrayWithCompletionBlock: (NSString*) body - - - completionHandler: (void (^)(NSError* error))completionBlock { +-(NSNumber*) addPetUsingByteArrayWithBody: (NSString*) body + completionHandler: (void (^)(NSError* error)) handler { @@ -922,22 +893,21 @@ static SWGPetApi* singletonAPI = nil; - return [self.apiClient requestWithCompletionBlock: resourcePath - method: @"POST" - pathParams: pathParams - queryParams: queryParams - formParams: formParams - files: files - body: bodyParam - headerParams: headerParams - authSettings: authSettings - requestContentType: requestContentType - responseContentType: responseContentType - responseType: nil - completionBlock: ^(id data, NSError *error) { - completionBlock(error); - - } + return [self.apiClient requestWithPath: resourcePath + method: @"POST" + pathParams: pathParams + queryParams: queryParams + formParams: formParams + files: files + body: bodyParam + headerParams: headerParams + authSettings: authSettings + requestContentType: requestContentType + responseContentType: responseContentType + responseType: nil + completionBlock: ^(id data, NSError *error) { + handler(error); + } ]; } diff --git a/samples/client/petstore/objc/SwaggerClient/SWGStoreApi.h b/samples/client/petstore/objc/SwaggerClient/SWGStoreApi.h index e1c644ef5f4..3ec48439054 100644 --- a/samples/client/petstore/objc/SwaggerClient/SWGStoreApi.h +++ b/samples/client/petstore/objc/SwaggerClient/SWGStoreApi.h @@ -27,9 +27,8 @@ /// /// /// @return NSDictionary* /* NSString, NSNumber */ --(NSNumber*) getInventoryWithCompletionBlock : - (void (^)(NSDictionary* /* NSString, NSNumber */ output, NSError* error))completionBlock; - +-(NSNumber*) getInventoryWithCompletionHandler: + (void (^)(NSDictionary* /* NSString, NSNumber */ output, NSError* error)) handler; /// @@ -41,10 +40,8 @@ /// /// /// @return SWGOrder* --(NSNumber*) placeOrderWithCompletionBlock :(SWGOrder*) body - - completionHandler: (void (^)(SWGOrder* output, NSError* error))completionBlock; - +-(NSNumber*) placeOrderWithBody: (SWGOrder*) body + completionHandler: (void (^)(SWGOrder* output, NSError* error)) handler; /// @@ -56,10 +53,8 @@ /// /// /// @return SWGOrder* --(NSNumber*) getOrderByIdWithCompletionBlock :(NSString*) orderId - - completionHandler: (void (^)(SWGOrder* output, NSError* error))completionBlock; - +-(NSNumber*) getOrderByIdWithOrderId: (NSString*) orderId + completionHandler: (void (^)(SWGOrder* output, NSError* error)) handler; /// @@ -71,10 +66,8 @@ /// /// /// @return --(NSNumber*) deleteOrderWithCompletionBlock :(NSString*) orderId - - - completionHandler: (void (^)(NSError* error))completionBlock; +-(NSNumber*) deleteOrderWithOrderId: (NSString*) orderId + completionHandler: (void (^)(NSError* error)) handler; diff --git a/samples/client/petstore/objc/SwaggerClient/SWGStoreApi.m b/samples/client/petstore/objc/SwaggerClient/SWGStoreApi.m index 5fdf86b43af..8e97946295c 100644 --- a/samples/client/petstore/objc/SwaggerClient/SWGStoreApi.m +++ b/samples/client/petstore/objc/SwaggerClient/SWGStoreApi.m @@ -74,9 +74,8 @@ static SWGStoreApi* singletonAPI = nil; /// Returns a map of status codes to quantities /// @returns NSDictionary* /* NSString, NSNumber */ /// --(NSNumber*) getInventoryWithCompletionBlock: - (void (^)(NSDictionary* /* NSString, NSNumber */ output, NSError* error))completionBlock { - +-(NSNumber*) getInventoryWithCompletionHandler: + (void (^)(NSDictionary* /* NSString, NSNumber */ output, NSError* error)) handler { @@ -125,22 +124,21 @@ static SWGStoreApi* singletonAPI = nil; - return [self.apiClient requestWithCompletionBlock: resourcePath - method: @"GET" - pathParams: pathParams - queryParams: queryParams - formParams: formParams - files: files - body: bodyParam - headerParams: headerParams - authSettings: authSettings - requestContentType: requestContentType - responseContentType: responseContentType - responseType: @"NSDictionary* /* NSString, NSNumber */" - completionBlock: ^(id data, NSError *error) { - - completionBlock((NSDictionary* /* NSString, NSNumber */)data, error); - } + return [self.apiClient requestWithPath: resourcePath + method: @"GET" + pathParams: pathParams + queryParams: queryParams + formParams: formParams + files: files + body: bodyParam + headerParams: headerParams + authSettings: authSettings + requestContentType: requestContentType + responseContentType: responseContentType + responseType: @"NSDictionary* /* NSString, NSNumber */" + completionBlock: ^(id data, NSError *error) { + handler((NSDictionary* /* NSString, NSNumber */)data, error); + } ]; } @@ -151,10 +149,8 @@ static SWGStoreApi* singletonAPI = nil; /// /// @returns SWGOrder* /// --(NSNumber*) placeOrderWithCompletionBlock: (SWGOrder*) body - - completionHandler: (void (^)(SWGOrder* output, NSError* error))completionBlock { - +-(NSNumber*) placeOrderWithBody: (SWGOrder*) body + completionHandler: (void (^)(SWGOrder* output, NSError* error)) handler { @@ -203,22 +199,21 @@ static SWGStoreApi* singletonAPI = nil; - return [self.apiClient requestWithCompletionBlock: resourcePath - method: @"POST" - pathParams: pathParams - queryParams: queryParams - formParams: formParams - files: files - body: bodyParam - headerParams: headerParams - authSettings: authSettings - requestContentType: requestContentType - responseContentType: responseContentType - responseType: @"SWGOrder*" - completionBlock: ^(id data, NSError *error) { - - completionBlock((SWGOrder*)data, error); - } + return [self.apiClient requestWithPath: resourcePath + method: @"POST" + pathParams: pathParams + queryParams: queryParams + formParams: formParams + files: files + body: bodyParam + headerParams: headerParams + authSettings: authSettings + requestContentType: requestContentType + responseContentType: responseContentType + responseType: @"SWGOrder*" + completionBlock: ^(id data, NSError *error) { + handler((SWGOrder*)data, error); + } ]; } @@ -229,10 +224,8 @@ static SWGStoreApi* singletonAPI = nil; /// /// @returns SWGOrder* /// --(NSNumber*) getOrderByIdWithCompletionBlock: (NSString*) orderId - - completionHandler: (void (^)(SWGOrder* output, NSError* error))completionBlock { - +-(NSNumber*) getOrderByIdWithOrderId: (NSString*) orderId + completionHandler: (void (^)(SWGOrder* output, NSError* error)) handler { // verify the required parameter 'orderId' is set @@ -289,22 +282,21 @@ static SWGStoreApi* singletonAPI = nil; - return [self.apiClient requestWithCompletionBlock: resourcePath - method: @"GET" - pathParams: pathParams - queryParams: queryParams - formParams: formParams - files: files - body: bodyParam - headerParams: headerParams - authSettings: authSettings - requestContentType: requestContentType - responseContentType: responseContentType - responseType: @"SWGOrder*" - completionBlock: ^(id data, NSError *error) { - - completionBlock((SWGOrder*)data, error); - } + return [self.apiClient requestWithPath: resourcePath + method: @"GET" + pathParams: pathParams + queryParams: queryParams + formParams: formParams + files: files + body: bodyParam + headerParams: headerParams + authSettings: authSettings + requestContentType: requestContentType + responseContentType: responseContentType + responseType: @"SWGOrder*" + completionBlock: ^(id data, NSError *error) { + handler((SWGOrder*)data, error); + } ]; } @@ -315,10 +307,8 @@ static SWGStoreApi* singletonAPI = nil; /// /// @returns void /// --(NSNumber*) deleteOrderWithCompletionBlock: (NSString*) orderId - - - completionHandler: (void (^)(NSError* error))completionBlock { +-(NSNumber*) deleteOrderWithOrderId: (NSString*) orderId + completionHandler: (void (^)(NSError* error)) handler { // verify the required parameter 'orderId' is set @@ -375,22 +365,21 @@ static SWGStoreApi* singletonAPI = nil; - return [self.apiClient requestWithCompletionBlock: resourcePath - method: @"DELETE" - pathParams: pathParams - queryParams: queryParams - formParams: formParams - files: files - body: bodyParam - headerParams: headerParams - authSettings: authSettings - requestContentType: requestContentType - responseContentType: responseContentType - responseType: nil - completionBlock: ^(id data, NSError *error) { - completionBlock(error); - - } + return [self.apiClient requestWithPath: resourcePath + method: @"DELETE" + pathParams: pathParams + queryParams: queryParams + formParams: formParams + files: files + body: bodyParam + headerParams: headerParams + authSettings: authSettings + requestContentType: requestContentType + responseContentType: responseContentType + responseType: nil + completionBlock: ^(id data, NSError *error) { + handler(error); + } ]; } diff --git a/samples/client/petstore/objc/SwaggerClient/SWGUserApi.h b/samples/client/petstore/objc/SwaggerClient/SWGUserApi.h index 21f314684fd..96c0b71da60 100644 --- a/samples/client/petstore/objc/SwaggerClient/SWGUserApi.h +++ b/samples/client/petstore/objc/SwaggerClient/SWGUserApi.h @@ -28,10 +28,8 @@ /// /// /// @return --(NSNumber*) createUserWithCompletionBlock :(SWGUser*) body - - - completionHandler: (void (^)(NSError* error))completionBlock; +-(NSNumber*) createUserWithBody: (SWGUser*) body + completionHandler: (void (^)(NSError* error)) handler; /// @@ -43,10 +41,8 @@ /// /// /// @return --(NSNumber*) createUsersWithArrayInputWithCompletionBlock :(NSArray*) body - - - completionHandler: (void (^)(NSError* error))completionBlock; +-(NSNumber*) createUsersWithArrayInputWithBody: (NSArray*) body + completionHandler: (void (^)(NSError* error)) handler; /// @@ -58,10 +54,8 @@ /// /// /// @return --(NSNumber*) createUsersWithListInputWithCompletionBlock :(NSArray*) body - - - completionHandler: (void (^)(NSError* error))completionBlock; +-(NSNumber*) createUsersWithListInputWithBody: (NSArray*) body + completionHandler: (void (^)(NSError* error)) handler; /// @@ -74,11 +68,9 @@ /// /// /// @return NSString* --(NSNumber*) loginUserWithCompletionBlock :(NSString*) username - password:(NSString*) password - - completionHandler: (void (^)(NSString* output, NSError* error))completionBlock; - +-(NSNumber*) loginUserWithUsername: (NSString*) username + password: (NSString*) password + completionHandler: (void (^)(NSString* output, NSError* error)) handler; /// @@ -89,9 +81,8 @@ /// /// /// @return --(NSNumber*) logoutUserWithCompletionBlock : - - (void (^)(NSError* error))completionBlock; +-(NSNumber*) logoutUserWithCompletionHandler: + (void (^)(NSError* error)) handler; /// @@ -103,10 +94,8 @@ /// /// /// @return SWGUser* --(NSNumber*) getUserByNameWithCompletionBlock :(NSString*) username - - completionHandler: (void (^)(SWGUser* output, NSError* error))completionBlock; - +-(NSNumber*) getUserByNameWithUsername: (NSString*) username + completionHandler: (void (^)(SWGUser* output, NSError* error)) handler; /// @@ -119,11 +108,9 @@ /// /// /// @return --(NSNumber*) updateUserWithCompletionBlock :(NSString*) username - body:(SWGUser*) body - - - completionHandler: (void (^)(NSError* error))completionBlock; +-(NSNumber*) updateUserWithUsername: (NSString*) username + body: (SWGUser*) body + completionHandler: (void (^)(NSError* error)) handler; /// @@ -135,10 +122,8 @@ /// /// /// @return --(NSNumber*) deleteUserWithCompletionBlock :(NSString*) username - - - completionHandler: (void (^)(NSError* error))completionBlock; +-(NSNumber*) deleteUserWithUsername: (NSString*) username + completionHandler: (void (^)(NSError* error)) handler; diff --git a/samples/client/petstore/objc/SwaggerClient/SWGUserApi.m b/samples/client/petstore/objc/SwaggerClient/SWGUserApi.m index faf0f928baf..c092e1e3e5a 100644 --- a/samples/client/petstore/objc/SwaggerClient/SWGUserApi.m +++ b/samples/client/petstore/objc/SwaggerClient/SWGUserApi.m @@ -76,10 +76,8 @@ static SWGUserApi* singletonAPI = nil; /// /// @returns void /// --(NSNumber*) createUserWithCompletionBlock: (SWGUser*) body - - - completionHandler: (void (^)(NSError* error))completionBlock { +-(NSNumber*) createUserWithBody: (SWGUser*) body + completionHandler: (void (^)(NSError* error)) handler { @@ -128,22 +126,21 @@ static SWGUserApi* singletonAPI = nil; - return [self.apiClient requestWithCompletionBlock: resourcePath - method: @"POST" - pathParams: pathParams - queryParams: queryParams - formParams: formParams - files: files - body: bodyParam - headerParams: headerParams - authSettings: authSettings - requestContentType: requestContentType - responseContentType: responseContentType - responseType: nil - completionBlock: ^(id data, NSError *error) { - completionBlock(error); - - } + return [self.apiClient requestWithPath: resourcePath + method: @"POST" + pathParams: pathParams + queryParams: queryParams + formParams: formParams + files: files + body: bodyParam + headerParams: headerParams + authSettings: authSettings + requestContentType: requestContentType + responseContentType: responseContentType + responseType: nil + completionBlock: ^(id data, NSError *error) { + handler(error); + } ]; } @@ -154,10 +151,8 @@ static SWGUserApi* singletonAPI = nil; /// /// @returns void /// --(NSNumber*) createUsersWithArrayInputWithCompletionBlock: (NSArray*) body - - - completionHandler: (void (^)(NSError* error))completionBlock { +-(NSNumber*) createUsersWithArrayInputWithBody: (NSArray*) body + completionHandler: (void (^)(NSError* error)) handler { @@ -206,22 +201,21 @@ static SWGUserApi* singletonAPI = nil; - return [self.apiClient requestWithCompletionBlock: resourcePath - method: @"POST" - pathParams: pathParams - queryParams: queryParams - formParams: formParams - files: files - body: bodyParam - headerParams: headerParams - authSettings: authSettings - requestContentType: requestContentType - responseContentType: responseContentType - responseType: nil - completionBlock: ^(id data, NSError *error) { - completionBlock(error); - - } + return [self.apiClient requestWithPath: resourcePath + method: @"POST" + pathParams: pathParams + queryParams: queryParams + formParams: formParams + files: files + body: bodyParam + headerParams: headerParams + authSettings: authSettings + requestContentType: requestContentType + responseContentType: responseContentType + responseType: nil + completionBlock: ^(id data, NSError *error) { + handler(error); + } ]; } @@ -232,10 +226,8 @@ static SWGUserApi* singletonAPI = nil; /// /// @returns void /// --(NSNumber*) createUsersWithListInputWithCompletionBlock: (NSArray*) body - - - completionHandler: (void (^)(NSError* error))completionBlock { +-(NSNumber*) createUsersWithListInputWithBody: (NSArray*) body + completionHandler: (void (^)(NSError* error)) handler { @@ -284,22 +276,21 @@ static SWGUserApi* singletonAPI = nil; - return [self.apiClient requestWithCompletionBlock: resourcePath - method: @"POST" - pathParams: pathParams - queryParams: queryParams - formParams: formParams - files: files - body: bodyParam - headerParams: headerParams - authSettings: authSettings - requestContentType: requestContentType - responseContentType: responseContentType - responseType: nil - completionBlock: ^(id data, NSError *error) { - completionBlock(error); - - } + return [self.apiClient requestWithPath: resourcePath + method: @"POST" + pathParams: pathParams + queryParams: queryParams + formParams: formParams + files: files + body: bodyParam + headerParams: headerParams + authSettings: authSettings + requestContentType: requestContentType + responseContentType: responseContentType + responseType: nil + completionBlock: ^(id data, NSError *error) { + handler(error); + } ]; } @@ -312,11 +303,9 @@ static SWGUserApi* singletonAPI = nil; /// /// @returns NSString* /// --(NSNumber*) loginUserWithCompletionBlock: (NSString*) username - password: (NSString*) password - - completionHandler: (void (^)(NSString* output, NSError* error))completionBlock { - +-(NSNumber*) loginUserWithUsername: (NSString*) username + password: (NSString*) password + completionHandler: (void (^)(NSString* output, NSError* error)) handler { @@ -373,22 +362,21 @@ static SWGUserApi* singletonAPI = nil; - return [self.apiClient requestWithCompletionBlock: resourcePath - method: @"GET" - pathParams: pathParams - queryParams: queryParams - formParams: formParams - files: files - body: bodyParam - headerParams: headerParams - authSettings: authSettings - requestContentType: requestContentType - responseContentType: responseContentType - responseType: @"NSString*" - completionBlock: ^(id data, NSError *error) { - - completionBlock((NSString*)data, error); - } + return [self.apiClient requestWithPath: resourcePath + method: @"GET" + pathParams: pathParams + queryParams: queryParams + formParams: formParams + files: files + body: bodyParam + headerParams: headerParams + authSettings: authSettings + requestContentType: requestContentType + responseContentType: responseContentType + responseType: @"NSString*" + completionBlock: ^(id data, NSError *error) { + handler((NSString*)data, error); + } ]; } @@ -397,9 +385,8 @@ static SWGUserApi* singletonAPI = nil; /// /// @returns void /// --(NSNumber*) logoutUserWithCompletionBlock: - - (void (^)(NSError* error))completionBlock { +-(NSNumber*) logoutUserWithCompletionHandler: + (void (^)(NSError* error)) handler { @@ -448,22 +435,21 @@ static SWGUserApi* singletonAPI = nil; - return [self.apiClient requestWithCompletionBlock: resourcePath - method: @"GET" - pathParams: pathParams - queryParams: queryParams - formParams: formParams - files: files - body: bodyParam - headerParams: headerParams - authSettings: authSettings - requestContentType: requestContentType - responseContentType: responseContentType - responseType: nil - completionBlock: ^(id data, NSError *error) { - completionBlock(error); - - } + return [self.apiClient requestWithPath: resourcePath + method: @"GET" + pathParams: pathParams + queryParams: queryParams + formParams: formParams + files: files + body: bodyParam + headerParams: headerParams + authSettings: authSettings + requestContentType: requestContentType + responseContentType: responseContentType + responseType: nil + completionBlock: ^(id data, NSError *error) { + handler(error); + } ]; } @@ -474,10 +460,8 @@ static SWGUserApi* singletonAPI = nil; /// /// @returns SWGUser* /// --(NSNumber*) getUserByNameWithCompletionBlock: (NSString*) username - - completionHandler: (void (^)(SWGUser* output, NSError* error))completionBlock { - +-(NSNumber*) getUserByNameWithUsername: (NSString*) username + completionHandler: (void (^)(SWGUser* output, NSError* error)) handler { // verify the required parameter 'username' is set @@ -534,22 +518,21 @@ static SWGUserApi* singletonAPI = nil; - return [self.apiClient requestWithCompletionBlock: resourcePath - method: @"GET" - pathParams: pathParams - queryParams: queryParams - formParams: formParams - files: files - body: bodyParam - headerParams: headerParams - authSettings: authSettings - requestContentType: requestContentType - responseContentType: responseContentType - responseType: @"SWGUser*" - completionBlock: ^(id data, NSError *error) { - - completionBlock((SWGUser*)data, error); - } + return [self.apiClient requestWithPath: resourcePath + method: @"GET" + pathParams: pathParams + queryParams: queryParams + formParams: formParams + files: files + body: bodyParam + headerParams: headerParams + authSettings: authSettings + requestContentType: requestContentType + responseContentType: responseContentType + responseType: @"SWGUser*" + completionBlock: ^(id data, NSError *error) { + handler((SWGUser*)data, error); + } ]; } @@ -562,11 +545,9 @@ static SWGUserApi* singletonAPI = nil; /// /// @returns void /// --(NSNumber*) updateUserWithCompletionBlock: (NSString*) username - body: (SWGUser*) body - - - completionHandler: (void (^)(NSError* error))completionBlock { +-(NSNumber*) updateUserWithUsername: (NSString*) username + body: (SWGUser*) body + completionHandler: (void (^)(NSError* error)) handler { // verify the required parameter 'username' is set @@ -623,22 +604,21 @@ static SWGUserApi* singletonAPI = nil; - return [self.apiClient requestWithCompletionBlock: resourcePath - method: @"PUT" - pathParams: pathParams - queryParams: queryParams - formParams: formParams - files: files - body: bodyParam - headerParams: headerParams - authSettings: authSettings - requestContentType: requestContentType - responseContentType: responseContentType - responseType: nil - completionBlock: ^(id data, NSError *error) { - completionBlock(error); - - } + return [self.apiClient requestWithPath: resourcePath + method: @"PUT" + pathParams: pathParams + queryParams: queryParams + formParams: formParams + files: files + body: bodyParam + headerParams: headerParams + authSettings: authSettings + requestContentType: requestContentType + responseContentType: responseContentType + responseType: nil + completionBlock: ^(id data, NSError *error) { + handler(error); + } ]; } @@ -649,10 +629,8 @@ static SWGUserApi* singletonAPI = nil; /// /// @returns void /// --(NSNumber*) deleteUserWithCompletionBlock: (NSString*) username - - - completionHandler: (void (^)(NSError* error))completionBlock { +-(NSNumber*) deleteUserWithUsername: (NSString*) username + completionHandler: (void (^)(NSError* error)) handler { // verify the required parameter 'username' is set @@ -709,22 +687,21 @@ static SWGUserApi* singletonAPI = nil; - return [self.apiClient requestWithCompletionBlock: resourcePath - method: @"DELETE" - pathParams: pathParams - queryParams: queryParams - formParams: formParams - files: files - body: bodyParam - headerParams: headerParams - authSettings: authSettings - requestContentType: requestContentType - responseContentType: responseContentType - responseType: nil - completionBlock: ^(id data, NSError *error) { - completionBlock(error); - - } + return [self.apiClient requestWithPath: resourcePath + method: @"DELETE" + pathParams: pathParams + queryParams: queryParams + formParams: formParams + files: files + body: bodyParam + headerParams: headerParams + authSettings: authSettings + requestContentType: requestContentType + responseContentType: responseContentType + responseType: nil + completionBlock: ^(id data, NSError *error) { + handler(error); + } ]; } diff --git a/samples/client/petstore/objc/SwaggerClientTests/SwaggerClient/SWGViewController.m b/samples/client/petstore/objc/SwaggerClientTests/SwaggerClient/SWGViewController.m index ec80b4e52b1..57fd9828e03 100644 --- a/samples/client/petstore/objc/SwaggerClientTests/SwaggerClient/SWGViewController.m +++ b/samples/client/petstore/objc/SwaggerClientTests/SwaggerClient/SWGViewController.m @@ -27,7 +27,7 @@ SWGPetApi *api = [[SWGPetApi alloc] init]; NSURL *file = [NSURL fileURLWithPath:@"/Users/geekerzp/tmp/test.jpg"]; - [api uploadFileWithCompletionBlock:@2 additionalMetadata:@2 file:file completionHandler:^(NSError *error) { + [api uploadFileWithPetId:@2 additionalMetadata:@2 file:file completionHandler:^(NSError *error) { NSLog(@"*** error: %@", error); }]; } diff --git a/samples/client/petstore/objc/SwaggerClientTests/Tests/PetApiTest.m b/samples/client/petstore/objc/SwaggerClientTests/Tests/PetApiTest.m index 421292bbf10..7fd3d4f97c8 100644 --- a/samples/client/petstore/objc/SwaggerClientTests/Tests/PetApiTest.m +++ b/samples/client/petstore/objc/SwaggerClientTests/Tests/PetApiTest.m @@ -35,12 +35,12 @@ XCTestExpectation *expectation = [self expectationWithDescription:@"testGetPetById"]; SWGPet* pet = [self createPet]; - [api addPetWithCompletionBlock:pet completionHandler:^(NSError *error) { + [api addPetWithBody:pet completionHandler:^(NSError *error) { if(error){ XCTFail(@"got error %@", error); } NSLog(@"%@", [pet _id]); - [api getPetByIdWithCompletionBlock:[pet _id] completionHandler:^(SWGPet *output, NSError *error) { + [api getPetByIdWithPetId:[pet _id] completionHandler:^(SWGPet *output, NSError *error) { if(error){ XCTFail(@"got error %@", error); } @@ -75,12 +75,12 @@ XCTestExpectation *expectation = [self expectationWithDescription:@"testUpdatePet"]; SWGPet* pet = [self createPet]; - [api addPetWithCompletionBlock:pet completionHandler:^(NSError *error) { + [api addPetWithBody:pet completionHandler:^(NSError *error) { if(error) { XCTFail(@"got error %@", error); } else { - [api getPetByIdWithCompletionBlock:[NSString stringWithFormat:@"%@",[pet _id]] completionHandler:^(SWGPet *output, NSError *error) { + [api getPetByIdWithPetId:[pet _id] completionHandler:^(SWGPet *output, NSError *error) { if(error) { XCTFail(@"got error %@", error); } @@ -94,12 +94,12 @@ [pet setName:@"programmer"]; [pet setStatus:@"confused"]; - [api updatePetWithCompletionBlock:pet + [api updatePetWithBody:pet completionHandler:^(NSError *error) { if(error) { XCTFail(@"got error %@", error); } - [api getPetByIdWithCompletionBlock:[pet _id] completionHandler:^(SWGPet *output, NSError *error) { + [api getPetByIdWithPetId:[pet _id] completionHandler:^(SWGPet *output, NSError *error) { if(error) { XCTFail(@"got error %@", error); } @@ -167,13 +167,13 @@ which causes an exception when deserializing the data NSLog(@"%@", pet._id); pet.tags = [[NSArray alloc] initWithObjects:tag, nil]; - [api addPetWithCompletionBlock:pet completionHandler:^(NSError *error) { + [api addPetWithBody:pet completionHandler:^(NSError *error) { if(error) { XCTFail(@"got error %@", error); } NSArray* tags = [[NSArray alloc] initWithObjects:@"tony", nil]; - [api findPetsByTagsWithCompletionBlock:tags completionHandler:^(NSArray *output, NSError *error) { + [api findPetsByTagsWithTags:tags completionHandler:^(NSArray *output, NSError *error) { if(error){ XCTFail(@"got error %@", error); } @@ -200,15 +200,15 @@ which causes an exception when deserializing the data SWGPet* pet = [self createPet]; - [api addPetWithCompletionBlock:pet completionHandler:^(NSError *error) { + [api addPetWithBody:pet completionHandler:^(NSError *error) { if(error){ XCTFail(@"got error %@", error); } - [api deletePetWithCompletionBlock:pet._id apiKey:@"" completionHandler:^(NSError *error) { + [api deletePetWithPetId:pet._id apiKey:@"" completionHandler:^(NSError *error) { if(error){ XCTFail(@"got error %@", error); } - [api getPetByIdWithCompletionBlock:[pet _id] completionHandler:^(SWGPet *output, NSError *error) { + [api getPetByIdWithPetId:[pet _id] completionHandler:^(SWGPet *output, NSError *error) { if(error) { // good [expectation fulfill]; @@ -228,7 +228,7 @@ which causes an exception when deserializing the data NSURL *fileURL = [self createTempFile]; - [api uploadFileWithCompletionBlock:@1 additionalMetadata:@"special-metadata" file:fileURL completionHandler:^(NSError *error) { + [api uploadFileWithPetId:@1 additionalMetadata:@"special-metadata" file:fileURL completionHandler:^(NSError *error) { if(error) { // good XCTFail(@"expected a failure"); @@ -246,7 +246,7 @@ which causes an exception when deserializing the data NSURL *fileURL = [self createTempFile]; - [api uploadFileWithCompletionBlock:@1 additionalMetadata:nil file:fileURL completionHandler:^(NSError *error) { + [api uploadFileWithPetId:@1 additionalMetadata:nil file:fileURL completionHandler:^(NSError *error) { if (error) { XCTFail(@"expected a failure"); } @@ -261,7 +261,7 @@ which causes an exception when deserializing the data - (void)TestUploadWithoutFile { XCTestExpectation *expectation = [self expectationWithDescription:@"testUploadWithoutFile"]; - [api uploadFileWithCompletionBlock:@1 additionalMetadata:@"special-metadata" file:nil completionHandler:^(NSError *error) { + [api uploadFileWithPetId:@1 additionalMetadata:@"special-metadata" file:nil completionHandler:^(NSError *error) { if(error) { XCTFail(@"failed to upload"); diff --git a/samples/client/petstore/objc/SwaggerClientTests/Tests/StoreApiTest.m b/samples/client/petstore/objc/SwaggerClientTests/Tests/StoreApiTest.m index 9a250e1cb3a..334258fdaf1 100644 --- a/samples/client/petstore/objc/SwaggerClientTests/Tests/StoreApiTest.m +++ b/samples/client/petstore/objc/SwaggerClientTests/Tests/StoreApiTest.m @@ -22,7 +22,7 @@ - (void)testGetInventory { XCTestExpectation *expectation = [self expectationWithDescription:@"testGetPetByStatus"]; - [self.api getInventoryWithCompletionBlock:^(NSDictionary *output, NSError *error) { + [self.api getInventoryWithCompletionHandler:^(NSDictionary *output, NSError *error) { if (error) { XCTFail(@"got error %@", error); diff --git a/samples/client/petstore/objc/SwaggerClientTests/Tests/UserApiTest.m b/samples/client/petstore/objc/SwaggerClientTests/Tests/UserApiTest.m index 620a6922e9f..e9123647b75 100644 --- a/samples/client/petstore/objc/SwaggerClientTests/Tests/UserApiTest.m +++ b/samples/client/petstore/objc/SwaggerClientTests/Tests/UserApiTest.m @@ -22,7 +22,7 @@ - (void)testLoginUser { XCTestExpectation *expectation = [self expectationWithDescription:@"test login user"]; - [self.api loginUserWithCompletionBlock:@"test username" password:@"test password" completionHandler:^(NSString *output, NSError *error) { + [self.api loginUserWithUsername:@"test username" password:@"test password" completionHandler:^(NSString *output, NSError *error) { if (error) { XCTFail(@"got error %@", error); } From 8d9b08bee1e1640fd6916ea2893b5271c998fd44 Mon Sep 17 00:00:00 2001 From: RaGe Date: Mon, 15 Feb 2016 22:52:11 -0500 Subject: [PATCH 150/189] fixed typo --- modules/swagger-codegen/src/main/resources/Java/README.mustache | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/resources/Java/README.mustache b/modules/swagger-codegen/src/main/resources/Java/README.mustache index 7ce9bac3ca0..50e2cf3fbe9 100644 --- a/modules/swagger-codegen/src/main/resources/Java/README.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/README.mustache @@ -20,7 +20,7 @@ mvn deploy Refer to the [official documentation](https://maven.apache.org/plugins/maven-deploy-plugin/usage.html) for more information. -After the client libarary is installed/deployed, you can use it in your Maven project by adding the following to your *pom.xml*: +After the client library is installed/deployed, you can use it in your Maven project by adding the following to your *pom.xml*: ```xml From a4825d814233e13e9bba9d1cea9d30b04f70212b Mon Sep 17 00:00:00 2001 From: wing328 Date: Tue, 16 Feb 2016 17:17:42 +0800 Subject: [PATCH 151/189] add multi auth setting (based on #1961) --- .../io/swagger/codegen/DefaultGenerator.java | 48 ++++++++++--------- .../swagger/codegen/DefaultGeneratorTest.java | 30 ++++++++++-- .../src/test/resources/2_0/petstore.json | 38 ++++++++++++++- .../php/SwaggerClient-php/lib/Api/PetApi.php | 10 ++++ .../SwaggerClient-php/lib/Api/StoreApi.php | 28 +++++++++++ 5 files changed, 124 insertions(+), 30 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java index 94716051020..f315c0c3540 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java @@ -618,30 +618,32 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { // https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#swagger-object // "there is a logical OR between the security requirements" if (securities.size() > 1) { - LOGGER.warn("More than 1 security requirements are found, using only the first one"); + // LOGGER.warn("More than 1 security requirements are found, using only the first one"); } - Map> security = securities.get(0); - for (String securityName : security.keySet()) { - SecuritySchemeDefinition securityDefinition = fromSecurity(securityName); - if (securityDefinition != null) { - if(securityDefinition instanceof OAuth2Definition) { - OAuth2Definition oauth2Definition = (OAuth2Definition) securityDefinition; - OAuth2Definition oauth2Operation = new OAuth2Definition(); - oauth2Operation.setType(oauth2Definition.getType()); - oauth2Operation.setAuthorizationUrl(oauth2Definition.getAuthorizationUrl()); - oauth2Operation.setFlow(oauth2Definition.getFlow()); - oauth2Operation.setTokenUrl(oauth2Definition.getTokenUrl()); - oauth2Operation.setScopes(new HashMap()); - for (String scope : security.get(securityName)) { - if (oauth2Definition.getScopes().containsKey(scope)) { - oauth2Operation.addScope(scope, oauth2Definition.getScopes().get(scope)); - } - } - authMethods.put(securityName, oauth2Operation); - } else { - authMethods.put(securityName, securityDefinition); - } - } + //Map> security = securities.get(0); + for (Map> security: securities) { + for (String securityName : security.keySet()) { + SecuritySchemeDefinition securityDefinition = fromSecurity(securityName); + if (securityDefinition != null) { + if(securityDefinition instanceof OAuth2Definition) { + OAuth2Definition oauth2Definition = (OAuth2Definition) securityDefinition; + OAuth2Definition oauth2Operation = new OAuth2Definition(); + oauth2Operation.setType(oauth2Definition.getType()); + oauth2Operation.setAuthorizationUrl(oauth2Definition.getAuthorizationUrl()); + oauth2Operation.setFlow(oauth2Definition.getFlow()); + oauth2Operation.setTokenUrl(oauth2Definition.getTokenUrl()); + oauth2Operation.setScopes(new HashMap()); + for (String scope : security.get(securityName)) { + if (oauth2Definition.getScopes().containsKey(scope)) { + oauth2Operation.addScope(scope, oauth2Definition.getScopes().get(scope)); + } + } + authMethods.put(securityName, oauth2Operation); + } else { + authMethods.put(securityName, securityDefinition); + } + } + } } if (!authMethods.isEmpty()) { co.authMethods = config.fromSecurity(authMethods); diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/DefaultGeneratorTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/DefaultGeneratorTest.java index 67f40c0cd93..bfc25b8f5cc 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/DefaultGeneratorTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/DefaultGeneratorTest.java @@ -52,12 +52,23 @@ public class DefaultGeneratorTest { gen.opts(clientOptInput); Map> paths = gen.processPaths(swagger.getPaths()); - CodegenSecurity apiKey, petstoreAuth; + CodegenSecurity cs, apiKey, petstoreAuth; // security of "getPetById": api_key CodegenOperation getPetById = findCodegenOperationByOperationId(paths, "getPetById"); - assertEquals(getPetById.authMethods.size(), 1); - apiKey = getPetById.authMethods.iterator().next(); + assertEquals(getPetById.authMethods.size(), 2); + cs = getPetById.authMethods.get(0); + if ("api_key".equals(cs.name)) { + apiKey = cs; + petstoreAuth = getPetById.authMethods.get(1); + } else { + petstoreAuth = cs; + apiKey = getPetById.authMethods.get(1); + } + assertEquals(petstoreAuth.name, "petstore_auth"); + assertEquals(petstoreAuth.type, "oauth2"); + + assertEquals(apiKey.name, "api_key"); assertEquals(apiKey.type, "apiKey"); @@ -88,8 +99,17 @@ public class DefaultGeneratorTest { // security of "getPetById": api_key CodegenOperation getPetById = findCodegenOperationByOperationId(paths, "getPetById"); - assertEquals(getPetById.authMethods.size(), 1); - apiKey = getPetById.authMethods.iterator().next(); + assertEquals(getPetById.authMethods.size(), 2); + cs = getPetById.authMethods.get(0); + if ("api_key".equals(cs.name)) { + apiKey = cs; + petstoreAuth = getPetById.authMethods.get(1); + } else { + petstoreAuth = cs; + apiKey = getPetById.authMethods.get(1); + } + assertEquals(petstoreAuth.type, "oauth2"); + assertEquals(petstoreAuth.name, "petstore_auth"); assertEquals(apiKey.name, "api_key"); assertEquals(apiKey.type, "apiKey"); diff --git a/modules/swagger-codegen/src/test/resources/2_0/petstore.json b/modules/swagger-codegen/src/test/resources/2_0/petstore.json index 703b920db21..b49bd81631e 100644 --- a/modules/swagger-codegen/src/test/resources/2_0/petstore.json +++ b/modules/swagger-codegen/src/test/resources/2_0/petstore.json @@ -559,7 +559,13 @@ "400": { "description": "Invalid Order" } - } + }, + "security": [ + { + "test_api_client_id": [], + "test_api_client_secret": [] + } + ] } }, "/store/order/{orderId}": { @@ -596,7 +602,15 @@ "400": { "description": "Invalid ID supplied" } - } + }, + "security": [ + { + "test_api_key_header": [] + }, + { + "test_api_key_query": [] + } + ] }, "delete": { "tags": [ @@ -915,6 +929,26 @@ "write:pets": "modify pets in your account", "read:pets": "read your pets" } + }, + "test_api_client_id": { + "type": "apiKey", + "name": "x-test_api_client_id", + "in": "header" + }, + "test_api_client_secret": { + "type": "apiKey", + "name": "x-test_api_client_secret", + "in": "header" + }, + "test_api_key_header": { + "type": "apiKey", + "name": "test_api_key_header", + "in": "header" + }, + "test_api_key_query": { + "type": "apiKey", + "name": "test_api_key_query", + "in": "query" } }, "definitions": { diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/Api/PetApi.php b/samples/client/petstore/php/SwaggerClient-php/lib/Api/PetApi.php index ed06acb525e..eb3d198892c 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/Api/PetApi.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/Api/PetApi.php @@ -527,6 +527,11 @@ class PetApi } + // this endpoint requires OAuth (access token) + if (strlen($this->apiClient->getConfig()->getAccessToken()) !== 0) { + $headerParams['Authorization'] = 'Bearer ' . $this->apiClient->getConfig()->getAccessToken(); + } + // make the API Call try { list($response, $statusCode, $httpHeader) = $this->apiClient->callApi( @@ -949,6 +954,11 @@ class PetApi } + // this endpoint requires OAuth (access token) + if (strlen($this->apiClient->getConfig()->getAccessToken()) !== 0) { + $headerParams['Authorization'] = 'Bearer ' . $this->apiClient->getConfig()->getAccessToken(); + } + // make the API Call try { list($response, $statusCode, $httpHeader) = $this->apiClient->callApi( diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/Api/StoreApi.php b/samples/client/petstore/php/SwaggerClient-php/lib/Api/StoreApi.php index 0f67fa63d15..8163ef43b39 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/Api/StoreApi.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/Api/StoreApi.php @@ -240,6 +240,20 @@ class StoreApi $httpBody = $formParams; // for HTTP post (form) } + // this endpoint requires API key authentication + $apiKey = $this->apiClient->getApiKeyWithPrefix('x-test_api_client_id'); + if (strlen($apiKey) !== 0) { + $headerParams['x-test_api_client_id'] = $apiKey; + } + + + // this endpoint requires API key authentication + $apiKey = $this->apiClient->getApiKeyWithPrefix('x-test_api_client_secret'); + if (strlen($apiKey) !== 0) { + $headerParams['x-test_api_client_secret'] = $apiKey; + } + + // make the API Call try { list($response, $statusCode, $httpHeader) = $this->apiClient->callApi( @@ -335,6 +349,20 @@ class StoreApi $httpBody = $formParams; // for HTTP post (form) } + // this endpoint requires API key authentication + $apiKey = $this->apiClient->getApiKeyWithPrefix('test_api_key_header'); + if (strlen($apiKey) !== 0) { + $headerParams['test_api_key_header'] = $apiKey; + } + + + // this endpoint requires API key authentication + $apiKey = $this->apiClient->getApiKeyWithPrefix('test_api_key_query'); + if (strlen($apiKey) !== 0) { + $queryParams['test_api_key_query'] = $apiKey; + } + + // make the API Call try { list($response, $statusCode, $httpHeader) = $this->apiClient->callApi( From 4aa0dc59996c51537b250dfd09c94bdbfb5c19c4 Mon Sep 17 00:00:00 2001 From: wing328 Date: Tue, 16 Feb 2016 20:58:18 +0800 Subject: [PATCH 152/189] remove comment related to security warning (only 1st is used) --- .../main/java/io/swagger/codegen/DefaultGenerator.java | 8 -------- 1 file changed, 8 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java index f315c0c3540..96f0f2146b9 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java @@ -613,14 +613,6 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { continue; } Map authMethods = new HashMap(); - // NOTE: Use only the first security requirement for now. - // See the "security" field of "Swagger Object": - // https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#swagger-object - // "there is a logical OR between the security requirements" - if (securities.size() > 1) { - // LOGGER.warn("More than 1 security requirements are found, using only the first one"); - } - //Map> security = securities.get(0); for (Map> security: securities) { for (String securityName : security.keySet()) { SecuritySchemeDefinition securityDefinition = fromSecurity(securityName); From 04c19403438ee79168da22ed16e46bcfc4359540 Mon Sep 17 00:00:00 2001 From: Vivin Paliath Date: Tue, 16 Feb 2016 09:07:47 -0700 Subject: [PATCH 153/189] Fix for issue #2117 This change adds `this` to field names in `equals` within `pojo.mustache` so that an incorrect `equals` method is not generated in cases where a class has an internal field that is the same as the `classVarName` of the class. --- modules/swagger-codegen/src/main/resources/Java/pojo.mustache | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/resources/Java/pojo.mustache b/modules/swagger-codegen/src/main/resources/Java/pojo.mustache index c8c6b885379..8bbb36a8014 100644 --- a/modules/swagger-codegen/src/main/resources/Java/pojo.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/pojo.mustache @@ -41,7 +41,7 @@ public class {{classname}} {{#parent}}extends {{{parent}}}{{/parent}} {{#seriali } {{classname}} {{classVarName}} = ({{classname}}) o; - return true {{#hasVars}}&& {{#vars}}Objects.equals({{name}}, {{classVarName}}.{{name}}){{#hasMore}} && + return true {{#hasVars}}&& {{#vars}}Objects.equals(this.{{name}}, {{classVarName}}.{{name}}){{#hasMore}} && {{/hasMore}}{{/vars}}{{/hasVars}} {{#parent}}&& super.equals(o){{/parent}}; } From 97640e622ace44e4454d988e3e54de6428221777 Mon Sep 17 00:00:00 2001 From: wing328 Date: Wed, 17 Feb 2016 10:44:23 +0800 Subject: [PATCH 154/189] fix dollar sign in parameter name (C#) --- .../io/swagger/codegen/languages/AbstractCSharpCodegen.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractCSharpCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractCSharpCodegen.java index 2a5d9957fd1..78b5560d53d 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractCSharpCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractCSharpCodegen.java @@ -292,7 +292,7 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen implements Co @Override public String toVarName(String name) { // sanitize name - name = sanitizeName(name); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. + name = sanitizeName(name); // if it's all uppper case, do nothing if (name.matches("^[A-Z_]*$")) { @@ -313,6 +313,9 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen implements Co @Override public String toParamName(String name) { + // sanitize name + name = sanitizeName(name); + // replace - with _ e.g. created-at => created_at name = name.replaceAll("-", "_"); From b2ed17e63e1972fc4898df4d7bb7ba9679fd0269 Mon Sep 17 00:00:00 2001 From: xhh Date: Wed, 17 Feb 2016 18:03:27 +0800 Subject: [PATCH 155/189] Remove unused jackson imports from Java models by fixing the logic of enum Boolean checking. Other changes: * Remove the `true &&` prefix from the `equals` method in models. * Apply some changes of Java-default to Java-okhttp-gson, i.e. adding `this` and parent model handling. * Some improvements on spaces and blank lines. --- .../codegen/languages/JavaClientCodegen.java | 9 ++- .../Java/libraries/okhttp-gson/model.mustache | 11 +-- .../src/main/resources/Java/pojo.mustache | 12 +-- .../client/petstore/java/default/README.md | 2 +- .../client/petstore/java/default/build.gradle | 3 + .../java/io/swagger/client/ApiClient.java | 8 +- .../java/io/swagger/client/api/PetApi.java | 6 +- .../java/io/swagger/client/api/StoreApi.java | 6 +- .../io/swagger/client/model/Category.java | 9 +-- .../java/io/swagger/client/model/Order.java | 16 ++-- .../java/io/swagger/client/model/Pet.java | 16 ++-- .../java/io/swagger/client/model/Tag.java | 9 +-- .../java/io/swagger/client/model/User.java | 21 +++-- .../client/petstore/java/feign/build.gradle | 3 + .../java/io/swagger/client/ApiClient.java | 10 ++- .../java/io/swagger/client/api/PetApi.java | 28 ++++++- .../io/swagger/client/model/Category.java | 27 ++++--- .../java/io/swagger/client/model/Order.java | 62 ++++++++++---- .../java/io/swagger/client/model/Pet.java | 62 ++++++++++---- .../java/io/swagger/client/model/Tag.java | 27 ++++--- .../java/io/swagger/client/model/User.java | 81 ++++++++++++++----- .../client/petstore/java/jersey2/build.gradle | 3 + .../java/io/swagger/client/ApiClient.java | 6 +- .../java/io/swagger/client/api/PetApi.java | 6 +- .../java/io/swagger/client/api/StoreApi.java | 6 +- .../io/swagger/client/model/Category.java | 23 ++++-- .../java/io/swagger/client/model/Order.java | 58 +++++++++---- .../java/io/swagger/client/model/Pet.java | 58 +++++++++---- .../java/io/swagger/client/model/Tag.java | 23 ++++-- .../java/io/swagger/client/model/User.java | 77 +++++++++++++----- .../petstore/java/okhttp-gson/README.md | 2 +- .../java/io/swagger/client/ApiClient.java | 6 +- .../java/io/swagger/client/api/PetApi.java | 4 +- .../java/io/swagger/client/api/StoreApi.java | 4 +- .../io/swagger/client/model/Category.java | 4 +- .../java/io/swagger/client/model/Order.java | 12 +-- .../java/io/swagger/client/model/Pet.java | 12 +-- .../java/io/swagger/client/model/Tag.java | 4 +- .../java/io/swagger/client/model/User.java | 16 ++-- 39 files changed, 505 insertions(+), 247 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java index 67750ea790c..53bcab9d533 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java @@ -9,6 +9,7 @@ import io.swagger.models.Swagger; import io.swagger.models.parameters.FormParameter; import io.swagger.models.parameters.Parameter; import io.swagger.models.properties.*; +import org.apache.commons.lang.BooleanUtils; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -531,18 +532,18 @@ public class JavaClientCodegen extends DefaultCodegen implements CodegenConfig { } } - if(model.isEnum == null || model.isEnum) { + if(!BooleanUtils.toBoolean(model.isEnum)) { // needed by all pojos, but not enums model.imports.add("ApiModelProperty"); model.imports.add("ApiModel"); - // comment out below as it's in the model template + // comment out below as it's in the model template //model.imports.add("Objects"); final String lib = getLibrary(); if(StringUtils.isEmpty(lib) || "feign".equals(lib) || "jersey2".equals(lib)) { model.imports.add("JsonProperty"); - if(model.hasEnums != null || model.hasEnums == true) { + if(BooleanUtils.toBoolean(model.hasEnums)) { model.imports.add("JsonValue"); } } @@ -747,7 +748,7 @@ public class JavaClientCodegen extends DefaultCodegen implements CodegenConfig { } } } - + if(removedChildEnum) { // If we removed an entry from this model's vars, we need to ensure hasMore is updated int count = 0, numVars = codegenProperties.size(); diff --git a/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/model.mustache b/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/model.mustache index ef4a001dd05..e8e74cc815a 100644 --- a/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/model.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/model.mustache @@ -47,16 +47,17 @@ public class {{classname}} {{#parent}}extends {{{parent}}}{{/parent}} {{#seriali } if (o == null || getClass() != o.getClass()) { return false; - } - {{classname}} {{classVarName}} = ({{classname}}) o;{{#hasVars}} - return {{#vars}}Objects.equals({{name}}, {{classVarName}}.{{name}}){{#hasMore}} && - {{/hasMore}}{{^hasMore}};{{/hasMore}}{{/vars}}{{/hasVars}}{{^hasVars}} + }{{#hasVars}} + {{classname}} {{classVarName}} = ({{classname}}) o; + return {{#vars}}Objects.equals(this.{{name}}, {{classVarName}}.{{name}}){{#hasMore}} && + {{/hasMore}}{{/vars}}{{#parent}} && + super.equals(o){{/parent}};{{/hasVars}}{{^hasVars}} return true;{{/hasVars}} } @Override public int hashCode() { - return Objects.hash({{#vars}}{{name}}{{#hasMore}}, {{/hasMore}}{{/vars}}); + return Objects.hash({{#vars}}{{name}}{{#hasMore}}, {{/hasMore}}{{/vars}}{{#parent}}{{#hasVars}}, {{/hasVars}}super.hashCode(){{/parent}}); } @Override diff --git a/modules/swagger-codegen/src/main/resources/Java/pojo.mustache b/modules/swagger-codegen/src/main/resources/Java/pojo.mustache index 8bbb36a8014..4ca33302ee7 100644 --- a/modules/swagger-codegen/src/main/resources/Java/pojo.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/pojo.mustache @@ -38,17 +38,17 @@ public class {{classname}} {{#parent}}extends {{{parent}}}{{/parent}} {{#seriali } if (o == null || getClass() != o.getClass()) { return false; - } + }{{#hasVars}} {{classname}} {{classVarName}} = ({{classname}}) o; - - return true {{#hasVars}}&& {{#vars}}Objects.equals(this.{{name}}, {{classVarName}}.{{name}}){{#hasMore}} && - {{/hasMore}}{{/vars}}{{/hasVars}} - {{#parent}}&& super.equals(o){{/parent}}; + return {{#vars}}Objects.equals(this.{{name}}, {{classVarName}}.{{name}}){{#hasMore}} && + {{/hasMore}}{{/vars}}{{#parent}} && + super.equals(o){{/parent}};{{/hasVars}}{{^hasVars}} + return true;{{/hasVars}} } @Override public int hashCode() { - return Objects.hash({{#vars}}{{name}}{{#hasMore}}, {{/hasMore}}{{/vars}}{{#parent}}{{#hasVars}},{{/hasVars}} super.hashCode(){{/parent}}); + return Objects.hash({{#vars}}{{name}}{{#hasMore}}, {{/hasMore}}{{/vars}}{{#parent}}{{#hasVars}}, {{/hasVars}}super.hashCode(){{/parent}}); } @Override diff --git a/samples/client/petstore/java/default/README.md b/samples/client/petstore/java/default/README.md index 8afc37518fc..cc9672eab41 100644 --- a/samples/client/petstore/java/default/README.md +++ b/samples/client/petstore/java/default/README.md @@ -20,7 +20,7 @@ mvn deploy Refer to the [official documentation](https://maven.apache.org/plugins/maven-deploy-plugin/usage.html) for more information. -After the client libarary is installed/deployed, you can use it in your Maven project by adding the following to your *pom.xml*: +After the client library is installed/deployed, you can use it in your Maven project by adding the following to your *pom.xml*: ```xml diff --git a/samples/client/petstore/java/default/build.gradle b/samples/client/petstore/java/default/build.gradle index b7ccd1df774..7bebf9164bb 100644 --- a/samples/client/petstore/java/default/build.gradle +++ b/samples/client/petstore/java/default/build.gradle @@ -1,3 +1,6 @@ +apply plugin: 'idea' +apply plugin: 'eclipse' + group = 'io.swagger' version = '1.0.0' diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/ApiClient.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/ApiClient.java index 7a4ed1a63b0..d0ff5f3c583 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/ApiClient.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/ApiClient.java @@ -41,7 +41,7 @@ import io.swagger.client.auth.HttpBasicAuth; import io.swagger.client.auth.ApiKeyAuth; import io.swagger.client.auth.OAuth; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-12T18:48:10.013-08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-17T17:16:20.498+08:00") public class ApiClient { private Map defaultHeaderMap = new HashMap(); private String basePath = "http://petstore.swagger.io/v2"; @@ -83,8 +83,12 @@ public class ApiClient { // Setup authentications (key: authentication name, value: authentication). authentications = new HashMap(); - authentications.put("api_key", new ApiKeyAuth("header", "api_key")); authentications.put("petstore_auth", new OAuth()); + authentications.put("test_api_client_id", new ApiKeyAuth("header", "x-test_api_client_id")); + authentications.put("test_api_client_secret", new ApiKeyAuth("header", "x-test_api_client_secret")); + authentications.put("api_key", new ApiKeyAuth("header", "api_key")); + authentications.put("test_api_key_query", new ApiKeyAuth("query", "test_api_key_query")); + authentications.put("test_api_key_header", new ApiKeyAuth("header", "test_api_key_header")); // Prevent the authentications from being modified. authentications = Collections.unmodifiableMap(authentications); } diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/PetApi.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/PetApi.java index bc73e268ef2..06920b07e60 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/PetApi.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/PetApi.java @@ -12,7 +12,7 @@ import java.io.File; import java.util.*; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-12T18:48:10.013-08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-17T17:16:20.498+08:00") public class PetApi { private ApiClient apiClient; @@ -238,7 +238,7 @@ public class PetApi { }; final String contentType = apiClient.selectHeaderContentType(contentTypes); - String[] authNames = new String[] { "api_key" }; + String[] authNames = new String[] { "petstore_auth", "api_key" }; GenericType returnType = new GenericType() {}; @@ -438,7 +438,7 @@ public class PetApi { }; final String contentType = apiClient.selectHeaderContentType(contentTypes); - String[] authNames = new String[] { "api_key" }; + String[] authNames = new String[] { "petstore_auth", "api_key" }; GenericType returnType = new GenericType() {}; diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/StoreApi.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/StoreApi.java index 6b727652f73..352f0069c85 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/StoreApi.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/api/StoreApi.java @@ -12,7 +12,7 @@ import io.swagger.client.model.Order; import java.util.*; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-12T18:48:10.013-08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-17T17:16:20.498+08:00") public class StoreApi { private ApiClient apiClient; @@ -106,7 +106,7 @@ public class StoreApi { }; final String contentType = apiClient.selectHeaderContentType(contentTypes); - String[] authNames = new String[] { }; + String[] authNames = new String[] { "test_api_client_id", "test_api_client_secret" }; GenericType returnType = new GenericType() {}; @@ -153,7 +153,7 @@ public class StoreApi { }; final String contentType = apiClient.selectHeaderContentType(contentTypes); - String[] authNames = new String[] { }; + String[] authNames = new String[] { "test_api_key_query", "test_api_key_header" }; GenericType returnType = new GenericType() {}; diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Category.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Category.java index afe72de51ae..fd2d25a1bb5 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Category.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Category.java @@ -2,7 +2,6 @@ package io.swagger.client.model; import java.util.Objects; import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonValue; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -10,7 +9,7 @@ import io.swagger.annotations.ApiModelProperty; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-12T18:48:10.013-08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-17T17:16:20.498+08:00") public class Category { private Long id = null; @@ -63,10 +62,8 @@ public class Category { return false; } Category category = (Category) o; - - return true && Objects.equals(id, category.id) && - Objects.equals(name, category.name) - ; + return Objects.equals(this.id, category.id) && + Objects.equals(this.name, category.name); } @Override diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Order.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Order.java index 4b8126387e6..959b5c03711 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Order.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Order.java @@ -11,7 +11,7 @@ import java.util.Date; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-12T18:48:10.013-08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-17T17:16:20.498+08:00") public class Order { private Long id = null; @@ -161,14 +161,12 @@ public class Order { return false; } Order order = (Order) o; - - return true && Objects.equals(id, order.id) && - Objects.equals(petId, order.petId) && - Objects.equals(quantity, order.quantity) && - Objects.equals(shipDate, order.shipDate) && - Objects.equals(status, order.status) && - Objects.equals(complete, order.complete) - ; + return Objects.equals(this.id, order.id) && + Objects.equals(this.petId, order.petId) && + Objects.equals(this.quantity, order.quantity) && + Objects.equals(this.shipDate, order.shipDate) && + Objects.equals(this.status, order.status) && + Objects.equals(this.complete, order.complete); } @Override diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Pet.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Pet.java index c04f35adfad..42da6710435 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Pet.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Pet.java @@ -13,7 +13,7 @@ import java.util.*; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-12T18:48:10.013-08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-17T17:16:20.498+08:00") public class Pet { private Long id = null; @@ -163,14 +163,12 @@ public class Pet { return false; } Pet pet = (Pet) o; - - return true && Objects.equals(id, pet.id) && - Objects.equals(category, pet.category) && - Objects.equals(name, pet.name) && - Objects.equals(photoUrls, pet.photoUrls) && - Objects.equals(tags, pet.tags) && - Objects.equals(status, pet.status) - ; + return Objects.equals(this.id, pet.id) && + Objects.equals(this.category, pet.category) && + Objects.equals(this.name, pet.name) && + Objects.equals(this.photoUrls, pet.photoUrls) && + Objects.equals(this.tags, pet.tags) && + Objects.equals(this.status, pet.status); } @Override diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Tag.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Tag.java index da7f31937c5..47560e0133b 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Tag.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Tag.java @@ -2,7 +2,6 @@ package io.swagger.client.model; import java.util.Objects; import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonValue; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -10,7 +9,7 @@ import io.swagger.annotations.ApiModelProperty; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-12T18:48:10.013-08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-17T17:16:20.498+08:00") public class Tag { private Long id = null; @@ -63,10 +62,8 @@ public class Tag { return false; } Tag tag = (Tag) o; - - return true && Objects.equals(id, tag.id) && - Objects.equals(name, tag.name) - ; + return Objects.equals(this.id, tag.id) && + Objects.equals(this.name, tag.name); } @Override diff --git a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/User.java b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/User.java index edb5b50931f..0af0d48a56d 100644 --- a/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/User.java +++ b/samples/client/petstore/java/default/src/main/java/io/swagger/client/model/User.java @@ -2,7 +2,6 @@ package io.swagger.client.model; import java.util.Objects; import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonValue; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -10,7 +9,7 @@ import io.swagger.annotations.ApiModelProperty; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-12T18:48:10.013-08:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-17T17:16:20.498+08:00") public class User { private Long id = null; @@ -178,16 +177,14 @@ public class User { return false; } User user = (User) o; - - return true && Objects.equals(id, user.id) && - Objects.equals(username, user.username) && - Objects.equals(firstName, user.firstName) && - Objects.equals(lastName, user.lastName) && - Objects.equals(email, user.email) && - Objects.equals(password, user.password) && - Objects.equals(phone, user.phone) && - Objects.equals(userStatus, user.userStatus) - ; + return Objects.equals(this.id, user.id) && + Objects.equals(this.username, user.username) && + Objects.equals(this.firstName, user.firstName) && + Objects.equals(this.lastName, user.lastName) && + Objects.equals(this.email, user.email) && + Objects.equals(this.password, user.password) && + Objects.equals(this.phone, user.phone) && + Objects.equals(this.userStatus, user.userStatus); } @Override diff --git a/samples/client/petstore/java/feign/build.gradle b/samples/client/petstore/java/feign/build.gradle index 0bfcfbec71f..ee920fbc7ca 100644 --- a/samples/client/petstore/java/feign/build.gradle +++ b/samples/client/petstore/java/feign/build.gradle @@ -1,3 +1,6 @@ +apply plugin: 'idea' +apply plugin: 'eclipse' + group = 'io.swagger' version = '1.0.0' diff --git a/samples/client/petstore/java/feign/src/main/java/io/swagger/client/ApiClient.java b/samples/client/petstore/java/feign/src/main/java/io/swagger/client/ApiClient.java index 2e032a9d1d1..303927d064e 100644 --- a/samples/client/petstore/java/feign/src/main/java/io/swagger/client/ApiClient.java +++ b/samples/client/petstore/java/feign/src/main/java/io/swagger/client/ApiClient.java @@ -18,7 +18,7 @@ import feign.slf4j.Slf4jLogger; import io.swagger.client.auth.*; import io.swagger.client.auth.OAuth.AccessTokenListener; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-11T21:48:33.457Z") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-17T17:16:23.375+08:00") public class ApiClient { public interface Api {} @@ -42,8 +42,16 @@ public class ApiClient { RequestInterceptor auth; if (authName == "petstore_auth") { auth = new OAuth(OAuthFlow.implicit, "http://petstore.swagger.io/api/oauth/dialog", "", "write:pets, read:pets"); + } else if (authName == "test_api_client_id") { + auth = new ApiKeyAuth("header", "x-test_api_client_id"); + } else if (authName == "test_api_client_secret") { + auth = new ApiKeyAuth("header", "x-test_api_client_secret"); } else if (authName == "api_key") { auth = new ApiKeyAuth("header", "api_key"); + } else if (authName == "test_api_key_query") { + auth = new ApiKeyAuth("query", "test_api_key_query"); + } else if (authName == "test_api_key_header") { + auth = new ApiKeyAuth("header", "test_api_key_header"); } else { throw new RuntimeException("auth name \"" + authName + "\" not found in available auth names"); } diff --git a/samples/client/petstore/java/feign/src/main/java/io/swagger/client/api/PetApi.java b/samples/client/petstore/java/feign/src/main/java/io/swagger/client/api/PetApi.java index 02a44b271f0..d2755e6ac41 100644 --- a/samples/client/petstore/java/feign/src/main/java/io/swagger/client/api/PetApi.java +++ b/samples/client/petstore/java/feign/src/main/java/io/swagger/client/api/PetApi.java @@ -8,7 +8,7 @@ import java.io.File; import java.util.*; import feign.*; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-11T21:48:33.457Z") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-17T17:16:23.375+08:00") public interface PetApi extends ApiClient.Api { @@ -122,4 +122,30 @@ public interface PetApi extends ApiClient.Api { }) void uploadFile(@Param("petId") Long petId, @Param("additionalMetadata") String additionalMetadata, @Param("file") File file); + /** + * Fake endpoint to test byte array return by 'Find pet by ID' + * Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions + * @param petId ID of pet that needs to be fetched + * @return byte[] + */ + @RequestLine("GET /pet/{petId}?testing_byte_array=true") + @Headers({ + "Content-type: application/json", + "Accepts: application/json", + }) + byte[] getPetByIdWithByteArray(@Param("petId") Long petId); + + /** + * Fake endpoint to test byte array in body parameter for adding a new pet to the store + * + * @param body Pet object in the form of byte array + * @return void + */ + @RequestLine("POST /pet?testing_byte_array=true") + @Headers({ + "Content-type: application/json", + "Accepts: application/json", + }) + void addPetUsingByteArray(byte[] body); + } diff --git a/samples/client/petstore/java/feign/src/main/java/io/swagger/client/model/Category.java b/samples/client/petstore/java/feign/src/main/java/io/swagger/client/model/Category.java index 92e69c4d407..2060d4f6624 100644 --- a/samples/client/petstore/java/feign/src/main/java/io/swagger/client/model/Category.java +++ b/samples/client/petstore/java/feign/src/main/java/io/swagger/client/model/Category.java @@ -2,7 +2,6 @@ package io.swagger.client.model; import java.util.Objects; import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonValue; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -10,7 +9,7 @@ import io.swagger.annotations.ApiModelProperty; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-11T21:48:33.457Z") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-17T17:16:23.375+08:00") public class Category { private Long id = null; @@ -19,8 +18,13 @@ public class Category { /** **/ + public Category id(Long id) { + this.id = id; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("id") public Long getId() { return id; @@ -32,8 +36,13 @@ public class Category { /** **/ + public Category name(String name) { + this.name = name; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("name") public String getName() { return name; @@ -45,7 +54,7 @@ public class Category { @Override - public boolean equals(Object o) { + public boolean equals(java.lang.Object o) { if (this == o) { return true; } @@ -53,10 +62,8 @@ public class Category { return false; } Category category = (Category) o; - - return true && Objects.equals(id, category.id) && - Objects.equals(name, category.name) - ; + return Objects.equals(this.id, category.id) && + Objects.equals(this.name, category.name); } @Override @@ -79,7 +86,7 @@ public class Category { * Convert the given object to string with each line indented by 4 spaces * (except the first line). */ - private String toIndentedString(Object o) { + private String toIndentedString(java.lang.Object o) { if (o == null) { return "null"; } diff --git a/samples/client/petstore/java/feign/src/main/java/io/swagger/client/model/Order.java b/samples/client/petstore/java/feign/src/main/java/io/swagger/client/model/Order.java index 3dc9168d926..0086f0c61a7 100644 --- a/samples/client/petstore/java/feign/src/main/java/io/swagger/client/model/Order.java +++ b/samples/client/petstore/java/feign/src/main/java/io/swagger/client/model/Order.java @@ -11,7 +11,7 @@ import java.util.Date; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-11T21:48:33.457Z") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-17T17:16:23.375+08:00") public class Order { private Long id = null; @@ -44,8 +44,13 @@ public class Order { /** **/ + public Order id(Long id) { + this.id = id; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("id") public Long getId() { return id; @@ -57,8 +62,13 @@ public class Order { /** **/ + public Order petId(Long petId) { + this.petId = petId; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("petId") public Long getPetId() { return petId; @@ -70,8 +80,13 @@ public class Order { /** **/ + public Order quantity(Integer quantity) { + this.quantity = quantity; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("quantity") public Integer getQuantity() { return quantity; @@ -83,8 +98,13 @@ public class Order { /** **/ + public Order shipDate(Date shipDate) { + this.shipDate = shipDate; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("shipDate") public Date getShipDate() { return shipDate; @@ -97,8 +117,13 @@ public class Order { /** * Order Status **/ + public Order status(StatusEnum status) { + this.status = status; + return this; + } + - @ApiModelProperty(value = "Order Status") + @ApiModelProperty(example = "null", value = "Order Status") @JsonProperty("status") public StatusEnum getStatus() { return status; @@ -110,8 +135,13 @@ public class Order { /** **/ + public Order complete(Boolean complete) { + this.complete = complete; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("complete") public Boolean getComplete() { return complete; @@ -123,7 +153,7 @@ public class Order { @Override - public boolean equals(Object o) { + public boolean equals(java.lang.Object o) { if (this == o) { return true; } @@ -131,14 +161,12 @@ public class Order { return false; } Order order = (Order) o; - - return true && Objects.equals(id, order.id) && - Objects.equals(petId, order.petId) && - Objects.equals(quantity, order.quantity) && - Objects.equals(shipDate, order.shipDate) && - Objects.equals(status, order.status) && - Objects.equals(complete, order.complete) - ; + return Objects.equals(this.id, order.id) && + Objects.equals(this.petId, order.petId) && + Objects.equals(this.quantity, order.quantity) && + Objects.equals(this.shipDate, order.shipDate) && + Objects.equals(this.status, order.status) && + Objects.equals(this.complete, order.complete); } @Override @@ -165,7 +193,7 @@ public class Order { * Convert the given object to string with each line indented by 4 spaces * (except the first line). */ - private String toIndentedString(Object o) { + private String toIndentedString(java.lang.Object o) { if (o == null) { return "null"; } diff --git a/samples/client/petstore/java/feign/src/main/java/io/swagger/client/model/Pet.java b/samples/client/petstore/java/feign/src/main/java/io/swagger/client/model/Pet.java index 908d654679a..c90aec64ea8 100644 --- a/samples/client/petstore/java/feign/src/main/java/io/swagger/client/model/Pet.java +++ b/samples/client/petstore/java/feign/src/main/java/io/swagger/client/model/Pet.java @@ -13,7 +13,7 @@ import java.util.*; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-11T21:48:33.457Z") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-17T17:16:23.375+08:00") public class Pet { private Long id = null; @@ -46,8 +46,13 @@ public class Pet { /** **/ + public Pet id(Long id) { + this.id = id; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("id") public Long getId() { return id; @@ -59,8 +64,13 @@ public class Pet { /** **/ + public Pet category(Category category) { + this.category = category; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("category") public Category getCategory() { return category; @@ -72,8 +82,13 @@ public class Pet { /** **/ + public Pet name(String name) { + this.name = name; + return this; + } + - @ApiModelProperty(required = true, value = "") + @ApiModelProperty(example = "doggie", required = true, value = "") @JsonProperty("name") public String getName() { return name; @@ -85,8 +100,13 @@ public class Pet { /** **/ + public Pet photoUrls(List photoUrls) { + this.photoUrls = photoUrls; + return this; + } + - @ApiModelProperty(required = true, value = "") + @ApiModelProperty(example = "null", required = true, value = "") @JsonProperty("photoUrls") public List getPhotoUrls() { return photoUrls; @@ -98,8 +118,13 @@ public class Pet { /** **/ + public Pet tags(List tags) { + this.tags = tags; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("tags") public List getTags() { return tags; @@ -112,8 +137,13 @@ public class Pet { /** * pet status in the store **/ + public Pet status(StatusEnum status) { + this.status = status; + return this; + } + - @ApiModelProperty(value = "pet status in the store") + @ApiModelProperty(example = "null", value = "pet status in the store") @JsonProperty("status") public StatusEnum getStatus() { return status; @@ -125,7 +155,7 @@ public class Pet { @Override - public boolean equals(Object o) { + public boolean equals(java.lang.Object o) { if (this == o) { return true; } @@ -133,14 +163,12 @@ public class Pet { return false; } Pet pet = (Pet) o; - - return true && Objects.equals(id, pet.id) && - Objects.equals(category, pet.category) && - Objects.equals(name, pet.name) && - Objects.equals(photoUrls, pet.photoUrls) && - Objects.equals(tags, pet.tags) && - Objects.equals(status, pet.status) - ; + return Objects.equals(this.id, pet.id) && + Objects.equals(this.category, pet.category) && + Objects.equals(this.name, pet.name) && + Objects.equals(this.photoUrls, pet.photoUrls) && + Objects.equals(this.tags, pet.tags) && + Objects.equals(this.status, pet.status); } @Override @@ -167,7 +195,7 @@ public class Pet { * Convert the given object to string with each line indented by 4 spaces * (except the first line). */ - private String toIndentedString(Object o) { + private String toIndentedString(java.lang.Object o) { if (o == null) { return "null"; } diff --git a/samples/client/petstore/java/feign/src/main/java/io/swagger/client/model/Tag.java b/samples/client/petstore/java/feign/src/main/java/io/swagger/client/model/Tag.java index 337c84211a4..2a3678bc883 100644 --- a/samples/client/petstore/java/feign/src/main/java/io/swagger/client/model/Tag.java +++ b/samples/client/petstore/java/feign/src/main/java/io/swagger/client/model/Tag.java @@ -2,7 +2,6 @@ package io.swagger.client.model; import java.util.Objects; import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonValue; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -10,7 +9,7 @@ import io.swagger.annotations.ApiModelProperty; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-11T21:48:33.457Z") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-17T17:16:23.375+08:00") public class Tag { private Long id = null; @@ -19,8 +18,13 @@ public class Tag { /** **/ + public Tag id(Long id) { + this.id = id; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("id") public Long getId() { return id; @@ -32,8 +36,13 @@ public class Tag { /** **/ + public Tag name(String name) { + this.name = name; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("name") public String getName() { return name; @@ -45,7 +54,7 @@ public class Tag { @Override - public boolean equals(Object o) { + public boolean equals(java.lang.Object o) { if (this == o) { return true; } @@ -53,10 +62,8 @@ public class Tag { return false; } Tag tag = (Tag) o; - - return true && Objects.equals(id, tag.id) && - Objects.equals(name, tag.name) - ; + return Objects.equals(this.id, tag.id) && + Objects.equals(this.name, tag.name); } @Override @@ -79,7 +86,7 @@ public class Tag { * Convert the given object to string with each line indented by 4 spaces * (except the first line). */ - private String toIndentedString(Object o) { + private String toIndentedString(java.lang.Object o) { if (o == null) { return "null"; } diff --git a/samples/client/petstore/java/feign/src/main/java/io/swagger/client/model/User.java b/samples/client/petstore/java/feign/src/main/java/io/swagger/client/model/User.java index b05d8a58a81..1f8cf539938 100644 --- a/samples/client/petstore/java/feign/src/main/java/io/swagger/client/model/User.java +++ b/samples/client/petstore/java/feign/src/main/java/io/swagger/client/model/User.java @@ -2,7 +2,6 @@ package io.swagger.client.model; import java.util.Objects; import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonValue; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -10,7 +9,7 @@ import io.swagger.annotations.ApiModelProperty; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-11T21:48:33.457Z") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-17T17:16:23.375+08:00") public class User { private Long id = null; @@ -25,8 +24,13 @@ public class User { /** **/ + public User id(Long id) { + this.id = id; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("id") public Long getId() { return id; @@ -38,8 +42,13 @@ public class User { /** **/ + public User username(String username) { + this.username = username; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("username") public String getUsername() { return username; @@ -51,8 +60,13 @@ public class User { /** **/ + public User firstName(String firstName) { + this.firstName = firstName; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("firstName") public String getFirstName() { return firstName; @@ -64,8 +78,13 @@ public class User { /** **/ + public User lastName(String lastName) { + this.lastName = lastName; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("lastName") public String getLastName() { return lastName; @@ -77,8 +96,13 @@ public class User { /** **/ + public User email(String email) { + this.email = email; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("email") public String getEmail() { return email; @@ -90,8 +114,13 @@ public class User { /** **/ + public User password(String password) { + this.password = password; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("password") public String getPassword() { return password; @@ -103,8 +132,13 @@ public class User { /** **/ + public User phone(String phone) { + this.phone = phone; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("phone") public String getPhone() { return phone; @@ -117,8 +151,13 @@ public class User { /** * User Status **/ + public User userStatus(Integer userStatus) { + this.userStatus = userStatus; + return this; + } + - @ApiModelProperty(value = "User Status") + @ApiModelProperty(example = "null", value = "User Status") @JsonProperty("userStatus") public Integer getUserStatus() { return userStatus; @@ -130,7 +169,7 @@ public class User { @Override - public boolean equals(Object o) { + public boolean equals(java.lang.Object o) { if (this == o) { return true; } @@ -138,16 +177,14 @@ public class User { return false; } User user = (User) o; - - return true && Objects.equals(id, user.id) && - Objects.equals(username, user.username) && - Objects.equals(firstName, user.firstName) && - Objects.equals(lastName, user.lastName) && - Objects.equals(email, user.email) && - Objects.equals(password, user.password) && - Objects.equals(phone, user.phone) && - Objects.equals(userStatus, user.userStatus) - ; + return Objects.equals(this.id, user.id) && + Objects.equals(this.username, user.username) && + Objects.equals(this.firstName, user.firstName) && + Objects.equals(this.lastName, user.lastName) && + Objects.equals(this.email, user.email) && + Objects.equals(this.password, user.password) && + Objects.equals(this.phone, user.phone) && + Objects.equals(this.userStatus, user.userStatus); } @Override @@ -176,7 +213,7 @@ public class User { * Convert the given object to string with each line indented by 4 spaces * (except the first line). */ - private String toIndentedString(Object o) { + private String toIndentedString(java.lang.Object o) { if (o == null) { return "null"; } diff --git a/samples/client/petstore/java/jersey2/build.gradle b/samples/client/petstore/java/jersey2/build.gradle index 85ad4f048b9..c3a9375c9e0 100644 --- a/samples/client/petstore/java/jersey2/build.gradle +++ b/samples/client/petstore/java/jersey2/build.gradle @@ -1,3 +1,6 @@ +apply plugin: 'idea' +apply plugin: 'eclipse' + group = 'io.swagger' version = '1.0.0' diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/ApiClient.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/ApiClient.java index 89fe7f60680..77bcbef413c 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/ApiClient.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/ApiClient.java @@ -48,7 +48,7 @@ import io.swagger.client.auth.HttpBasicAuth; import io.swagger.client.auth.ApiKeyAuth; import io.swagger.client.auth.OAuth; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-28T16:23:25.238+01:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-17T17:16:21.885+08:00") public class ApiClient { private Map defaultHeaderMap = new HashMap(); private String basePath = "http://petstore.swagger.io/v2"; @@ -85,7 +85,11 @@ public class ApiClient { // Setup authentications (key: authentication name, value: authentication). authentications = new HashMap(); authentications.put("petstore_auth", new OAuth()); + authentications.put("test_api_client_id", new ApiKeyAuth("header", "x-test_api_client_id")); + authentications.put("test_api_client_secret", new ApiKeyAuth("header", "x-test_api_client_secret")); authentications.put("api_key", new ApiKeyAuth("header", "api_key")); + authentications.put("test_api_key_query", new ApiKeyAuth("query", "test_api_key_query")); + authentications.put("test_api_key_header", new ApiKeyAuth("header", "test_api_key_header")); // Prevent the authentications from being modified. authentications = Collections.unmodifiableMap(authentications); } diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/PetApi.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/PetApi.java index a4402076fa7..4c9690ac4c1 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/PetApi.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/PetApi.java @@ -12,7 +12,7 @@ import java.io.File; import java.util.*; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-28T16:23:25.238+01:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-17T17:16:21.885+08:00") public class PetApi { private ApiClient apiClient; @@ -238,7 +238,7 @@ public class PetApi { }; final String contentType = apiClient.selectHeaderContentType(contentTypes); - String[] authNames = new String[] { "api_key" }; + String[] authNames = new String[] { "petstore_auth", "api_key" }; GenericType returnType = new GenericType() {}; @@ -438,7 +438,7 @@ public class PetApi { }; final String contentType = apiClient.selectHeaderContentType(contentTypes); - String[] authNames = new String[] { "api_key" }; + String[] authNames = new String[] { "petstore_auth", "api_key" }; GenericType returnType = new GenericType() {}; diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/StoreApi.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/StoreApi.java index f20b99b2ae7..d5bbd658dbb 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/StoreApi.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/api/StoreApi.java @@ -12,7 +12,7 @@ import io.swagger.client.model.Order; import java.util.*; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-28T16:23:25.238+01:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-17T17:16:21.885+08:00") public class StoreApi { private ApiClient apiClient; @@ -106,7 +106,7 @@ public class StoreApi { }; final String contentType = apiClient.selectHeaderContentType(contentTypes); - String[] authNames = new String[] { }; + String[] authNames = new String[] { "test_api_client_id", "test_api_client_secret" }; GenericType returnType = new GenericType() {}; @@ -153,7 +153,7 @@ public class StoreApi { }; final String contentType = apiClient.selectHeaderContentType(contentTypes); - String[] authNames = new String[] { }; + String[] authNames = new String[] { "test_api_key_query", "test_api_key_header" }; GenericType returnType = new GenericType() {}; diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Category.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Category.java index 8c409d96e1c..fb8f0542c8d 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Category.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Category.java @@ -2,7 +2,6 @@ package io.swagger.client.model; import java.util.Objects; import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonValue; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -10,7 +9,7 @@ import io.swagger.annotations.ApiModelProperty; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-28T16:23:25.238+01:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-17T17:16:21.885+08:00") public class Category { private Long id = null; @@ -19,8 +18,13 @@ public class Category { /** **/ + public Category id(Long id) { + this.id = id; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("id") public Long getId() { return id; @@ -32,8 +36,13 @@ public class Category { /** **/ + public Category name(String name) { + this.name = name; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("name") public String getName() { return name; @@ -53,10 +62,8 @@ public class Category { return false; } Category category = (Category) o; - - return true && Objects.equals(id, category.id) && - Objects.equals(name, category.name) - ; + return Objects.equals(this.id, category.id) && + Objects.equals(this.name, category.name); } @Override diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Order.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Order.java index 40d3765f1da..478483ef7af 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Order.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Order.java @@ -11,7 +11,7 @@ import java.util.Date; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-28T16:23:25.238+01:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-17T17:16:21.885+08:00") public class Order { private Long id = null; @@ -44,8 +44,13 @@ public class Order { /** **/ + public Order id(Long id) { + this.id = id; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("id") public Long getId() { return id; @@ -57,8 +62,13 @@ public class Order { /** **/ + public Order petId(Long petId) { + this.petId = petId; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("petId") public Long getPetId() { return petId; @@ -70,8 +80,13 @@ public class Order { /** **/ + public Order quantity(Integer quantity) { + this.quantity = quantity; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("quantity") public Integer getQuantity() { return quantity; @@ -83,8 +98,13 @@ public class Order { /** **/ + public Order shipDate(Date shipDate) { + this.shipDate = shipDate; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("shipDate") public Date getShipDate() { return shipDate; @@ -97,8 +117,13 @@ public class Order { /** * Order Status **/ + public Order status(StatusEnum status) { + this.status = status; + return this; + } + - @ApiModelProperty(value = "Order Status") + @ApiModelProperty(example = "null", value = "Order Status") @JsonProperty("status") public StatusEnum getStatus() { return status; @@ -110,8 +135,13 @@ public class Order { /** **/ + public Order complete(Boolean complete) { + this.complete = complete; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("complete") public Boolean getComplete() { return complete; @@ -131,14 +161,12 @@ public class Order { return false; } Order order = (Order) o; - - return true && Objects.equals(id, order.id) && - Objects.equals(petId, order.petId) && - Objects.equals(quantity, order.quantity) && - Objects.equals(shipDate, order.shipDate) && - Objects.equals(status, order.status) && - Objects.equals(complete, order.complete) - ; + return Objects.equals(this.id, order.id) && + Objects.equals(this.petId, order.petId) && + Objects.equals(this.quantity, order.quantity) && + Objects.equals(this.shipDate, order.shipDate) && + Objects.equals(this.status, order.status) && + Objects.equals(this.complete, order.complete); } @Override diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Pet.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Pet.java index 68a0dd6e67b..f23c7a720b6 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Pet.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Pet.java @@ -13,7 +13,7 @@ import java.util.*; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-28T16:23:25.238+01:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-17T17:16:21.885+08:00") public class Pet { private Long id = null; @@ -46,8 +46,13 @@ public class Pet { /** **/ + public Pet id(Long id) { + this.id = id; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("id") public Long getId() { return id; @@ -59,8 +64,13 @@ public class Pet { /** **/ + public Pet category(Category category) { + this.category = category; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("category") public Category getCategory() { return category; @@ -72,8 +82,13 @@ public class Pet { /** **/ + public Pet name(String name) { + this.name = name; + return this; + } + - @ApiModelProperty(required = true, value = "") + @ApiModelProperty(example = "doggie", required = true, value = "") @JsonProperty("name") public String getName() { return name; @@ -85,8 +100,13 @@ public class Pet { /** **/ + public Pet photoUrls(List photoUrls) { + this.photoUrls = photoUrls; + return this; + } + - @ApiModelProperty(required = true, value = "") + @ApiModelProperty(example = "null", required = true, value = "") @JsonProperty("photoUrls") public List getPhotoUrls() { return photoUrls; @@ -98,8 +118,13 @@ public class Pet { /** **/ + public Pet tags(List tags) { + this.tags = tags; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("tags") public List getTags() { return tags; @@ -112,8 +137,13 @@ public class Pet { /** * pet status in the store **/ + public Pet status(StatusEnum status) { + this.status = status; + return this; + } + - @ApiModelProperty(value = "pet status in the store") + @ApiModelProperty(example = "null", value = "pet status in the store") @JsonProperty("status") public StatusEnum getStatus() { return status; @@ -133,14 +163,12 @@ public class Pet { return false; } Pet pet = (Pet) o; - - return true && Objects.equals(id, pet.id) && - Objects.equals(category, pet.category) && - Objects.equals(name, pet.name) && - Objects.equals(photoUrls, pet.photoUrls) && - Objects.equals(tags, pet.tags) && - Objects.equals(status, pet.status) - ; + return Objects.equals(this.id, pet.id) && + Objects.equals(this.category, pet.category) && + Objects.equals(this.name, pet.name) && + Objects.equals(this.photoUrls, pet.photoUrls) && + Objects.equals(this.tags, pet.tags) && + Objects.equals(this.status, pet.status); } @Override diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Tag.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Tag.java index 769e5829b45..62dc4226d30 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Tag.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Tag.java @@ -2,7 +2,6 @@ package io.swagger.client.model; import java.util.Objects; import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonValue; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -10,7 +9,7 @@ import io.swagger.annotations.ApiModelProperty; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-28T16:23:25.238+01:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-17T17:16:21.885+08:00") public class Tag { private Long id = null; @@ -19,8 +18,13 @@ public class Tag { /** **/ + public Tag id(Long id) { + this.id = id; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("id") public Long getId() { return id; @@ -32,8 +36,13 @@ public class Tag { /** **/ + public Tag name(String name) { + this.name = name; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("name") public String getName() { return name; @@ -53,10 +62,8 @@ public class Tag { return false; } Tag tag = (Tag) o; - - return true && Objects.equals(id, tag.id) && - Objects.equals(name, tag.name) - ; + return Objects.equals(this.id, tag.id) && + Objects.equals(this.name, tag.name); } @Override diff --git a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/User.java b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/User.java index 73de26c5e7a..ba036559069 100644 --- a/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/User.java +++ b/samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/User.java @@ -2,7 +2,6 @@ package io.swagger.client.model; import java.util.Objects; import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonValue; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -10,7 +9,7 @@ import io.swagger.annotations.ApiModelProperty; -@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-01-28T16:23:25.238+01:00") +@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-02-17T17:16:21.885+08:00") public class User { private Long id = null; @@ -25,8 +24,13 @@ public class User { /** **/ + public User id(Long id) { + this.id = id; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("id") public Long getId() { return id; @@ -38,8 +42,13 @@ public class User { /** **/ + public User username(String username) { + this.username = username; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("username") public String getUsername() { return username; @@ -51,8 +60,13 @@ public class User { /** **/ + public User firstName(String firstName) { + this.firstName = firstName; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("firstName") public String getFirstName() { return firstName; @@ -64,8 +78,13 @@ public class User { /** **/ + public User lastName(String lastName) { + this.lastName = lastName; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("lastName") public String getLastName() { return lastName; @@ -77,8 +96,13 @@ public class User { /** **/ + public User email(String email) { + this.email = email; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("email") public String getEmail() { return email; @@ -90,8 +114,13 @@ public class User { /** **/ + public User password(String password) { + this.password = password; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("password") public String getPassword() { return password; @@ -103,8 +132,13 @@ public class User { /** **/ + public User phone(String phone) { + this.phone = phone; + return this; + } + - @ApiModelProperty(value = "") + @ApiModelProperty(example = "null", value = "") @JsonProperty("phone") public String getPhone() { return phone; @@ -117,8 +151,13 @@ public class User { /** * User Status **/ + public User userStatus(Integer userStatus) { + this.userStatus = userStatus; + return this; + } + - @ApiModelProperty(value = "User Status") + @ApiModelProperty(example = "null", value = "User Status") @JsonProperty("userStatus") public Integer getUserStatus() { return userStatus; @@ -138,16 +177,14 @@ public class User { return false; } User user = (User) o; - - return true && Objects.equals(id, user.id) && - Objects.equals(username, user.username) && - Objects.equals(firstName, user.firstName) && - Objects.equals(lastName, user.lastName) && - Objects.equals(email, user.email) && - Objects.equals(password, user.password) && - Objects.equals(phone, user.phone) && - Objects.equals(userStatus, user.userStatus) - ; + return Objects.equals(this.id, user.id) && + Objects.equals(this.username, user.username) && + Objects.equals(this.firstName, user.firstName) && + Objects.equals(this.lastName, user.lastName) && + Objects.equals(this.email, user.email) && + Objects.equals(this.password, user.password) && + Objects.equals(this.phone, user.phone) && + Objects.equals(this.userStatus, user.userStatus); } @Override diff --git a/samples/client/petstore/java/okhttp-gson/README.md b/samples/client/petstore/java/okhttp-gson/README.md index be7ff686b7a..fd85a16cd07 100644 --- a/samples/client/petstore/java/okhttp-gson/README.md +++ b/samples/client/petstore/java/okhttp-gson/README.md @@ -20,7 +20,7 @@ mvn deploy Refer to the [official documentation](https://maven.apache.org/plugins/maven-deploy-plugin/usage.html) for more information. -After the client libarary is installed/deployed, you can use it in your Maven project by adding the following to your *pom.xml*: +After the client library is installed/deployed, you can use it in your Maven project by adding the following to your *pom.xml*: ```xml diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/ApiClient.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/ApiClient.java index 73a9187e75f..0f853388744 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/ApiClient.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/ApiClient.java @@ -145,8 +145,12 @@ public class ApiClient { // Setup authentications (key: authentication name, value: authentication). authentications = new HashMap(); - authentications.put("api_key", new ApiKeyAuth("header", "api_key")); authentications.put("petstore_auth", new OAuth()); + authentications.put("test_api_client_id", new ApiKeyAuth("header", "x-test_api_client_id")); + authentications.put("test_api_client_secret", new ApiKeyAuth("header", "x-test_api_client_secret")); + authentications.put("api_key", new ApiKeyAuth("header", "api_key")); + authentications.put("test_api_key_query", new ApiKeyAuth("query", "test_api_key_query")); + authentications.put("test_api_key_header", new ApiKeyAuth("header", "test_api_key_header")); // Prevent the authentications from being modified. authentications = Collections.unmodifiableMap(authentications); } diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/api/PetApi.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/api/PetApi.java index 497e3ade6a8..a29ace374f8 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/api/PetApi.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/api/PetApi.java @@ -491,7 +491,7 @@ public class PetApi { }); } - String[] authNames = new String[] { "api_key" }; + String[] authNames = new String[] { "petstore_auth", "api_key" }; return apiClient.buildCall(path, "GET", queryParams, postBody, headerParams, formParams, authNames, progressRequestListener); } @@ -936,7 +936,7 @@ public class PetApi { }); } - String[] authNames = new String[] { "api_key" }; + String[] authNames = new String[] { "petstore_auth", "api_key" }; return apiClient.buildCall(path, "GET", queryParams, postBody, headerParams, formParams, authNames, progressRequestListener); } diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/api/StoreApi.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/api/StoreApi.java index 5e6c7c48c6b..11d1eded300 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/api/StoreApi.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/api/StoreApi.java @@ -180,7 +180,7 @@ public class StoreApi { }); } - String[] authNames = new String[] { }; + String[] authNames = new String[] { "test_api_client_id", "test_api_client_secret" }; return apiClient.buildCall(path, "POST", queryParams, postBody, headerParams, formParams, authNames, progressRequestListener); } @@ -288,7 +288,7 @@ public class StoreApi { }); } - String[] authNames = new String[] { }; + String[] authNames = new String[] { "test_api_key_query", "test_api_key_header" }; return apiClient.buildCall(path, "GET", queryParams, postBody, headerParams, formParams, authNames, progressRequestListener); } diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Category.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Category.java index d0908afd9e1..e7052e47170 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Category.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Category.java @@ -52,8 +52,8 @@ public class Category { return false; } Category category = (Category) o; - return Objects.equals(id, category.id) && - Objects.equals(name, category.name); + return Objects.equals(this.id, category.id) && + Objects.equals(this.name, category.name); } @Override diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Order.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Order.java index 59c5238b626..5b96b2a32b2 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Order.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Order.java @@ -133,12 +133,12 @@ public enum StatusEnum { return false; } Order order = (Order) o; - return Objects.equals(id, order.id) && - Objects.equals(petId, order.petId) && - Objects.equals(quantity, order.quantity) && - Objects.equals(shipDate, order.shipDate) && - Objects.equals(status, order.status) && - Objects.equals(complete, order.complete); + return Objects.equals(this.id, order.id) && + Objects.equals(this.petId, order.petId) && + Objects.equals(this.quantity, order.quantity) && + Objects.equals(this.shipDate, order.shipDate) && + Objects.equals(this.status, order.status) && + Objects.equals(this.complete, order.complete); } @Override diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Pet.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Pet.java index 1f9462ddc3a..02990adb380 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Pet.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Pet.java @@ -135,12 +135,12 @@ public enum StatusEnum { return false; } Pet pet = (Pet) o; - return Objects.equals(id, pet.id) && - Objects.equals(category, pet.category) && - Objects.equals(name, pet.name) && - Objects.equals(photoUrls, pet.photoUrls) && - Objects.equals(tags, pet.tags) && - Objects.equals(status, pet.status); + return Objects.equals(this.id, pet.id) && + Objects.equals(this.category, pet.category) && + Objects.equals(this.name, pet.name) && + Objects.equals(this.photoUrls, pet.photoUrls) && + Objects.equals(this.tags, pet.tags) && + Objects.equals(this.status, pet.status); } @Override diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Tag.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Tag.java index a4ca1074ca1..4f8217b7678 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Tag.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/Tag.java @@ -52,8 +52,8 @@ public class Tag { return false; } Tag tag = (Tag) o; - return Objects.equals(id, tag.id) && - Objects.equals(name, tag.name); + return Objects.equals(this.id, tag.id) && + Objects.equals(this.name, tag.name); } @Override diff --git a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/User.java b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/User.java index 072f510081a..bcec1fc0a1c 100644 --- a/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/User.java +++ b/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/model/User.java @@ -137,14 +137,14 @@ public class User { return false; } User user = (User) o; - return Objects.equals(id, user.id) && - Objects.equals(username, user.username) && - Objects.equals(firstName, user.firstName) && - Objects.equals(lastName, user.lastName) && - Objects.equals(email, user.email) && - Objects.equals(password, user.password) && - Objects.equals(phone, user.phone) && - Objects.equals(userStatus, user.userStatus); + return Objects.equals(this.id, user.id) && + Objects.equals(this.username, user.username) && + Objects.equals(this.firstName, user.firstName) && + Objects.equals(this.lastName, user.lastName) && + Objects.equals(this.email, user.email) && + Objects.equals(this.password, user.password) && + Objects.equals(this.phone, user.phone) && + Objects.equals(this.userStatus, user.userStatus); } @Override From cac8df949d221af29dcacdfef6486a7ea37f63b2 Mon Sep 17 00:00:00 2001 From: xhh Date: Wed, 17 Feb 2016 19:46:40 +0800 Subject: [PATCH 156/189] Fix tests --- .../src/test/java/io/swagger/client/ApiClientTest.java | 8 +++++++- .../src/test/java/io/swagger/client/ApiClientTest.java | 8 +++++++- .../src/test/java/io/swagger/client/ApiClientTest.java | 8 +++++++- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/samples/client/petstore/java/default/src/test/java/io/swagger/client/ApiClientTest.java b/samples/client/petstore/java/default/src/test/java/io/swagger/client/ApiClientTest.java index 29eae3d017e..9fa51a06baa 100644 --- a/samples/client/petstore/java/default/src/test/java/io/swagger/client/ApiClientTest.java +++ b/samples/client/petstore/java/default/src/test/java/io/swagger/client/ApiClientTest.java @@ -131,7 +131,13 @@ public class ApiClientTest { @Test public void testSetApiKeyAndPrefix() { - ApiKeyAuth auth = (ApiKeyAuth) apiClient.getAuthentications().get("api_key"); + ApiKeyAuth auth = null; + for (Authentication _auth : apiClient.getAuthentications().values()) { + if (_auth instanceof ApiKeyAuth) { + auth = (ApiKeyAuth) _auth; + break; + } + } auth.setApiKey(null); auth.setApiKeyPrefix(null); diff --git a/samples/client/petstore/java/jersey2/src/test/java/io/swagger/client/ApiClientTest.java b/samples/client/petstore/java/jersey2/src/test/java/io/swagger/client/ApiClientTest.java index 29eae3d017e..9fa51a06baa 100644 --- a/samples/client/petstore/java/jersey2/src/test/java/io/swagger/client/ApiClientTest.java +++ b/samples/client/petstore/java/jersey2/src/test/java/io/swagger/client/ApiClientTest.java @@ -131,7 +131,13 @@ public class ApiClientTest { @Test public void testSetApiKeyAndPrefix() { - ApiKeyAuth auth = (ApiKeyAuth) apiClient.getAuthentications().get("api_key"); + ApiKeyAuth auth = null; + for (Authentication _auth : apiClient.getAuthentications().values()) { + if (_auth instanceof ApiKeyAuth) { + auth = (ApiKeyAuth) _auth; + break; + } + } auth.setApiKey(null); auth.setApiKeyPrefix(null); diff --git a/samples/client/petstore/java/okhttp-gson/src/test/java/io/swagger/client/ApiClientTest.java b/samples/client/petstore/java/okhttp-gson/src/test/java/io/swagger/client/ApiClientTest.java index c22da2acac6..9e6d5f42642 100644 --- a/samples/client/petstore/java/okhttp-gson/src/test/java/io/swagger/client/ApiClientTest.java +++ b/samples/client/petstore/java/okhttp-gson/src/test/java/io/swagger/client/ApiClientTest.java @@ -170,7 +170,13 @@ public class ApiClientTest { @Test public void testSetApiKeyAndPrefix() { - ApiKeyAuth auth = (ApiKeyAuth) apiClient.getAuthentications().get("api_key"); + ApiKeyAuth auth = null; + for (Authentication _auth : apiClient.getAuthentications().values()) { + if (_auth instanceof ApiKeyAuth) { + auth = (ApiKeyAuth) _auth; + break; + } + } auth.setApiKey(null); auth.setApiKeyPrefix(null); From 1d57e70e767cab509ba8d61a1015ab7feda6482a Mon Sep 17 00:00:00 2001 From: Jim Schubert Date: Wed, 17 Feb 2016 13:31:50 -0500 Subject: [PATCH 157/189] [csharp] Set RestSharp to 105.1.0 due to bug in newer versions --- .../src/main/resources/csharp/README.md | 4 +++- .../resources/csharp/compile-mono.sh.mustache | 2 +- .../main/resources/csharp/compile.mustache | 2 +- .../resources/csharp/packages.config.mustache | 2 +- .../Lib/SwaggerClient/bin/RestSharp.dll | Bin 168960 -> 167936 bytes .../Lib/SwaggerClient/compile-mono.sh | 2 +- .../Lib/SwaggerClient/compile.bat | 4 +++- .../IO/Swagger/Properties/AssemblyInfo.cs | 1 - .../Lib/SwaggerClient/vendor/packages.config | 2 +- 9 files changed, 11 insertions(+), 8 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/csharp/README.md b/modules/swagger-codegen/src/main/resources/csharp/README.md index 3ce83da957b..794a7c49b1b 100644 --- a/modules/swagger-codegen/src/main/resources/csharp/README.md +++ b/modules/swagger-codegen/src/main/resources/csharp/README.md @@ -6,12 +6,14 @@ - [RestSharp] (https://www.nuget.org/packages/RestSharp) - 105.1.0 or later - [Json.NET] (https://www.nuget.org/packages/Newtonsoft.Json/) - 7.0.0 or later -NOTE: The DLLs included in the package may not be the latest version. We recommned using [NuGet] (https://docs.nuget.org/consume/installing-nuget) to obtain the latest version of the packages: +The DLLs included in the package may not be the latest version. We recommned using [NuGet] (https://docs.nuget.org/consume/installing-nuget) to obtain the latest version of the packages: ``` Install-Package RestSharp Install-Package Newtonsoft.Json ``` +NOTE: RestSharp versions greater than 105.1.0 have a bug which causes file uploads to fail. See [RestSharp#742](https://github.com/restsharp/RestSharp/issues/742) + ## Installation Run the following command to generate the DLL - [Mac/Linux] compile-mono.sh diff --git a/modules/swagger-codegen/src/main/resources/csharp/compile-mono.sh.mustache b/modules/swagger-codegen/src/main/resources/csharp/compile-mono.sh.mustache index 1572c5dff26..b1b0c4f0c73 100644 --- a/modules/swagger-codegen/src/main/resources/csharp/compile-mono.sh.mustache +++ b/modules/swagger-codegen/src/main/resources/csharp/compile-mono.sh.mustache @@ -8,7 +8,7 @@ mono nuget.exe install vendor/packages.config -o vendor; mkdir -p bin; cp vendor/Newtonsoft.Json.8.0.2/lib/{{targetFrameworkNuget}}/Newtonsoft.Json.dll bin/Newtonsoft.Json.dll; -cp vendor/RestSharp.105.2.3/lib/{{targetFrameworkNuget}}/RestSharp.dll bin/RestSharp.dll; +cp vendor/RestSharp.105.1.0/lib/{{targetFrameworkNuget}}/RestSharp.dll bin/RestSharp.dll; mcs -sdk:${netfx} -r:bin/Newtonsoft.Json.dll,\ bin/RestSharp.dll,\ diff --git a/modules/swagger-codegen/src/main/resources/csharp/compile.mustache b/modules/swagger-codegen/src/main/resources/csharp/compile.mustache index 098fddb4643..6014320b2f7 100644 --- a/modules/swagger-codegen/src/main/resources/csharp/compile.mustache +++ b/modules/swagger-codegen/src/main/resources/csharp/compile.mustache @@ -7,6 +7,6 @@ if not exist ".\nuget.exe" powershell -Command "(new-object System.Net.WebClient .\nuget.exe install vendor/packages.config -o vendor cp vendor/Newtonsoft.Json.8.0.2/lib/{{targetFrameworkNuget}}/Newtonsoft.Json.dll bin/Newtonsoft.Json.dll -cp vendor/RestSharp.105.2.3/lib/{{targetFrameworkNuget}}/RestSharp.dll bin/RestSharp.dll +cp vendor/RestSharp.105.1.0/lib/{{targetFrameworkNuget}}/RestSharp.dll bin/RestSharp.dll %CSCPATH%\csc /reference:bin/Newtonsoft.Json.dll;bin/RestSharp.dll /target:library /out:bin/{{packageName}}.dll /recurse:src\*.cs /doc:bin/{{packageName}}.xml diff --git a/modules/swagger-codegen/src/main/resources/csharp/packages.config.mustache b/modules/swagger-codegen/src/main/resources/csharp/packages.config.mustache index 06875810b4a..bd4428e687e 100644 --- a/modules/swagger-codegen/src/main/resources/csharp/packages.config.mustache +++ b/modules/swagger-codegen/src/main/resources/csharp/packages.config.mustache @@ -1,5 +1,5 @@ - + diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/bin/RestSharp.dll b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/bin/RestSharp.dll index 533b3cc8a31f269fd48b82b04ef82355806e28b3..59d82f94198e053a62d648c27671eaf45fff0dad 100644 GIT binary patch literal 167936 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%0ADZW1&C}=6{`-CM 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 UfQN`Z?|xnr{r`Xd-=o0)0_Pd&8~^|S literal 168960 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 z zwQb@Nx137y8dF z$c*vBgxO>n^QpY?~NR@=k;W)a)I0OXQb}I}o;nTFktY5mv^M>|wLEPG2HDG~@`lYKa$P z&-0gTcF)?neu?x|YL+a+H`N;_E>m*W){Ri@$Fuo*}I|n8uq)$N%x^)(l;LMkq}No`|?r7G}OlLk6vYp=_*r9XVd;-aNERXw7JUs z8%@t>EuV7BFzIng&-w8@d>MO7Pu@{AqxDDNveuvFol>h?-_0vRA8Fjgwd6+LrG|Ie z>5(zZPP9btPgzWPG37A(P6pC>!&zNwQ|sQ5tK6Gf-#H6kE{*n z^BVejm_8h)Z_ALj+a_*CZ+w6LD)b3IlYfLZ@1jk7t$OtY^wOuF|49CQ)IUP~p<&_H z6ZuDnU5?nv2=2ptjP=exmG3p)Jl|E|H6|Ck3JTCp{r7|dv!F7g;0cdBYn#mwZ%7M!y8_=L^o=gT%gF4?;Utl3*%@VsZo-uFiz8g^^(4GUJ8#o-@Lcv-tOe!Umt zLG#pJv7ZtB&w|%zbF=xtIB(%wlvkO3wZEG19_%AVuoEi$z_KHy?vyHwJzKaLZTItq zA95tEG`D+wD%_-Damf!U1WLoKVfc)e8y54gNsJ$@J~Ea{y$>c ze&Ugm|B**dkAK2^`2=b8*y7>pxbm69RkvCPzDW6H%CAxW8RfUs2AIA_&2OL?gKwZ$ zf`3%6fFG%Mz`v<1*BHzd-t8KWSwiu1u_1ou8{&4EvCIvcqF-r>zQ`1Pu_^ks=C?h= z@wKNDU?uI;(9TZEe##BBznk{MwBJhmar4J;wcq@yXN=&ocKI^_u7HvBT9{H0`D7do=wG zOoyuvJQC(VdL+yrc_a*f^ZXS2#Pf}DIFvW+8PGkf8yr6DyWr?y-yb(Yy+6ulPEe=F z5u<%bx9rhxO`M>f94GqklCOhf)cfP!nwY2VRaY#_Q+KKec&@sBX&ycy|9S8R6@unr z_1Ka;^|-nL@-ylPcmlbTrxvLK*jcI$fYs_la0lHUAUCL=L$g7B3#?a@;A#(T#?-mX zeCi+Y0pC;vJIEfgm+T`ALrlG-k1R3dz5&YhloOOY$b-~$Qtl$}rKX#557|rhk;)YR z4Kj!HlEtKt^pgQHL3WUxWEa^@_K>|~AE{jQpUfe>WUedM^WUfz#MDRn$pD!kJII5s zUwA&w?xfsBc9T71FWE;bH}6H}kj12*43G)3gX|=`$ZoQS>?QliciocO%0r*Y91$cnm%gY zrACcnct$Z^qhc95^K+>2Qd3OXN7+v~KsiCVgK{V3F3R1Mdnlh6B_ZskrjHsmn)e#b zdyzTRcq!+S#nkvHmymvH0+j2?1T`I$50af^7kMw)P4FKe3w*bGCXH8JY)_v zUdp*-F*QEQC1ilCClh1`d64WRyU2UVZnB3wLH3e;y` z(;mtv$UgF2(iq3oCcR`X=_5wvWGlD_L1+B#(4TnddXbUN0yKQvYt$k z2gy$IUb34!LH3gGl4^qZpFFKRGH#~LFSNNvY1Seon$xJOZJf}i*Csr(n}VT zKGIJH$OPFzc9LCWH`zn>l6|DYtDq1zGKch%#iWn)lL0b8c95N97uikrkiBFdsj}%m znL~QXV$w(Y$pD!kJIGG5i|i(Q$X>FKR8#0bnL~QXV$w(Y$pG0wc9A_~A8AY#f4roR z43HgU7uiGhk;XLICw*jq>>#_y9_AiKyOvX4}A86Gl+^peG-kMxrPGC_8bon#l;P4`hwLT$NVR}>By&hF=_3PVVuADr zIw*Hi?xNgHxrcHu>?jpcp&4kB|Vh;NMjLQkv=j&c930UA89P6 zP0~jO$PTiL>>>NKW{KGEA^S)pk3Nt-GC+2az4;PfRUphEi%CD3AUnx!vX@kav`-e3 zelkIJlHFu4S-e#2`^f~^Np_RHq*_Kl$zsw^Cdf`woh@<6A&W^rnIJpKZnBqD%W0qN zI`@W2;e|b9w@>uFq*_BeWHIR{6J#gZP4<$ig!ai|(oZJHPO_WqCDmHmCyPlxnIJn! zRZ2T#G3h50WGC58_L6EH?UTi%pG=UQWH;GMs`a!_7L$ImbA#x+$zD=zq)oDz^pgp) zlk6sYNmWk!WHIR{6J$5pOR7z@NfwiSGC_8d-DEGRDrlc9CjDfB>?FI%UQ$)kK3Poq z$pqO+c9XrN+D!YTpG=UQWH;GMsw&zfi%CD3AiK$4QdQF?=_eCpC)rK*lBz~*CbkMY z$!@ZjRNLqe=_eCpC)rK*l4?6`lEtK-Opu*qH`z<7i)f!LCjDfB>?FI%_X08&=njkh zUQ#vFEm=(Z$pqO+_O^;0wU;)@V$x40$WF4G>?Ku{_Q_(>PbSDtvYYHBRgCt@V$x40 z$WF4G>?Kv4_Q_(ho9rc38%@b#(y!(HqW6;tvXks4dr8$!w`4KtClh3MyVPmDq`I8- z8(B>H$pqO+c9XrNIzanmF}e0Yt~z6qpK^liB)iF8Qe8n;WHIR{6J#gZP4<%NO4=uj zNk5q&JIQXcmsD5LK3Poq$pqO+c9XrNx|;UM;;WgSWP?V6jb-md1lL@ku>?V6jbp!867L$H5 zL3WbeWG|@>(>_^D`pE>@Np_R!M%pAh$!@ZjR5#I-EGGSAg6t%_$zD?3O#5Up=_eCp zC)rK*lIrucPZpDYGC_8d-DEGRZV~(4w+eenbsK#ki%CD3AUnx!vRCVmi2Y8oo9rdk z7w8XJO!~=AvYYHB)fZ`#EGGSAg6t%_$==(=rn-an$zsw^Cdf{*o9rdkQQ9Yq$%gx- zT&?}8@IKQ0fXK5S7WO`pi?YOIv_s17Z>8pdWAJ;eDwuS|q=S>LoAkmYf5x{mdNZ;!b2H~>uE;FU{7mN2 z%!e|c$vm0)%giZRXJzfmdMfLctPisOE6X!^(d2z<>E!b#*G~>jzJBuElOLY^#N-o` ze>nLUlRun1ExRUrSN0dOzmxq^_WRj0r!1b5Kjn*4{xD_k)GtmwKDA}qGt(wd-!Q#n z`UBHXP0yQg?u=bCnr9rCk(lxM8AoT_JL6k3UYzmk8ULK&nK@_X`7>)~?wZ*+vw7x~ zGY`$Ycjnh-J~8vznctcD!4g?}rYxO5nD=?pavIW-=fsIt^#{I?K$-_KFguRk1hI!|@0)#_Ds zKK5%DV@=Md{siAX#xDM0#yXX4tjBs>8TMXYs8$#o)Van+RgB&IK4X(A#g6_9v7>*J zQLC`uR&6o-Y6o`bUu=9v)nP||00r!U(G$Q&M`wc1jh+g=Iywh@XY?HK*EIbzX`U%I zhm(`Y>Es-;fIOevM7EQcj}=!5@}1GkOr&C5u<~GXuUivN*CyAYG@;Tl; zm$JU&63RLZ%PBkW>!W4^spF+%q+_AOul+e)>~xH@|2kgIl+k`V@3=HmLR&&sk&Riu zaVxba>kr^wa(~ueAYYaBcd#+*zd@ZQ2hI>pJ)G$wbcRZYR)P5;rolnyA4e}S%ze79vNtu48r1QVdDeaH* z$ zOP8PYGFDk2DS2tZi=&jX?`3s&G#wzvE zN-2R(``QQXsxj-XacEo5=>qp=Jp?vp9Rr=M&$#oxg0~W`ANC-4^*P^|C^nx18?#;n zoi>+OND16sAvtyb#qy+R`KnUU?`-xjbm~nt8Ye|@MxGptlZqz#Lmp_xqi z({ToRNFyLmQllVefO!8Q+!^RM3A5E$XeNV(nhMt@&Lj$_!JUD=lyD~8ndnmqbKuTU zUNRT1O`KiKhGq_2n`$;W7w!x-4>Z+$xHixSn+drD?o6Ck%!Q^I#QS^M=Z=suxG+_e zjKhVY+Q@y_gJY`8$o=?$grVBW1L`d3F9!|vdGzq`9$NAi?A9^Vtsve?gx;QkQ%z?> z{sMY@2EK_SyaT;HQ{4_4=mnk&`6ziOdVq$yi~KTrfu_2fyazo&Lv@m0K|JujP!MN< z(a$uovq*S9&UhN?tK@^K44MZ(ywwN$gG}`h`LHU7<`EDB9#sMP-^s75&Cq;}Jchoi zfxc)pG*75n$WMZ%`UcL28tR+m(`q|3Pl1MdM(u$7E%La!7@B86Q+-?2L4FRzyQx(G zau0bz)kE_g&`{r1LCDXO-&0M{ya1Zmy%vJ}5@@RLV^5Qzen7s0d^2&nwHcaM(U&&W z56K_l#3|m%4C0NcDhBx{pov~|8~Bde2fmAZGu0_|0Q|eU5_bNnu7>>II{EqtJhiJZ5|i`md9Z8^@r3 zg8YW@IP_0~hI-0)67o06r;Tqy^DWR+&lpcbJ`S2V_xlXwZByaf4W;|Jg?#w*|tjaR`}4f!U{ zk3dtMG=2j4$K-3q>(KlJG}If$Pa(ff{uH0qGt|$>pBuk`{!Q{j@`6=|XL6j5opOEL0^YMuv)N-Jy z7Md=|i^wIW2b#rXo_PlJXORWw2g(r8yp&RUqC% zW=@2BE@-NdnF0AyGHhl+vj;R(#LR}=LbjSyq1j8u%<0fa$+$Ta`ZjVO_8_8;1yQ@2 zxsdmhmz#5-IY3@%&V&96&`?*K3m{)bCd@_9bbzM%jJX8zLGoJjENHGFKWi31|2YtE z;V_p%J_MTT2J>vlhsm4F70}!WqCPiQLB5&1#gwlb-3p>UH_wB71T@tb&GRAOP98OV z(A)u{_BKl(-$~wWmO}GoveR4-{XOJYO!+F(z2yDo2I%ht4fTLo4*9F(gJuQfhs@2; z{~Ktkhs|opkC6Xv)|l{{tM4gKHANv?aK zpGao7x}eV_C%f*2J_|I|6xaQbv&pHh2Ov*#Jp}y>*TayfgNDj+Jqmdy>2-Y#npvQ! za$UzD&nD-(9*1TQInVVZ^z%Uzr*^&xc_C=3MXskIF9z{eXV){3^FULb<$4y(cRdG9 z0cfgHR}bWMps6l!oq$|MZg71UnhQZgmAhVmypi1GdI_2eap)W-a{V6i^&sj8 z*N2b~lQ+5k1kH^g>Ic`KA>T~i;`$hxTgfA?ze0Z-`32W0=)Xwb;ra*kw}a^Kxjuz_ zl)TgRPiXEUzw9zh^!GsY^jt2;_mEvKe85e81w_r@Is@_p&{r?sjj6CPcQltD$cO4b|$dg&ZOGy0=0T1x*!mZ-*QwFLUpJ zrj6X^z8L!bxkXO0up}!I|RKgvEd^OqOZi41Bpo#B%hag`A;@$P` zJ&-?3UgvIx=5ruQzB>Z>2J%MtUTAItQS#j}$e#yIe6_j_@~!0U?tRdF5j60%=XS_< zkY92ifaXrnRCl?rgnTz>sxP~*hI|i*5skY8yw80Qn)}HI+}A?$Rq{di=b(RxeAs;m z`hO!Ib>9H}zms2g-w6HJK(v7Fn;{<~A9vpZ%@gD|+_yphBxv9(zF&a+9NFW(9h&ce zXx-dLAwN%k&wVE}-z9(Iz8msS-S>b$cXxrmaNi4?Z-E$VxbFwwaX$bK_dEps2oU{A z&%9J1f@BzURkn_#o&Y4Cc_GvJM$XTfJZ&w=0e^nl;> zoB&_+eAmpzmylg}Z_oEfxbUW)?~Qcf-8?@ce>n1L$Uh$00lqf!Ao#|}Yr&t5JOKWD ztXYtIt-f!)lIN@P<8P1Al9n89T^1;c4*`?W+XFry` zeM)G`-YK7%^2(H-O_@0Lrm6F%7C|X?tRevb?;N&IkUFSYMa$L>%m!HpY_zN?pc4B^|x6Qa;M~;oqJwxU2aqEUAgz= z&YgYd>{n*LKKs|RKb&pM88K(-oNMMBo^y0g*PMsud}GeZIq%H5VD9F*m(0Ct?#*-W znEU0qU!D8N+!yA)I`?mLL-VehciX%N=Y4(NQ}cS}y)-Xx{_^>O`Jwrro&Uo8SLgp? z{-5SgS#axudlr1Wz_YMz;nfSTTlkfQ>lRfl+PCQTMNcjI<)U9L`u5^ymV9r?$t8VD z{|@|55Ns!P3G&;laZ93ja{}Y2m!358}&hzcSnj#c{I>D~bBwc!-!tO8zsH zf!Y6ox{-tE-Wf#Kl%4MO(pu3i!YbI=$oq|$YuJv}u8Z)u1Aja5cQO7h!Ji-HB!JnY zU6{?O$IMLw{(|^x#LP|;{&wRpguhGiw+Cl2!dRoF#c}D-%a?t8Gl$Uf#2U@dL*pho2=j4t>2^8@154~-S{=&@^1A6 zX4TwS>(lPL`0G{=S=UdgbB2q(r_}kF`&O7s(e{p8`s0?q+tUBm`u)KA{e$)UN9*^$ z_&W|K__RN67D(7XNcitv}EDt+symS-)dl+I+nAJJtGq+avmM>RtXS^{Msy zPfI^)m^MF?zeo?2#&9;6&w0{3&{r=hd{n+~btMz-z`u&IX`>FN& zPwUq>Lx(@Y-*M_{>$k)DJ!t*jWBqnnzxP_d_glXYSicWhzYkl#k6ORaS-(Bj?+NSo zyVmau*6&N!?+>isSFGPxt>2T@?@z4X*R9{5TEA~vzaLw_f3<#3S-=0Vem}K-|7rai z!*x3RdW8OcAHSt4JZZanchV00)~PueJJj-wI<+oiFMc0X+cWD_Q|8-v3sarCGV7E& zmbJjxKDkrL-|~zNhS)tfyH0Jw-!<6*T)(Z3XYWw;Q}*KTPUHG1&l%IE{>s>%S*oh1 z)v4gLT=Pl%uAIJCJvnWhD>{8Ues|!n1o|@bzoy@5JUQ)7qk7sHm_1-#KjmR_QqG;m zq@1_a3Ga4w)2!|42>!k_>sQ9a*&hv?IJ@PH?U{cYwmlOcyv_Uszkk4A0QbdP=nyZ7 zlR57mxBRxvt5etG@1A*g8sSM(T-!5encFk}!?Qi}9nbIQPk_6R;Kxth+cPsE{{`|m z{QeEUe;2>;_uu$a!^Qsg%nk5k0q*m#`TO~G>Prj8xz1iV27h&`anTNSXi=H@(4so^ z@}d>P+6q<-`!D=0DO@qEy%4imn7N*gc5%8qdP)_QM;h9~!PTlN7>if$4n$k?8p2^! z=4*@Z4z|QY^?`UK>M-o5kEsjd@zyngSg5|AUR}5^-e0jP9&YZhsgTQpL3D+K>1v~) z&27PGdu1RRXb#4M(ZMWq}?YiinC zgNk8ETDl<6(hx>iw7NRf)DnodMT6x*q)Wp9Wlb~~h&LmPwZ0}23CAok=`n)DR4;33 zjA*m1k?5YraAcnjZ77;b%6{Q@sH;QGt>Iw*>{=U)1*4%rICOc?7xTrDe!JS@K}Qxi zEJS0f%z3HSM&g@-@omlFe%cFTk(PdnffjI`yi-4m$<$+lCLaT}HV_Z2i$t3Pab+bS zG(k%PYpp0X!Rk0tIHt-&v3f_2Cp~c%n+t;B)*xatm|ecxBd#;Ogpne;=HgDq^#O5;LhhhrHrMDaZ0I} z@pyi9jj}ZwLPe*fWIOC6Mdy>V36)}Xyd4>UTus`DDyh(e4Zc_`*t{#;&c|3H9*R02 zwk>!N8(3%ZUcP8F&`zmh*QKZ?mChdthAQhH7=#lAp{ZR}M(QJ{F-nzFDay{`pE6PF zgYmV&aIi^=RkcGd!7~<*wn+(0n%C?`&DBsHXbi3mu@VnN+YyDfpk0Cr6(WqfFBnBe z4QAV4sH`{#RdcL95)FrTsp|GvJlL$PIG47xHCw8@)I%4`TOWkCp?X!eF%*kSSxp(r zl{gDV1G~aOTxlPj&Yc!ivNn>yv;|rFq&vy0ZVlG!s;-jzj9-R zFzF@o+>+O}w*;CI3G3I2a#<=lkw6=QI#H$N!ex0|So#97R5sPXhN@v`l%sYJssLJH zs|v`IjI-~GN*l?A;wasU07^o=Lv9Mj>#Bl*aI=afCDA1x>SWU<=IL6oJFvYIn*(+I z?4_E(epXXzvCVuDa|)u7LMhoS2_Oc}Yo~d25HZAn&|$?=(cj3PU<(avC?$0cXEbrR z*@Cjy7($&OekL!(B`%~JV;fLrSOVeju0Z{s+Gtn@#BnX=)j>Qekru1g6L0%#=m)Ff z+E_4(ViVNf^jD>9RR&_QeUWH`!&Xv-rqil*b&PTCtFK1@2D?P%5Dmt5D_GJ^fuoE` zM4_*YM&hWSf(@vDBW=<8pz<{|utOwGx6~=(CfOmh%489X+3G!Yb!(6=sBG7Tg5d^L zlvbwFtqdqk|H4AD2&LPRVwA3Rl%dlb>XMLd&h$Ht`gCsW(v$AYDoW`FC8@HLZrHEb zq#Nrzw9C-x%6S;tS=ybl)R@U)YSpN*R8yjSEe)zB+P*au-_1&QgQ|%*joAvK z!ND_88mQkbk3m(Sr6~w&?7r(}K_ZUPTo7XdF|i&+eYcd&45F4NAWlQV1=)uqGmXv*pXI z2;zxf(;g4TRAmsgK}+0niDDBAIukgfQ7EF7w8C2?hG|;u9o>mf(tA$&mb|b{Dg#JgxwY=5;{s6*2AUZN z(OH+a6^AKu9eEy4He=3fw8lsZaj%N(d!_}HCK7u9mWp~GPHI?6{ywBL{!vlGpMdUSy?HV6koEj7XYaa9!yP*WPK53~jw zRBcPpl6)I0FYwiEsx2?ADl1WI%hs3GsErj{ORH4vrmE8F(yA?`YgKJ!B@}qN8Y0aq z>ipRlso!H6Y-(%X6^yd07?2K76eIGydS_pVL9u)LDk$SU8Mdzv#y8<14T>N|FcuFq zw<+)PzH@68cVabXe1`PxF&F0S-|$l0NxS81LY(L@ zbtPt)BeA9js1tjRcF?vqKt)^57BXpXpmI%HD2&b^=lxjD zIN+t$;b%&jDszJxrxjAVM7=Geh4n$S_8falg=>$)MNW=? z?K$6Ao^6a_ItKJkhb7@)ASzW_9PLF6LTh_X#JaJrCn9aA1tj=oF?32BDq6zrs;s3U zxWA$izo;jY;nbA{qf6-cT5&C*KMp_Itl^b(@N5}Lr$yWf9Vp#%qoL!{>1)bOQOZVIxY#?2iPz~y z4&TxYt$bY{j_i`=OwV6geMdg15>UG@DN(THb)l99@mQ4yS~0bpoI_HqC>+Fd4dlA z`e0l-q|$Jsb5I#+Z3`peB`l&&HnV#0F6yBf6aJKb+fmM1YwURb8qTqjI)&rA9m)xjn!UaW`KL>k(av+vDmMBb~k zMpaf+1GP13ZRy6+no@N^sc)^SsH`cg*i@}5eKjQ)DD=kGm#VVrin^7{^D*yQQM+kv zT}@S4B|0)KLF9?7E?^Eol}4j@+NIfQzzntW?Lw6Sb#(w$MhwXuz%-~H9r$8ailz-Y zb_e&fi-jIpJQNQFW9-yPEu6B)ORv+O0K}$0CXO9vxuo%GcT&#E4K^)UK@vA^oK{ZFzw!En%3%VbKL~ zO!;$d0ljF)a)?7`4Y4+%ZlFa+|4~v#ayWGdYRXzdu&a{`VX}l0E24HJrNe8@XP2WI zkG3PkGJZkX(J4+t5p__ZFT>Me8Ov>T$n2;jl>4lorZjwJ1tj zMw99Yp0u!5`1%=CMuUx^{bGt?Gp6n&gLKK|&>d}fOfFfSH&}I~F8F#Bx-r<&WQ}C4 zVVpyv8bP=wA!^uTT9dTbEPc5dY03854c;afHj*SV| zy$0BG%xBY%<68Xjh4%&8W1LAx&n7OpiOdVI2|b;exRW|9f+|h?v}GNeKm%i9E5(9T zbp4cKa~&4EBm1g?4OsZ8$G}W14%Gdt8K1muXXmdfL9>C`XPH8ZsR0T{zfJC^ySe=w zFhMv}>8F+%BWt-t9F_<6_YY-1h1kG&!>Uuz0w?WudA zco0!^vErsLWwJp_I{&q7b$;2biEqwp@zA=qN?>x*We~O4#^WUYceEHxR)%k&&dL|8 zp5&Eaa!;xVwyeCUjD$n=?YfkTp>@r~c3e9`CLz~V?112FrPxH>%8*m_jX^j61CybUPwptqa#5;=7>7GLS0ZV(h20lcC z6#RZAc>bi`k@DSZ9yR7TZLUQ_{TF;J2ooMAu(kNM8t=1VaL8ER5Pv6+SN;)dtk7@2W zW~udBS+b|isG*uJLsv+5Gi|3b7HAALVVas=I-ZawlruE@j;ypac3xVStU)YUXSS5k zlw_9)mfKX#B$u{N(h8%)6l~CTeOv}$liaV3an?oagYlFZDmd*@p0SkLZkGBh(F=)U zs4u-7^nat6nv~hZf%n#3Q#K2S>S63V`e?E63^hDkmv4XwNMFWd0YzJ+-1C|5eLjuM_K zAC96?beifVt^dL~LX_@wgMk%Lx(!FGIEZ2YUQ4Gfi| z9cM+EZaQeqnQqN0dg%tKa+hvqmC$qpM~(D8Vk)=sh}PPc)oIbAuRav#hBTDNqy zqY+3m>|ZJ2%6={(^6|s3u6~+O$4I@(akNx8$qO;D(u6$(TV{b3>uGnj=Ofb$Y^UNS z2JxIT(3P8(9eP>ma~R2`n6Aa1yMVRRz?P|xG^6iM7i+aB+S2{4==|z^3AUWl>n^d@ z>yDl@B%IunJ0~y1g^YjcI|XWFc2ewBiXa-Uo9dY}OBAi7BN|vN>4@dj6^1#CbXp?W z28eRHnHA?j3>fQly%p`#8N|{J?0Bb}NZbd}BL3-GodW6lWCEla*#*M-l^nNo*ve8n z3+*hkLn@uZ-KgV{4_3k_?_!PRxEh)q1n6?rUnf~*J=N_0N}s3=j|F8S&S^v=}HHQrnW;%CAQe8 zm7~23V26MNuAd@lBh}AK+DWOb`dFlGs?m?-vGMq;6KPyS|~y8Y?Q9N|f~Vh3;#lT?1B8|o;e>+NXjP^FtY<9r&^WFn-QOFp4ZtVY*m zcQn#sO@K3nu*xl2c6w8B>lk-p+EncK*N7e2TwxCeZCUiz06f*CVlIk3Xx+cIF0jLO zUrRU=klCt$o<^4pcUoPKv7Pf;kKq~`^o+LboRt+H`-+P*)`4~3bHl+|7 zm|YDvw_>6RLlo&#*uT2AgOVK%{7S5B8NS$}wIdZ4l4VT1utqD8bl*jED4+I{1FpEz zka8nosc2afY{Zl+o_uRdHZz(5Kb;u{e3+e%1+kGM8I@!*^-qv~aZg%4oyU^ic3mlf zOV0mMAl9|D)ccp=;c-rd;6looE{p?)JD8NQV}?B)*0>j~1NVSRyJ+v=mm69)Pd-JC z03~(IL2O-X<)$IsHIhYM=XH9yT_23w532qAVa`9VD%gZUeiZF=RPUUN;i+!IMimSo zv9B8==mykb@xcD-wnj`X|0}btSlyQ%pSI(8o`PkKn}V1OwAVyZ1pv|2!*of9)Syhy zg}_kO^JFWWoCmN{j_JP?>7T5a5Hsf`tC*tGKImyRb&(^akwL~(R#lMh?)2^4fLu&> z>d3Bi!?e6hvogScF7eyBZzYSpha8EMs{Q)cg&1Y0jO5u(U0HK^DFwQ1^}AD-dhRcE zjYoT6sIA5!O`WousxB-`j=Dn1II=J*ZL{tL^}k9!$wmDu-n67D>R0Ec8|zv(U61m{ zT6ZuL&hP3fINkU(RZF@>XU&vunv8C`ksbFmlcXD2^s)zVTxdldw5zSDDHugJy)}&E zBav1aaba>g6j!qPA4u~Iy(WFEft_k;KlA|>sgY7wl26=T!TMTDHQ09-LzUhv))e;- z&}rH&ifBJgt$p#u%3^5x?FF*bs+eO1ZJRs@dLanqJQ?B!y{MPG*8Baq{}smqaIj)a zX;n4Wu$3>`q*wX-Egsi3b14$%+Dc`QEVkEToYRV#Fl!@=50g{aP$Jb8x1q@H4@n37 zq7%by0XhJ%AQjk}kgO|;iKVcn>Gg_d%2Yp8S}PM+yi3a1)`-zSr%4t1>jT}{8ZjE^ zE~yevttvy?VTVCZnIK9P8%j6TZK~K*YKbMaRU5b0RaBO4>Zd5#SW#_Tsoq@ct14aV zv}CKC)=DZiA{+D#N-E0BeU@B}9R!=!TNl{!xdxj$wXK?}TKgXBd>fPZ+f=)8qgqp2 zwsCD~Rb7d%(pOSevt8+Zmo>70Wy!LFjYU~mMAC*Sg`U}Tw$@fR2N~yR!YyU8a9P*Z zts)l&F2f41j4dty(AdR-mL92|$(m5m zt<3|cu@UyL# z4zy5;ZgIOT3!-l<=j{bTTR~@1c2r@vklvzO$?8qCAjwo>Otf1S>b z{<>6tN=iBIx~AQ+nQNd?s+X260YPUHc?)N^KiJr%tmrWZcVT$)MA;Gwlr8$U0C+q z*Ini~{Hf|1QXBfv71UKyS!_)(zAuRLB+TwmgSG3Vo*NRdn#CTMK5d}t9mo4@8FPtp zl&?N@0!qbsYLB!`(H7gM^PFdd0;y9#mPH(p(}(Eknne#4Y_p1BD?n6<7*mdD>_PjF zHbwRq)hFLvAcqe)f7gm?L-x6{e#VbH3ywqop_W!GlLnHfb;7~MxQd3Fc0(C$;>Myt zGpizW`>b>L(zn8?_n1Pm;N*7<$8K605G2&lGMlPeq~FzuaXqUZ5zu|#EeV%AX(CG0 z>9WPE4U5msx*R40Cu5#eP*aDs;_yDk8S)mMgTNV$0J@Ov@Y~)E?AT8%BR82KN~uy( zOt(G(sbqC`N_t8AW#v-u+lnLl$WlZqpyE;^AtA95Lt%#l7bEsJMC$R1ov7>-Wg=Sb z7d()aX{&@+VLLFwoW}|&(u!L1vXJbH!dgfwJ(HfsR9H5WwxY&h(usikBJHr+C;7As zgJ2W^X<&mY>Y{n^Dz0aVm%5b541|==c!aB+b}e9)T6%326^Cq@B8w0r z+)kIJhSUs9RPEEp_9MG4Rr{S2W1$u~PZMl#v=^$yvgYrqrKZ!ul>##Eri zdT!xdc5Ky$<(MybEHh9cc@qhe7TefZBvJHqrNt|GjtlrS7pfL(XPLH!s*Zv@acHdd z_GhWxtzHw`=SDeYMoHg62g>d>HDgh+Ij~>;s&Ra3U=6TE&$vmTYgo0clkS{U^{J#s z6UP@Z)P&-AC5jz%4D_0}gkmA|U{bpEZJ~zLmAzXbX4%6g)TC?MQ;Z?(HK%mL5^Exi zbDx75qk3&=Pd7l~H(;7B-9U~;uo+1=!uY%)*c=!v;?{onl$(-`)ly=^a_}>ywWDOE zX}W=AlC)8169eJX+FFMPAyVpr$_Wz%e5`mw z9;~AjOIf$t0kH<7U3_Ot$`sp4^lOGvDm=nhMk3mX>*f|dBOYD{p zFIcA9#WZG zk?u4&M5im$oi+~9=_))y*i9YdadK?sM~%)pIKsW{$s-jFbjxt&hp+N+zIZ1YF}aH~Kt-#U!aYY^Nl_JrR-cW`hUY8l>h|HC2dDs6H`ifz zCR&?t`_jQ~V9i)KZzPc)V#IB0_B8qhp$62fsVcj)<+2b~`8hCg1iw7c5@-rGBqNSv zJJoHit=Rn%Y;Y84=i4H5Z7Y7@ASI_?rC+7zZc^F8@tH1g)&x|Iex5k7Z_Qe>Y+~Om zHjbrU{=lgqOdy4tl@_f6j1;V|lRaCqJWwLXZIHg4|HfIEcHP3&TZe|weNw)rrl@`& zl!P_;7~2Qx%5<>MJ-I9-eMmh$x)y^utK(>&>vyPR^_lN^>Gw7Wx%E;R5#WH|P^vjp zkd-p!%B5y~Gw}kif|Ymt4ao~sl!JM3_Rw6T)smA~)#x-~|8vAK(A))wrlt3`*)Al^GyX8 z1*6u{vNa)@q>`=+GNUGf{wn5{@lv~xOikca7_{QEHSfaOO0Fd)vXuidk;~e6y@VgG zmoGy#fTDsKzO;garx61ou8zta1Lk`q15lj)r}r1=d}nSSM~^{Q zk5P!;cE2ZkOva?3(y&rm?Pcf(zh!X3FG17%*qAjzLM$-d95P-eo7AO_a6bLw8Ov(2(M#0~R%cC5E2nCkB5_lON>LIlA1?rCX$l7`@CG)X zbyPH#S|cXrONSPH^k&3Y4kqai={vAS(7k|EEhOIKSs7?;7ds36tpx_r4YA*X5~in- zP$9}48&Q7sAT*gGwX#<(d6jx|n;z)Jl-2u}5vDa-Uyo&RT*-{IrLh_%tjgNW2gJPO z)5V9i2-EyJ%_Xg{FGNW?@j$7K=w@mx>++%N%qxhV!^~W?_C-58!2M zJI)5T{?B~3|igQwlpkq%B$DsP4x1KJOu<%s02(017 zg(NC}Wr6?)hcVJdlZ&<>+?XoKD8stCb(AFWr7Tv7)WMRrzSxAhBg|lFl@(*W_8jky z4I(Y1S-}(_ep4DdFRZK)Z%}_FohG|#&6r6;%_XDlFyGl_PiLUON>NL-E{IO*0?&wb z!Nnhkoa{1K9fGuKL@JHsz6VEz>3qY%pOXdkK*)JE0;%4BI}Jj>ARVF1R1)X6twQn#i(J$*6I zYLNzpH%!JY74!l$6$r{;CM(dLux49gGP#1;tBrwn%Í}BwHgB2_)e!VkMSGQHN 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 G3j7ZUO+^a; diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/compile-mono.sh b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/compile-mono.sh index 95245af689d..d768c892f31 100755 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/compile-mono.sh +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/compile-mono.sh @@ -8,7 +8,7 @@ mono nuget.exe install vendor/packages.config -o vendor; mkdir -p bin; cp vendor/Newtonsoft.Json.8.0.2/lib/net45/Newtonsoft.Json.dll bin/Newtonsoft.Json.dll; -cp vendor/RestSharp.105.2.3/lib/net45/RestSharp.dll bin/RestSharp.dll; +cp vendor/RestSharp.105.1.0/lib/net45/RestSharp.dll bin/RestSharp.dll; mcs -sdk:${netfx} -r:bin/Newtonsoft.Json.dll,\ bin/RestSharp.dll,\ diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/compile.bat b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/compile.bat index 821c60e8bf0..27681fc968d 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/compile.bat +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/compile.bat @@ -1,10 +1,12 @@ @echo off + SET CSCPATH=%SYSTEMROOT%\Microsoft.NET\Framework\v4.0.30319 + if not exist ".\nuget.exe" powershell -Command "(new-object System.Net.WebClient).DownloadFile('https://nuget.org/nuget.exe', '.\nuget.exe')" .\nuget.exe install vendor/packages.config -o vendor cp vendor/Newtonsoft.Json.8.0.2/lib/net45/Newtonsoft.Json.dll bin/Newtonsoft.Json.dll -cp vendor/RestSharp.105.2.3/lib/net45/RestSharp.dll bin/RestSharp.dll +cp vendor/RestSharp.105.1.0/lib/net45/RestSharp.dll bin/RestSharp.dll %CSCPATH%\csc /reference:bin/Newtonsoft.Json.dll;bin/RestSharp.dll /target:library /out:bin/IO.Swagger.dll /recurse:src\*.cs /doc:bin/IO.Swagger.xml diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Properties/AssemblyInfo.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Properties/AssemblyInfo.cs index 1de9edb2a81..f3b9f7d1d14 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Properties/AssemblyInfo.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Properties/AssemblyInfo.cs @@ -1,6 +1,5 @@ using System.Reflection; using System.Runtime.InteropServices; -using System.Windows; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/vendor/packages.config b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/vendor/packages.config index c87bbb79fa6..91f17cd0819 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/vendor/packages.config +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/vendor/packages.config @@ -1,5 +1,5 @@ - + From 33d7d7b4b12b3985725ae1bfbe06cd071cad4921 Mon Sep 17 00:00:00 2001 From: xhh Date: Thu, 18 Feb 2016 10:20:01 +0800 Subject: [PATCH 158/189] JavaScript: update Petstore sample and fix tests --- .../petstore/javascript/src/ApiClient.js | 6 ++++- .../petstore/javascript/src/api/PetApi.js | 4 ++-- .../petstore/javascript/src/api/StoreApi.js | 4 ++-- .../petstore/javascript/test/ApiClientTest.js | 24 +++++++++++++++++-- 4 files changed, 31 insertions(+), 7 deletions(-) diff --git a/samples/client/petstore/javascript/src/ApiClient.js b/samples/client/petstore/javascript/src/ApiClient.js index 5f6def1e17e..11c9ca67ab4 100644 --- a/samples/client/petstore/javascript/src/ApiClient.js +++ b/samples/client/petstore/javascript/src/ApiClient.js @@ -23,7 +23,11 @@ this.authentications = { 'petstore_auth': {type: 'oauth2'}, - 'api_key': {type: 'apiKey', in: 'header', name: 'api_key'} + 'test_api_client_id': {type: 'apiKey', in: 'header', name: 'x-test_api_client_id'}, + 'test_api_client_secret': {type: 'apiKey', in: 'header', name: 'x-test_api_client_secret'}, + 'api_key': {type: 'apiKey', in: 'header', name: 'api_key'}, + 'test_api_key_query': {type: 'apiKey', in: 'query', name: 'test_api_key_query'}, + 'test_api_key_header': {type: 'apiKey', in: 'header', name: 'test_api_key_header'} }; /** diff --git a/samples/client/petstore/javascript/src/api/PetApi.js b/samples/client/petstore/javascript/src/api/PetApi.js index 5843f850b4d..040032af439 100644 --- a/samples/client/petstore/javascript/src/api/PetApi.js +++ b/samples/client/petstore/javascript/src/api/PetApi.js @@ -184,7 +184,7 @@ var formParams = { }; - var authNames = ['api_key']; + var authNames = ['petstore_auth', 'api_key']; var contentTypes = []; var accepts = ['application/json', 'application/xml']; var returnType = Pet; @@ -351,7 +351,7 @@ var formParams = { }; - var authNames = ['api_key']; + var authNames = ['petstore_auth', 'api_key']; var contentTypes = []; var accepts = ['application/json', 'application/xml']; var returnType = 'String'; diff --git a/samples/client/petstore/javascript/src/api/StoreApi.js b/samples/client/petstore/javascript/src/api/StoreApi.js index 15fc97eac25..cf9bc1c78af 100644 --- a/samples/client/petstore/javascript/src/api/StoreApi.js +++ b/samples/client/petstore/javascript/src/api/StoreApi.js @@ -75,7 +75,7 @@ var formParams = { }; - var authNames = []; + var authNames = ['test_api_client_id', 'test_api_client_secret']; var contentTypes = []; var accepts = ['application/json', 'application/xml']; var returnType = Order; @@ -115,7 +115,7 @@ var formParams = { }; - var authNames = []; + var authNames = ['test_api_key_query', 'test_api_key_header']; var contentTypes = []; var accepts = ['application/json', 'application/xml']; var returnType = Order; diff --git a/samples/client/petstore/javascript/test/ApiClientTest.js b/samples/client/petstore/javascript/test/ApiClientTest.js index 58444eaef2f..b149175d682 100644 --- a/samples/client/petstore/javascript/test/ApiClientTest.js +++ b/samples/client/petstore/javascript/test/ApiClientTest.js @@ -12,8 +12,28 @@ describe('ApiClient', function() { expect(apiClient).to.be.ok(); expect(apiClient.basePath).to.be('http://petstore.swagger.io/v2'); expect(apiClient.authentications).to.eql({ - 'petstore_auth': {type: 'oauth2'}, - 'api_key': {type: 'apiKey', in: 'header', name: 'api_key'} + petstore_auth: {type: 'oauth2'}, + api_key: {type: 'apiKey', in: 'header', name: 'api_key'}, + test_api_client_id: { + type: 'apiKey', + in: 'header', + name: 'x-test_api_client_id' + }, + test_api_client_secret: { + type: 'apiKey', + in: 'header', + name: 'x-test_api_client_secret' + }, + test_api_key_query: { + type: 'apiKey', + in: 'query', + name: 'test_api_key_query' + }, + test_api_key_header: { + type: 'apiKey', + in: 'header', + name: 'test_api_key_header' + } }); }); From bb70073ca36b3e4d4ac457bda21d93e690d97a50 Mon Sep 17 00:00:00 2001 From: xhh Date: Thu, 18 Feb 2016 10:31:21 +0800 Subject: [PATCH 159/189] JavaScript: fix call to buildCollectisnParam Closes #2166 --- .../src/main/resources/Javascript/api.mustache | 4 ++-- samples/client/petstore/javascript/src/api/PetApi.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/Javascript/api.mustache b/modules/swagger-codegen/src/main/resources/Javascript/api.mustache index c9a2ad4e399..a42ad349820 100644 --- a/modules/swagger-codegen/src/main/resources/Javascript/api.mustache +++ b/modules/swagger-codegen/src/main/resources/Javascript/api.mustache @@ -42,13 +42,13 @@ '': <#hasMore>, }; var queryParams = {<#queryParams> - '': <#collectionFormat>this.buildCollectionParam(, '')<^collectionFormat><#hasMore>, + '': <#collectionFormat>this.apiClient.buildCollectionParam(, '')<^collectionFormat><#hasMore>, }; var headerParams = {<#headerParams> '': <#hasMore>, }; var formParams = {<#formParams> - '': <#collectionFormat>this.buildCollectionParam(, '')<^collectionFormat><#hasMore>, + '': <#collectionFormat>this.apiClient.buildCollectionParam(, '')<^collectionFormat><#hasMore>, }; var authNames = [<#authMethods>''<#hasMore>, ]; diff --git a/samples/client/petstore/javascript/src/api/PetApi.js b/samples/client/petstore/javascript/src/api/PetApi.js index 040032af439..07520e12414 100644 --- a/samples/client/petstore/javascript/src/api/PetApi.js +++ b/samples/client/petstore/javascript/src/api/PetApi.js @@ -102,7 +102,7 @@ var pathParams = { }; var queryParams = { - 'status': this.buildCollectionParam(status, 'multi') + 'status': this.apiClient.buildCollectionParam(status, 'multi') }; var headerParams = { }; @@ -137,7 +137,7 @@ var pathParams = { }; var queryParams = { - 'tags': this.buildCollectionParam(tags, 'multi') + 'tags': this.apiClient.buildCollectionParam(tags, 'multi') }; var headerParams = { }; From 692c865c76c40204873e8c322558d9fa851eaf8e Mon Sep 17 00:00:00 2001 From: delenius Date: Wed, 17 Feb 2016 09:30:20 -0800 Subject: [PATCH 160/189] Handle empty response.body from superagent Superagent does not always produce a `body`. See http://visionmedia.github.io/superagent/ for details. When it doesn't, we should deserialize the raw `response.text` rather than returning `null`. Currently, the JS client always returns `null` when the return type is String! This commit fixes that. --- .../resources/Javascript/ApiClient.mustache | 4 +- .../petstore/javascript-promise/package.json | 1 + .../javascript-promise/src/ApiClient.js | 56 ++++++++++++++++++- .../javascript-promise/src/api/PetApi.js | 30 ++++++---- .../javascript-promise/src/api/StoreApi.js | 12 ++-- .../javascript-promise/src/api/UserApi.js | 24 +++++--- .../petstore/javascript/src/ApiClient.js | 4 +- 7 files changed, 104 insertions(+), 27 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache index c55fbfd393d..6ef0a6a9dc5 100644 --- a/modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache +++ b/modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache @@ -208,7 +208,9 @@ // See http://visionmedia.github.io/superagent/#parsing-response-bodies var data = response.body; if (data == null) { - return null; + // Superagent does not always produce a body; use the unparsed response + // as a fallback + data = response.text; } return ApiClient.convertToType(data, returnType); }; diff --git a/samples/client/petstore/javascript-promise/package.json b/samples/client/petstore/javascript-promise/package.json index 1fdf78cf217..72a48ac71de 100644 --- a/samples/client/petstore/javascript-promise/package.json +++ b/samples/client/petstore/javascript-promise/package.json @@ -12,6 +12,7 @@ }, "devDependencies": { "mocha": "~2.3.4", + "sinon": "1.17.3", "expect.js": "~0.3.1" } } diff --git a/samples/client/petstore/javascript-promise/src/ApiClient.js b/samples/client/petstore/javascript-promise/src/ApiClient.js index 353494ea941..a0c70eb10ee 100644 --- a/samples/client/petstore/javascript-promise/src/ApiClient.js +++ b/samples/client/petstore/javascript-promise/src/ApiClient.js @@ -21,6 +21,15 @@ */ this.basePath = 'http://petstore.swagger.io/v2'.replace(/\/+$/, ''); + this.authentications = { + 'petstore_auth': {type: 'oauth2'}, + 'test_api_client_id': {type: 'apiKey', in: 'header', name: 'x-test_api_client_id'}, + 'test_api_client_secret': {type: 'apiKey', in: 'header', name: 'x-test_api_client_secret'}, + 'api_key': {type: 'apiKey', in: 'header', name: 'api_key'}, + 'test_api_key_query': {type: 'apiKey', in: 'query', name: 'test_api_key_query'}, + 'test_api_key_header': {type: 'apiKey', in: 'header', name: 'test_api_key_header'} + }; + /** * The default HTTP headers to be included for all API calls. */ @@ -158,6 +167,42 @@ } }; + ApiClient.prototype.applyAuthToRequest = function applyAuthToRequest(request, authNames) { + var _this = this; + authNames.forEach(function(authName) { + var auth = _this.authentications[authName]; + switch (auth.type) { + case 'basic': + if (auth.username || auth.password) { + request.auth(auth.username || '', auth.password || ''); + } + break; + case 'apiKey': + if (auth.apiKey) { + var data = {}; + if (auth.apiKeyPrefix) { + data[auth.name] = auth.apiKeyPrefix + ' ' + auth.apiKey; + } else { + data[auth.name] = auth.apiKey; + } + if (auth.in === 'header') { + request.set(data); + } else { + request.query(data); + } + } + break; + case 'oauth2': + if (auth.accessToken) { + request.set({'Authorization': 'Bearer ' + auth.accessToken}); + } + break; + default: + throw new Error('Unknown authentication type: ' + auth.type); + } + }); + }; + ApiClient.prototype.deserialize = function deserialize(response, returnType) { if (response == null || returnType == null) { return null; @@ -166,18 +211,23 @@ // See http://visionmedia.github.io/superagent/#parsing-response-bodies var data = response.body; if (data == null) { - return null; + // Superagent does not always produce a body; use the unparsed response + // as a fallback + data = response.text; } return ApiClient.convertToType(data, returnType); }; ApiClient.prototype.callApi = function callApi(path, httpMethod, pathParams, - queryParams, headerParams, formParams, bodyParam, contentTypes, accepts, - returnType) { + queryParams, headerParams, formParams, bodyParam, authNames, contentTypes, + accepts, returnType) { var _this = this; var url = this.buildUrl(path, pathParams); var request = superagent(httpMethod, url); + // apply authentications + this.applyAuthToRequest(request, authNames); + // set query parameters request.query(this.normalizeParams(queryParams)); diff --git a/samples/client/petstore/javascript-promise/src/api/PetApi.js b/samples/client/petstore/javascript-promise/src/api/PetApi.js index d2ece31da91..d6f7bd8275a 100644 --- a/samples/client/petstore/javascript-promise/src/api/PetApi.js +++ b/samples/client/petstore/javascript-promise/src/api/PetApi.js @@ -41,6 +41,7 @@ var formParams = { }; + var authNames = ['petstore_auth']; var contentTypes = ['application/json', 'application/xml']; var accepts = ['application/json', 'application/xml']; var returnType = null; @@ -48,7 +49,7 @@ return this.apiClient.callApi( '/pet', 'PUT', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType + authNames, contentTypes, accepts, returnType ); } @@ -73,6 +74,7 @@ var formParams = { }; + var authNames = ['petstore_auth']; var contentTypes = ['application/json', 'application/xml']; var accepts = ['application/json', 'application/xml']; var returnType = null; @@ -80,7 +82,7 @@ return this.apiClient.callApi( '/pet', 'POST', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType + authNames, contentTypes, accepts, returnType ); } @@ -107,6 +109,7 @@ var formParams = { }; + var authNames = ['petstore_auth']; var contentTypes = []; var accepts = ['application/json', 'application/xml']; var returnType = [Pet]; @@ -114,7 +117,7 @@ return this.apiClient.callApi( '/pet/findByStatus', 'GET', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType + authNames, contentTypes, accepts, returnType ); } @@ -141,6 +144,7 @@ var formParams = { }; + var authNames = ['petstore_auth']; var contentTypes = []; var accepts = ['application/json', 'application/xml']; var returnType = [Pet]; @@ -148,7 +152,7 @@ return this.apiClient.callApi( '/pet/findByTags', 'GET', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType + authNames, contentTypes, accepts, returnType ); } @@ -180,6 +184,7 @@ var formParams = { }; + var authNames = ['petstore_auth', 'api_key']; var contentTypes = []; var accepts = ['application/json', 'application/xml']; var returnType = Pet; @@ -187,7 +192,7 @@ return this.apiClient.callApi( '/pet/{petId}', 'GET', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType + authNames, contentTypes, accepts, returnType ); } @@ -222,6 +227,7 @@ 'status': status }; + var authNames = ['petstore_auth']; var contentTypes = ['application/x-www-form-urlencoded']; var accepts = ['application/json', 'application/xml']; var returnType = null; @@ -229,7 +235,7 @@ return this.apiClient.callApi( '/pet/{petId}', 'POST', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType + authNames, contentTypes, accepts, returnType ); } @@ -262,6 +268,7 @@ var formParams = { }; + var authNames = ['petstore_auth']; var contentTypes = []; var accepts = ['application/json', 'application/xml']; var returnType = null; @@ -269,7 +276,7 @@ return this.apiClient.callApi( '/pet/{petId}', 'DELETE', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType + authNames, contentTypes, accepts, returnType ); } @@ -304,6 +311,7 @@ 'file': file }; + var authNames = ['petstore_auth']; var contentTypes = ['multipart/form-data']; var accepts = ['application/json', 'application/xml']; var returnType = null; @@ -311,7 +319,7 @@ return this.apiClient.callApi( '/pet/{petId}/uploadImage', 'POST', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType + authNames, contentTypes, accepts, returnType ); } @@ -343,6 +351,7 @@ var formParams = { }; + var authNames = ['petstore_auth', 'api_key']; var contentTypes = []; var accepts = ['application/json', 'application/xml']; var returnType = 'String'; @@ -350,7 +359,7 @@ return this.apiClient.callApi( '/pet/{petId}?testing_byte_array=true', 'GET', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType + authNames, contentTypes, accepts, returnType ); } @@ -375,6 +384,7 @@ var formParams = { }; + var authNames = ['petstore_auth']; var contentTypes = ['application/json', 'application/xml']; var accepts = ['application/json', 'application/xml']; var returnType = null; @@ -382,7 +392,7 @@ return this.apiClient.callApi( '/pet?testing_byte_array=true', 'POST', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType + authNames, contentTypes, accepts, returnType ); } diff --git a/samples/client/petstore/javascript-promise/src/api/StoreApi.js b/samples/client/petstore/javascript-promise/src/api/StoreApi.js index d6f0503c136..57a3c57d86f 100644 --- a/samples/client/petstore/javascript-promise/src/api/StoreApi.js +++ b/samples/client/petstore/javascript-promise/src/api/StoreApi.js @@ -41,6 +41,7 @@ var formParams = { }; + var authNames = ['api_key']; var contentTypes = []; var accepts = ['application/json', 'application/xml']; var returnType = {'String': 'Integer'}; @@ -48,7 +49,7 @@ return this.apiClient.callApi( '/store/inventory', 'GET', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType + authNames, contentTypes, accepts, returnType ); } @@ -74,6 +75,7 @@ var formParams = { }; + var authNames = ['test_api_client_id', 'test_api_client_secret']; var contentTypes = []; var accepts = ['application/json', 'application/xml']; var returnType = Order; @@ -81,7 +83,7 @@ return this.apiClient.callApi( '/store/order', 'POST', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType + authNames, contentTypes, accepts, returnType ); } @@ -113,6 +115,7 @@ var formParams = { }; + var authNames = ['test_api_key_query', 'test_api_key_header']; var contentTypes = []; var accepts = ['application/json', 'application/xml']; var returnType = Order; @@ -120,7 +123,7 @@ return this.apiClient.callApi( '/store/order/{orderId}', 'GET', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType + authNames, contentTypes, accepts, returnType ); } @@ -151,6 +154,7 @@ var formParams = { }; + var authNames = []; var contentTypes = []; var accepts = ['application/json', 'application/xml']; var returnType = null; @@ -158,7 +162,7 @@ return this.apiClient.callApi( '/store/order/{orderId}', 'DELETE', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType + authNames, contentTypes, accepts, returnType ); } diff --git a/samples/client/petstore/javascript-promise/src/api/UserApi.js b/samples/client/petstore/javascript-promise/src/api/UserApi.js index 09f7c9e0d5b..bb93561ec1b 100644 --- a/samples/client/petstore/javascript-promise/src/api/UserApi.js +++ b/samples/client/petstore/javascript-promise/src/api/UserApi.js @@ -41,6 +41,7 @@ var formParams = { }; + var authNames = []; var contentTypes = []; var accepts = ['application/json', 'application/xml']; var returnType = null; @@ -48,7 +49,7 @@ return this.apiClient.callApi( '/user', 'POST', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType + authNames, contentTypes, accepts, returnType ); } @@ -73,6 +74,7 @@ var formParams = { }; + var authNames = []; var contentTypes = []; var accepts = ['application/json', 'application/xml']; var returnType = null; @@ -80,7 +82,7 @@ return this.apiClient.callApi( '/user/createWithArray', 'POST', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType + authNames, contentTypes, accepts, returnType ); } @@ -105,6 +107,7 @@ var formParams = { }; + var authNames = []; var contentTypes = []; var accepts = ['application/json', 'application/xml']; var returnType = null; @@ -112,7 +115,7 @@ return this.apiClient.callApi( '/user/createWithList', 'POST', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType + authNames, contentTypes, accepts, returnType ); } @@ -141,6 +144,7 @@ var formParams = { }; + var authNames = []; var contentTypes = []; var accepts = ['application/json', 'application/xml']; var returnType = 'String'; @@ -148,7 +152,7 @@ return this.apiClient.callApi( '/user/login', 'GET', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType + authNames, contentTypes, accepts, returnType ); } @@ -172,6 +176,7 @@ var formParams = { }; + var authNames = []; var contentTypes = []; var accepts = ['application/json', 'application/xml']; var returnType = null; @@ -179,7 +184,7 @@ return this.apiClient.callApi( '/user/logout', 'GET', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType + authNames, contentTypes, accepts, returnType ); } @@ -211,6 +216,7 @@ var formParams = { }; + var authNames = []; var contentTypes = []; var accepts = ['application/json', 'application/xml']; var returnType = User; @@ -218,7 +224,7 @@ return this.apiClient.callApi( '/user/{username}', 'GET', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType + authNames, contentTypes, accepts, returnType ); } @@ -250,6 +256,7 @@ var formParams = { }; + var authNames = []; var contentTypes = []; var accepts = ['application/json', 'application/xml']; var returnType = null; @@ -257,7 +264,7 @@ return this.apiClient.callApi( '/user/{username}', 'PUT', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType + authNames, contentTypes, accepts, returnType ); } @@ -288,6 +295,7 @@ var formParams = { }; + var authNames = []; var contentTypes = []; var accepts = ['application/json', 'application/xml']; var returnType = null; @@ -295,7 +303,7 @@ return this.apiClient.callApi( '/user/{username}', 'DELETE', pathParams, queryParams, headerParams, formParams, postBody, - contentTypes, accepts, returnType + authNames, contentTypes, accepts, returnType ); } diff --git a/samples/client/petstore/javascript/src/ApiClient.js b/samples/client/petstore/javascript/src/ApiClient.js index 11c9ca67ab4..d4377e34d1a 100644 --- a/samples/client/petstore/javascript/src/ApiClient.js +++ b/samples/client/petstore/javascript/src/ApiClient.js @@ -211,7 +211,9 @@ // See http://visionmedia.github.io/superagent/#parsing-response-bodies var data = response.body; if (data == null) { - return null; + // Superagent does not always produce a body; use the unparsed response + // as a fallback + data = response.text; } return ApiClient.convertToType(data, returnType); }; From a21493f2db9dc4e7a452f00a70519a4f29becd76 Mon Sep 17 00:00:00 2001 From: xhh Date: Thu, 18 Feb 2016 15:12:34 +0800 Subject: [PATCH 161/189] Ruby: fix class name reference of nested model and model name in underscore format, e.g. "my_response". Closes #2140 --- .../codegen/languages/RubyClientCodegen.java | 2 +- .../petstore/ruby/lib/petstore/api/pet_api.rb | 4 +- .../ruby/lib/petstore/api/store_api.rb | 4 +- .../ruby/lib/petstore/configuration.rb | 42 +++++++++++++++---- 4 files changed, 40 insertions(+), 12 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RubyClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RubyClientCodegen.java index 5c154d8d38e..a557872c805 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RubyClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RubyClientCodegen.java @@ -316,7 +316,7 @@ public class RubyClientCodegen extends DefaultCodegen implements CodegenConfig { if (type == null) { return null; } - return type; + return toModelName(type); } @Override diff --git a/samples/client/petstore/ruby/lib/petstore/api/pet_api.rb b/samples/client/petstore/ruby/lib/petstore/api/pet_api.rb index f6d3a52a760..c8aa23b6565 100644 --- a/samples/client/petstore/ruby/lib/petstore/api/pet_api.rb +++ b/samples/client/petstore/ruby/lib/petstore/api/pet_api.rb @@ -298,7 +298,7 @@ module Petstore # http body (model) post_body = nil - auth_names = ['api_key'] + auth_names = ['petstore_auth', 'api_key'] data, status_code, headers = @api_client.call_api(:GET, path, :header_params => header_params, :query_params => query_params, @@ -550,7 +550,7 @@ module Petstore # http body (model) post_body = nil - auth_names = ['api_key'] + auth_names = ['petstore_auth', 'api_key'] data, status_code, headers = @api_client.call_api(:GET, path, :header_params => header_params, :query_params => query_params, diff --git a/samples/client/petstore/ruby/lib/petstore/api/store_api.rb b/samples/client/petstore/ruby/lib/petstore/api/store_api.rb index 40c27f23f8e..828435653b2 100644 --- a/samples/client/petstore/ruby/lib/petstore/api/store_api.rb +++ b/samples/client/petstore/ruby/lib/petstore/api/store_api.rb @@ -122,7 +122,7 @@ module Petstore # http body (model) post_body = @api_client.object_to_http_body(opts[:'body']) - auth_names = [] + auth_names = ['test_api_client_id', 'test_api_client_secret'] data, status_code, headers = @api_client.call_api(:POST, path, :header_params => header_params, :query_params => query_params, @@ -182,7 +182,7 @@ module Petstore # http body (model) post_body = nil - auth_names = [] + auth_names = ['test_api_key_query', 'test_api_key_header'] data, status_code, headers = @api_client.call_api(:GET, path, :header_params => header_params, :query_params => query_params, diff --git a/samples/client/petstore/ruby/lib/petstore/configuration.rb b/samples/client/petstore/ruby/lib/petstore/configuration.rb index 05973753287..60f689cda6d 100644 --- a/samples/client/petstore/ruby/lib/petstore/configuration.rb +++ b/samples/client/petstore/ruby/lib/petstore/configuration.rb @@ -157,13 +157,6 @@ module Petstore # Returns Auth Settings hash for api client. def auth_settings { - 'api_key' => - { - type: 'api_key', - in: 'header', - key: 'api_key', - value: api_key_with_prefix('api_key') - }, 'petstore_auth' => { type: 'oauth2', @@ -171,6 +164,41 @@ module Petstore key: 'Authorization', value: "Bearer #{access_token}" }, + 'test_api_client_id' => + { + type: 'api_key', + in: 'header', + key: 'x-test_api_client_id', + value: api_key_with_prefix('x-test_api_client_id') + }, + 'test_api_client_secret' => + { + type: 'api_key', + in: 'header', + key: 'x-test_api_client_secret', + value: api_key_with_prefix('x-test_api_client_secret') + }, + 'api_key' => + { + type: 'api_key', + in: 'header', + key: 'api_key', + value: api_key_with_prefix('api_key') + }, + 'test_api_key_query' => + { + type: 'api_key', + in: 'query', + key: 'test_api_key_query', + value: api_key_with_prefix('test_api_key_query') + }, + 'test_api_key_header' => + { + type: 'api_key', + in: 'header', + key: 'test_api_key_header', + value: api_key_with_prefix('test_api_key_header') + }, } end end From 0b125984da47fe7e0c970ac34b265daf62b1fe06 Mon Sep 17 00:00:00 2001 From: wing328 Date: Thu, 18 Feb 2016 16:15:15 +0800 Subject: [PATCH 162/189] add postProcessAllModels --- .../io/swagger/codegen/CodegenConfig.java | 2 ++ .../io/swagger/codegen/DefaultCodegen.java | 7 +++++ .../io/swagger/codegen/DefaultGenerator.java | 24 ++++++++++++++++ .../petstore/ruby/lib/petstore/api/pet_api.rb | 4 +-- .../ruby/lib/petstore/api/store_api.rb | 4 +-- .../ruby/lib/petstore/configuration.rb | 28 +++++++++++++++++++ 6 files changed, 65 insertions(+), 4 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConfig.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConfig.java index 9bb5b89089a..84f7fc50fb8 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConfig.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConfig.java @@ -119,6 +119,8 @@ public interface CodegenConfig { void addOperationToGroup(String tag, String resourcePath, Operation operation, CodegenOperation co, Map> operations); + Map postProcessAllModels(Map objs); + Map postProcessModels(Map objs); Map postProcessOperations(Map objs); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java index 6cb4c93e466..07ee0279c3e 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java @@ -109,12 +109,19 @@ public class DefaultCodegen { } } + // override with any special post-processing for all models + @SuppressWarnings("static-method") + public Map postProcessAllModels(Map objs) { + return objs; + } + // override with any special post-processing @SuppressWarnings("static-method") public Map postProcessModels(Map objs) { return objs; } + // override with any special post-processing @SuppressWarnings("static-method") public Map postProcessOperations(Map objs) { diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java index 96f0f2146b9..f817b244b3c 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java @@ -183,6 +183,10 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { sortedModelKeys = updatedKeys; } + // store all processed models + Map allProcessedModels = new HashMap(); + + // process models only for (String name : sortedModelKeys) { try { //don't generate models that have an import mapping @@ -195,6 +199,26 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { modelMap.put(name, model); Map models = processModels(config, modelMap, definitions); models.putAll(config.additionalProperties()); + + allProcessedModels.put(name, models); + + } catch (Exception e) { + throw new RuntimeException("Could not process model '" + name + "'", e); + } + } + + // post process all processed models + allProcessedModels = config.postProcessAllModels(allProcessedModels); + + // generate files based on processed models + for (String name: allProcessedModels.keySet()) { + Map models = (Map)allProcessedModels.get(name); + + try { + //don't generate models that have an import mapping + if(config.importMapping().containsKey(name)) { + continue; + } allModels.add(((List) models.get("models")).get(0)); diff --git a/samples/client/petstore/ruby/lib/petstore/api/pet_api.rb b/samples/client/petstore/ruby/lib/petstore/api/pet_api.rb index f6d3a52a760..7efcd21c74d 100644 --- a/samples/client/petstore/ruby/lib/petstore/api/pet_api.rb +++ b/samples/client/petstore/ruby/lib/petstore/api/pet_api.rb @@ -298,7 +298,7 @@ module Petstore # http body (model) post_body = nil - auth_names = ['api_key'] + auth_names = ['api_key', 'petstore_auth'] data, status_code, headers = @api_client.call_api(:GET, path, :header_params => header_params, :query_params => query_params, @@ -550,7 +550,7 @@ module Petstore # http body (model) post_body = nil - auth_names = ['api_key'] + auth_names = ['api_key', 'petstore_auth'] data, status_code, headers = @api_client.call_api(:GET, path, :header_params => header_params, :query_params => query_params, diff --git a/samples/client/petstore/ruby/lib/petstore/api/store_api.rb b/samples/client/petstore/ruby/lib/petstore/api/store_api.rb index 40c27f23f8e..5b669bca101 100644 --- a/samples/client/petstore/ruby/lib/petstore/api/store_api.rb +++ b/samples/client/petstore/ruby/lib/petstore/api/store_api.rb @@ -122,7 +122,7 @@ module Petstore # http body (model) post_body = @api_client.object_to_http_body(opts[:'body']) - auth_names = [] + auth_names = ['test_api_client_id', 'test_api_client_secret'] data, status_code, headers = @api_client.call_api(:POST, path, :header_params => header_params, :query_params => query_params, @@ -182,7 +182,7 @@ module Petstore # http body (model) post_body = nil - auth_names = [] + auth_names = ['test_api_key_header', 'test_api_key_query'] data, status_code, headers = @api_client.call_api(:GET, path, :header_params => header_params, :query_params => query_params, diff --git a/samples/client/petstore/ruby/lib/petstore/configuration.rb b/samples/client/petstore/ruby/lib/petstore/configuration.rb index 05973753287..e5f39898027 100644 --- a/samples/client/petstore/ruby/lib/petstore/configuration.rb +++ b/samples/client/petstore/ruby/lib/petstore/configuration.rb @@ -157,6 +157,13 @@ module Petstore # Returns Auth Settings hash for api client. def auth_settings { + 'test_api_key_header' => + { + type: 'api_key', + in: 'header', + key: 'test_api_key_header', + value: api_key_with_prefix('test_api_key_header') + }, 'api_key' => { type: 'api_key', @@ -164,6 +171,27 @@ module Petstore key: 'api_key', value: api_key_with_prefix('api_key') }, + 'test_api_client_secret' => + { + type: 'api_key', + in: 'header', + key: 'x-test_api_client_secret', + value: api_key_with_prefix('x-test_api_client_secret') + }, + 'test_api_client_id' => + { + type: 'api_key', + in: 'header', + key: 'x-test_api_client_id', + value: api_key_with_prefix('x-test_api_client_id') + }, + 'test_api_key_query' => + { + type: 'api_key', + in: 'query', + key: 'test_api_key_query', + value: api_key_with_prefix('test_api_key_query') + }, 'petstore_auth' => { type: 'oauth2', From fd9a62adbe41529f138c0aff489e524c9968f6a3 Mon Sep 17 00:00:00 2001 From: wing328 Date: Thu, 18 Feb 2016 16:40:13 +0800 Subject: [PATCH 163/189] update php test case with higher memory limit --- README.md | 654 +----------------- .../SwaggerClient-php/tests/PetApiTest.php | 4 + 2 files changed, 19 insertions(+), 639 deletions(-) diff --git a/README.md b/README.md index 3f5f11ea9f0..794a7c49b1b 100644 --- a/README.md +++ b/README.md @@ -1,646 +1,22 @@ -# Swagger Code Generator +## Frameworks supported +- .NET 4.0 or later +- Windows Phone 7.1 (Mango) -[![Build Status](https://travis-ci.org/swagger-api/swagger-codegen.svg)](https://travis-ci.org/swagger-api/swagger-codegen) -[![Maven Central](https://maven-badges.herokuapp.com/maven-central/io.swagger/swagger-codegen-project/badge.svg?style=plastic)](https://maven-badges.herokuapp.com/maven-central/io.swagger/swagger-codegen-project) -[![PR Stats](http://issuestats.com/github/swagger-api/swagger-codegen/badge/pr)](http://issuestats.com/github/swagger-api/swagger-codegen) [![Issue Stats](http://issuestats.com/github/swagger-api/swagger-codegen/badge/issue)](http://issuestats.com/github/swagger-api/swagger-codegen) +## Dependencies +- [RestSharp] (https://www.nuget.org/packages/RestSharp) - 105.1.0 or later +- [Json.NET] (https://www.nuget.org/packages/Newtonsoft.Json/) - 7.0.0 or later -:star::star::star: If you would like to contribute, please refer to [guidelines](https://github.com/swagger-api/swagger-codegen/blob/master/CONTRIBUTING.md) and a list of [open tasks](https://github.com/swagger-api/swagger-codegen/issues?q=is%3Aopen+is%3Aissue+label%3A%22Need+community+contribution%22).:star::star::star: - -## Overview -This is the swagger codegen project, which allows generation of client libraries automatically from a Swagger-compliant server. - -Check out [Swagger-Spec](https://github.com/OAI/OpenAPI-Specification) for additional information about the Swagger project, including additional libraries with support for other languages and more. - -# Table of contents - - - [Swagger Code Generator](#swagger-code-generator) - - [Overview](#overview) - - [Table of Contents](#table-of-contents) - - Installation - - [Compatibility](#compatibility) - - [Prerequisites](#prerequisites) - - [OS X Users](#os-x-users) - - [Building](#building) - - [Docker](#docker) - - [Build and run](#build-and-run-using-docker) - - [Run docker in Vagrant](#run-docker-in-vagrant) - - [Public Docker image](#public-docker-image) - - [Homebrew](#homebrew) - - Generators - - [To generate a sample client library](#to-generate-a-sample-client-library) - - [Generating libraries from your server](#generating-libraries-from-your-server) - - [Modifying the client library format](#modifying-the-client-library-format) - - [Making your own codegen modules](#making-your-own-codegen-modules) - - [Where is Javascript???](#where-is-javascript) - - [Generating a client from local files](#generating-a-client-from-local-files) - - [Customizing the generator](#customizing-the-generator) - - [Validating your OpenAPI Spec](#validating-your-openapi-spec) - - [Generating dynamic html api documentation](#generating-dynamic-html-api-documentation) - - [Generating static html api documentation](#generating-static-html-api-documentation) - - [To build a server stub](#to-build-a-server-stub) - - [Node.js](#nodejs) - - [PHP Slim](#php-slim) - - [PHP Silex](#php-silex) - - [Python Flask (Connexion)](#python-flask-connexion) - - [Ruby Sinatra](#ruby-sinatra) - - [Scala Scalatra](#scala-scalatra) - - [Java JAX-RS (Java JAX-RS (Jersey v1.18)](#java-jax-rs-jersey-v118) - - [Java JAX-RS (Apache CXF 3)](#java-jax-rs-apache-cxf-3) - - [Java Spring MVC](#java-spring-mvc) - - [Haskell Servant](#haskell-servant) - - [To build the codegen library](#to-build-the-codegen-library) - - [Workflow Integration](#workflow-integration) - - [Online Generators](#online-generators) - - [Guidelines for Contribution](https://github.com/swagger-api/swagger-codegen/wiki/Guidelines-for-Contribution) - - [License](#license) - - -## Compatibility -The OpenAPI Specification has undergone 3 revisions since initial creation in 2010. The swagger-codegen project has the following compatibilies with the OpenAPI Specification: - -Swagger Codegen Version | Release Date | OpenAPI Spec compatibility | Notes --------------------------- | ------------ | -------------------------- | ----- -2.1.6-SNAPSHOT | | 1.0, 1.1, 1.2, 2.0 | [master](https://github.com/swagger-api/swagger-codegen) -2.1.5 (**current stable**) | 2015-01-06 | 1.0, 1.1, 1.2, 2.0 | [tag v2.1.5](https://github.com/swagger-api/swagger-codegen/tree/v2.1.5) -2.0.17 | 2014-08-22 | 1.1, 1.2 | [tag v2.0.17](https://github.com/swagger-api/swagger-codegen/tree/v2.0.17) -1.0.4 | 2012-04-12 | 1.0, 1.1 | [tag v1.0.4](https://github.com/swagger-api/swagger-codegen/tree/swagger-codegen_2.9.1-1.1) - - -### Prerequisites -If you're looking for the latest stable version, you can grab it directly from maven central (you'll need java 7 runtime at a minimum): - -``` -wget http://repo1.maven.org/maven2/io/swagger/swagger-codegen-cli/2.1.4/swagger-codegen-cli-2.1.4.jar swagger-codegen-cli.jar - -java -jar swagger-codegen-cli.jar help -``` - -On a mac, it's even easier with `brew`: -``` -brew install swagger-codegen +The DLLs included in the package may not be the latest version. We recommned using [NuGet] (https://docs.nuget.org/consume/installing-nuget) to obtain the latest version of the packages: ``` - -To build from source, you need the following installed and available in your $PATH: - -* [Java 7 or 8](http://java.oracle.com) - -* [Apache maven 3.0.3 or greater](http://maven.apache.org/) - -#### OS X Users -Don't forget to install Java 7 or 8. You probably have 1.6. - -Export JAVA_HOME in order to use the supported Java version: -``` -export JAVA_HOME=`/usr/libexec/java_home -v 1.8` -export PATH=${JAVA_HOME}/bin:$PATH +Install-Package RestSharp +Install-Package Newtonsoft.Json ``` -### Building - -After cloning the project, you can build it from source with this command: -``` -mvn package -``` - -### Docker -#### Build and run using docker - -``` -git clone https://github.com/swagger-api/swagger-codegen -cd swagger-codegen -./run-in-docker.sh mvn package - ``` - - - -#### Run Docker in Vagrant -Prerequisite: install [Vagrant](https://www.vagrantup.com/downloads.html) and [VirtualBox](https://www.virtualbox.org/wiki/Downloads). - ``` -git clone http://github.com/swagger-api/swagger-codegen.git -cd swagger-codegen -vagrant up -vagrant ssh -cd /vagrant -./run-in-docker.sh mvn package - ``` - -#### Public Docker image - -https://hub.docker.com/r/swaggerapi/swagger-generator/ - -### Homebrew -To install, run `brew install swagger-codegen` - -Here is an example usage: -``` -swagger-codegen generate -i http://petstore.swagger.io/v2/swagger.json -l ruby -o /tmp/test/ -``` - - -### To generate a sample client library -You can build a client against the swagger sample [petstore](http://petstore.swagger.io) API as follows: - -``` -./bin/java-petstore.sh -``` - -(On Windows, run `./bin/windows/java-petstore.bat` instead) - -This will run the generator with this command: - -``` -java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar generate \ - -i http://petstore.swagger.io/v2/swagger.json \ - -l java \ - -o samples/client/petstore/java -``` - -with a number of options. You can get the options with the `help generate` command: - -``` -NAME - swagger generate - Generate code with chosen lang - -SYNOPSIS - swagger generate [(-a | --auth )] - [(-c | --config )] - [-D ] - (-i | --input-spec ) - (-l | --lang ) - [(-o | --output )] - [(-t